A new version of bifurcationkit
Dear all,
Almost three years have passed since the previous major BifurcationKit (BK) update. Since then the package has reached v0.8.7,. What started as a continuation engine for F(u, λ) = 0 is now a broad numerical bifurcation toolbox for ODE, PDE, DAE, BVP, DDE and homoclinic problems, surrounded by a set of plugins that keeps growing.
Here is a tour of what is new or has not been reported.
The 2023 announcement was all about codim-2 continuation of periodic orbits. The years that followed were quiet but busy: a long succession of releases (v0.3 → v0.5) kept adding methods, hardening the codim-2 machinery. The next big change arrived at the end of 2025, with a ground-up refactor of the periodic-orbit machinery shipped as v0.6.0: a strict separation between the discretization (shooting, collocation, trapezoidal rule) and the problem one continues, exposed through PeriodicOrbit{Tdisc}. Discretizations now have consistent names — Shooting, Collocation, Trapeze.
A new preconditoner allows to run the computations of periodic orbits of Ginzburg-Landau equation on github CI!
Under the hood, the Poincaré return map was reworked around a single evolution primitive and the flow now exposes derivatives with respect to parameters and higher-order differentials, R01, R11, R20, R30. These feed the normal forms and make branching from codim-2 points more robust. The jet machinery dispatches cleanly between AutoDiff(), FiniteDifferences(), etc, and works for any AbstractBifurcationProblem.
this paves the way for the use of DifferentiationInterface in all BK
Normal-form computations got a lot of love too, basically relying on bordered linear solves for having more robust coefficient estimation. Additionally, the normal form now accepts start_with_eigen = Val(false), which builds the right/left kernel basis with a bordered linear system instead of an eigensolver — far more robust on large-scale problems. The Neimark–Sacker and period-doubling Iooss normal forms are now evaluated at the Gauss points, in the correct row layout of the collocation operator, which solves the long-standing bug.
Differential-Algebraic Equations (new in v0.8.5)
The latest release opens a whole new class of problems:
M(x,p)\,\dot x = F(x,p),
with a possibly singular mass matrix. This is wrapped in DAEMassBifProblem, stability is decided by the generalized eigenproblem J v = λ M v, and the eigensolver is automatically wrapped in EigenDAE. Fold and Hopf points are detected and refined with mass-aware bordered systems, the Hopf normal form is available for DAEs. Under the hood, it required a massive refactor of the linear/eigen solver API plus many changes in Fold/Hopf continuation API.
This paves the way to handling PDE based on FEM/etc and lead to the joint development of GridapBifurcationKit.jl. This API could be used for Ferrite.jl, BCube.jl, etc.
You can also do fancy things like computing waves with frozen symmetry - computing modulated spiral waves of the complex Ginzburg-Landau equation on the disk specified with Gridap.
!!! info The next big step will be seamless continuation of periodic orbits of DAE. This is possible already (see GridapBifurcationKit.jl, collpits) but a big hacky.
Boundary Value Problems — the next big thing 
!!! warning
This is the newest and the most unfinished part of BK. It is very much a work in progress, and it will be the subject of a next major PR.
BK is progressively growing a general boundary value problem interface for
\frac{du}{dt} = F(u,p),\qquad g(u(t_0), u(t_f), p) = 0,
of which periodic orbits are just the special case g(u₀, u₁) = u₀ - u₁. It reuses the same discretizers — Trapeze, Collocation (now with non-uniform meshes through TimeMesh) and Shooting — and adds BVPModel, DiscretizedBVP, discretize, generate_solution, mesh adaptation and the BVPBifProblem wrapper for continuation and deflated continuation. The mathematical plumbing is in place and promising, but the final unification with the periodic-orbit machinery is exactly what the next major PR is about. Sneak peek: BVP documentation. In passing, the hope is to remove a lot of redundant code, solve BVP, allow for non-autonomous systems.
Plotting
Plotting is now backend-agnostic: set_plot_backend! switches between BK_Plots(), BK_Makie() and BK_NoPlot() on the fly, and the Makie support gained, among others, stability segments and proper unstable-branch styling.
Unified documentation
The documentation now regroups the main packages in the top banner (idea from SciML).
A growing ecosystem
The real story of these three years is arguably the ecosystem around BK:
- DDEBifurcationKit.jl — delay differential equations, now with state-dependent delays, analytical Jacobians, Floquet exponents, codim-2 detection and automatic branch switching from Hopf points.
- HclinicBifurcationKit.jl — homoclinic/heteroclinic orbits with adaptive collocation or shooting, branch switching from Bogdanov–Takens, and now the ability to seed a homoclinic problem from a periodic orbit of large period.
- MultiParamContinuation.jl (new) — Henderson’s chart/atlas covering algorithm for multi-parameter continuation: continue the surfaces of codimension-1 bifurcations in three parameters, or a surface of periodic orbits, with a BifurcationKit and a Makie extension. The chart adaptation is now more robust, matrix-free problems are allowed (no issue with dimension) and the metric can be changed.
Future
A big thank you to all contributors, users!!