Change log#
↗️ = updated since previous release
v2026.7.9#
This maintenance release advances three ecosystem components to their latest
releases — BrainEvent 0.1.2, BrainTrace 0.2.4, and BrainPy
2.8.1 — and pins Optax >= 0.2.8 as an explicit supporting dependency
for the gradient-based tooling. The bumps are mutually consistent: BrainTrace
(from 0.2.3) now depends on BrainEvent at runtime — its sparse_matmul
operand must be a brainevent.DataRepresentation — and BrainEvent 0.1.2 lands
the batched dt2t operators that implement the D-RTRL eligibility-trace update
BrainTrace drives, so the two move together and the pinned set stays coherent.
Package Dependencies:
optax>=0.2.8↗️ (now pinned explicitly)
BrainEvent
0.1.2— batcheddt2toperators, naming cleanup, GPU fixes:Adds batched (
mm) variants of the per-synapsedt2toperators —csrmm_dt2t/cscmm_dt2t(CSR/CSC) andfcnmm_dt2t(fixed-connection-number / ELL) — implementing the batchedDᵗ εᵗ⁻¹term of the D-RTRL eligibility-trace updateεᵗ ≈ Dᵗ εᵗ⁻¹ + diag(D_fᵗ) ⊗ xᵗ, withnumba(CPU),cuda_raw(GPU), andjax_raw(CPU/GPU/TPU) kernels plus JVP rulesFolds the
DT2T/DT_to_Tnaming convention into a single lowercasedt2tspelling across the public API (the JIT-connectivity variants gain anmvinfix:jitnmv_dt2t/jitsmv_dt2t/jitumv_dt2t) and consolidates the GPU cuSPARSE SpMV/SpMM backends under one'cusparse'selector — a rename with unchanged behavior. Breaking: no compatibility aliases are kept, so call sites must be updated (the default'cuda_raw'GPU backend is unaffected)Fixes several GPU-only autodiff and output-shape defects in the event-driven CSR and fixed-connection-number kernels
BrainTrace
0.2.4— online learning through JAX control flow (spans0.2.3and0.2.4):Control-flow-aware compilation: ETP operations inside
vmap,cond,scan/brainstate.transform.for_loop, and weight-freewhilebodies now participate in online learning via a new canonicalization + descent pipeline, so recurrent cells built with control flow no longer silently drop parameters from the trace graph; the compiler is now deterministic across processes and transparently inlines userjax.jitbodiesNew ETP operators:
grouped_matmul,embedding, andeinsum, each with hand-written ETP rules, a matchingbraintrace.nnlayer (GroupedLinear,Embedding), and single-step BPTT-oracle coverage; the D-RTRL multi-step trace update is chunk-factorized for a 2.4–4.5× speedup on multi-step windowsParameter-transform hooks (from
0.2.3): optional, shape-preservingweight_fn/bias_fn/kernel_fnhooks on the ETP operators apply a transform to a trainable parameter before it enters the op while the eligibility trace and gradient stay with respect to the raw stored parameter (D-RTRL matches backprop-through-time for non-identity transforms); threaded through thebraintrace.nnlinear layersCorrectness & contract: a full
_op/_algorithmaudit closes 24 findings. Breaking:element_wiserenamesfn→weight_fn,sparse_matmulrenamesweight_data→weight, andsparse_matmulnow requires abrainevent.DataRepresentationoperand (brainunitu.sparsetypes are no longer accepted), which addsbraineventas a runtime dependency
BrainPy
2.8.1— second audited correctness sweep:A library-wide bug-fix sweep (#868) fixes 18 confirmed defects — each backed by a co-located regression test — across
dnn, the integrators, encoders, initializers, connectivity, optimizers,dynoldshort-term plasticity, the offline / online training algorithms, the object-transform layer, and the simulation runnersRepresentative fixes:
LayerNormnow normalizes over the trailingnormalized_shape; a never-spikingWeightedPhaseEncoderand aPoissonGroupspiking regression; the Stratonovich Euler–Heun predictorsqrt(dt)scaling; theMomentumNesterovlook-ahead andAdadeltalearning rate; aRidge/LinearRegressionIRLS seed that returned the untrained initial weights; and adaptive pooling on up-samplingDrives package-wide
mypyto zero errors and moves__version__/__version_info__into a dedicatedbrainpy._versionmodule
Optax pinned explicitly:
optax>=0.2.8is now listed directly inrequirements.txt(previously pulled in transitively) so the gradient-based tooling — e.g. BrainMass’s OptaxFitterand the BrainTools optimizers — installs deterministically with the bundle
v2026.6.29#
This is a maintenance and refinement release. It refreshes two ecosystem
components to their latest releases — BrainState 0.5.2 and BrainTrace
0.2.2 — slims the bundled dependency set by removing pinnx, and adds a
cross-package compatibility / correctness test suite that exercises the pinned
stack end-to-end. The two component bumps are coupled: BrainTrace 0.2.2
requires BrainState >= 0.5.2, and BrainState 0.5.2’s new in_new_state_probe()
is exactly the hook BrainTrace’s unified compile path uses to cooperate with the
eager state-discovery probe — so the pinned set stays mutually consistent.
Package Dependencies:
pinnx— removed from the bundled dependency set (see below)
BrainState
0.5.2— additive transform feature:Adds
brainstate.transform.in_new_state_probe(), a public predicate that lets state-bound, one-shot consumers cooperate with the eager discovery probe thatvmap_new_states/vmap2_new_states/pmap2_new_statesrun to enumerate the states a function creates before the real mapped passImplemented as a thread-local depth counter, so it composes under nested
*_new_statescalls and resets cleanly even if the probe raisesNo public API is removed or renamed, and behavior is unchanged for code that does not call the new helper; 28 new regression tests, green on the JAX
0.7–latest matrix and the type-check gate
BrainTrace
0.2.2— unified online-learning entry point and vmap fixes:braintrace.compile(model, algorithm, *example_inputs, ...)is now the canonical single call for building a compiled eligibility-trace learner — it always initializes states, acceptsseed/verbose, adds avmap=option for per-sample state initialization, and exposes a structuredCompilationReportAdds a recurrent mixing mode to graph construction, broadening the set of cell topologies the compiler can connect
Fixes eligibility-trace convergence under
vmap/brainstate.mixin.Batching()by deferring compilation during the discovery probe (aligning convolutional and element-wise traces), and routesLoRAthrough the ETPlora_matmulprimitive so its factors participate in trace learningMigrates unit handling from
saiunittobrainunit(a re-export, so it is drop-in), raises thebrainstatefloor to>= 0.5.2, targets Python 3.14, and renames private modules (_etrace_*→_*); 1604 tests pass and the documented 0.2.x public API is unchanged
Removed
pinnxfrom the bundled set:The default
brainxinstall now scopes to the core brain-simulation stack; PINNx (physics-informed neural networks) remains a fully supported, independently released ecosystem project and can still be installed on its own withpip install pinnx
Cross-package compatibility testing:
Adds
BrainX/compatibility_test.py, a co-located suite that imports the pinned packages together and drives small, deterministic computations across package boundaries: a unit-carryingbrainstatestate integrated bytransform.for_loop,braineventevent/sparse operators checked against dense references,braintoolsinitializers/metrics, abrainpy.stateneuron step, abraincell.SingleCompartmentintegration, abrainmassmean-field run, and thebraintrace.compileeligibility-trace path on BrainState0.5.2Tests are now co-located beside the package in the suffix style: the legacy
BrainX/tests/test_version.pybecomesBrainX/version_test.py(thetests/folder is removed), it drops itspinnximport and pin and now also importsbraintrace, andpyproject.tomlconfigures pytest to collect*_test.py
v2026.6.19#
This is a landmark release: the first fully integrated and compatibility-hardened BrainX collection. Every pinned component has been independently audited for correctness, retested, and aligned to a single, mutually-consistent dependency contract — resolving the cross-package incompatibilities and latent numerical bugs that affected earlier mixed-version combinations. The result is the most complete and stable BrainX stack to date, spanning the full modeling spectrum: from morphologically detailed single-cell modeling (dendritic, multi-compartment), through point-neuron network simulation, to neural-mass / firing-rate whole-brain modeling — all differentiable, unit-aware, and built on a shared JAX foundation.
Package Dependencies:
jax<=0.10.2,>=0.8.0↗️ (raised both bounds; JAX 0.10.2 now supported)
BrainCell
0.1.0— multi-compartment, morphologically detailed neurons:Evolves from single-compartment Hodgkin–Huxley into a complete multi-compartment framework: a
Celldeclaration frontend, a frozenRunnableCellruntime, and a high-levelrcell.run(dt=, duration=)driver returning a structuredRunResultImmutable morphology layer (
Soma/Dendrite/Axon/BasalDendrite/ApicalDendrite/CustomBranch) plus a mutableMorphologytreePure-functional control-volume discretization with composable policies (
CVPerBranch,DLambda,MaxCVLen) and an execution-graph compute runtimeDeclarative mechanism system (
braincell.mech), morphology IO (braincell.io: SWC / ASC / NeuroML2 readers, NeuroMorpho.Org client), location/region filters, and a 2D/3D visualization stack (matplotlib, PyVista, Plotly)Added cerebellar dynamics (Purkinje-cell comparison scaffold); package now PEP 561-typed
BrainMass
0.1.1— differentiable whole-brain modeling:Turns a library of neural-mass models into an end-to-end simulate → observe → score toolkit (introduced in
0.1.0), with gradients flowing through the entire pipeline so parameters can be recovered by gradient descentHigh-level
Simulator,Network, andFitter(gradient-based Optax, gradient-free Nevergrad, and Bayesian scikit-optimize backends)Seven new literature-faithful mean-field models (Epileptor, Larter–Breakspear, Coombes–Byrne, Generic 2-D oscillator, Wong–Wang E/I, Lorenz, Linear) — 17 model families total — plus nonlinear couplings, an HRF-BOLD forward model, and composable differentiable objectives (time-series RMSE, FC, FCD)
Bundled
datasets, optionalvizhelpers,list_models(), and a new Diátaxis-organized documentation site0.1.1raises thebraintoolsconstraint to>=0.3.0(the release that fixed theinit.parambatched-init regression), so brainmass co-installs withbrainpy2.8.0 across the ecosystem
BrainPy
2.8.0— library-wide correctness sweep and static typing:Audited bug-fix pass across neuron/synapse dynamics, ODE/SDE/FDE integrators, the math and object-transform layer,
dnnlayers, optimizers, losses, analysis, and runners — each fix backed by regression tests (notably aCondNeuGroupsynaptic-current scaling error that attenuated currents ~1000×)Static typing with a new
mypyCI gate (PEP 561); coverage raised from ~84% to 92%+; tests co-located as<module>_test.pyRemoved forked internals by reusing the shared
braintools(init, metric, surrogate) andbrainstate(transforms) implementations
BrainTools
0.3.0— completed correctness, coverage, and documentation audit:Completes the codebase-wide audit campaign begun in
0.2.0acrossmetric,trainer,optim,visualize,surrogate,quad,init,conn,file, andcogtask, lifting per-module coverage to ~92–100%Corrected genuine numerical/algorithmic bugs: inverted surrogate-gradient formulas, an
nll_losssign error, LFP coherence identically1, He/Kaiming initialization variance off by 2×, double-applied SM3 momentum, a centered RMSprop that was a silent no-op, and droppedcogtask.ParallelbranchesNew/restored public API:
file.save_matfile, gradient accumulation and name-based parameter freezing intrainer, anLBFGSline-search, exportedmetric.safe_norm/ pairwise-cosine helpers,cogtask.create_task, andmetric.L1Loss
BrainState
0.5.1— JAX 0.10.2 compatibility:Fixes the
vmapregression caused by JAX 0.10 removingjax.interpreters.batching.not_mapped; theunvmapprimitives now resolve the sentinel version-agnostically (full suite: 5312 passed). No public API changes; compatible acrossjax>=0.7.0
BrainEvent
0.1.1— custom-operator / FFI hardening:Audit of the JAX custom-op / FFI layer fixed ~30 defects that produced silently-wrong output or process crashes (proper
XLA_FFI_Errorpropagation, fp16/bf16/complex handling, a multi-GPU device-binding race, correctedindptr/ CSC construction)The numba FFI bridge now works across
jax0.7–0.9 (not only 0.10+), and compatibility with newer JAX is restored. No public API changes
BrainTrace
0.2.1— ecosystem dependency compatibility:Adopts
brainstate0.5’s typed (PEP 561) surface (clearing 154 mypy errors), updates for hardened convolution validation, and fixespytest9.1 collection (1367 passed, mypy clean,py.typedshipped). No functional/API changes
BrainUnit
0.5.1— unit-contract compatibility patch:Resolves the upstream
saiunit/brainunitunit-contract issue surfaced across the ecosystem (thertoldimensionless /atolunit-carrying convention), keeping numerical-tolerance handling consistent withbraintrace0.2.1 andbrainevent0.1.1. No public API changes
Cross-ecosystem compatibility:
BrainState 0.5.1, BrainUnit 0.5.1, BrainEvent 0.1.1, and BrainTrace 0.2.1 jointly resolve the JAX 0.10.x
vmap/ FFI regressions and thesaiunittolerance-unit contract, while BrainPy 2.8.0 and BrainTools 0.3.0 eliminate forked-internals drift by reusing the sharedbraintools/brainstateimplementations. Earlier mixed-version stacks could surfaceAttributeErrorundervmap, silently-wrong FFI results, or unit-handling crashes — all addressed hereBrainMass 0.1.1 raises its
braintoolsfloor to>=0.3.0(matching BrainPy 2.8.0’s requirement), resolving the lastbraintoolsversion conflict so the entire pinned set co-installs cleanly. The combination was validated end-to-end: the full BrainMass test suite (692 tests) passes against this exact dependency set
v2026.6.18#
This maintenance release upgrades BrainPy-State to its 0.1.0 release.
v2026.6.14#
This maintenance release upgrades BrainState to its 0.5.0 release.
v2026.6.11#
This maintenance release refreshes the pinned infrastructure component versions.
v2026.6.8#
This release ships inline type information (PEP 561), consolidates the continuous
integration workflows, completes the repository rename to brainx, and refreshes
the pinned component versions.
Package Dependencies:
jax<=0.10.1,>=0.6.0↗️ (raised upper bound)
Typing:
Added a PEP 561
py.typedmarker so that downstream type checkers (mypy, pyright) treatBrainXas a typed packageDeclared
py.typedas package data inpyproject.tomlso it ships in the wheel
Continuous Integration:
Merged the push/pull-request workflow and the scheduled workflow into a single
CI.ymlThe cross-platform test suite (Linux, macOS, Windows) runs on push, pull request, and manual dispatch
A JAX-version compatibility matrix (
0.7.1,0.8.0,0.9.0, and latest) runs on a daily schedule and on manual dispatch
Repository:
Renamed the GitHub repository from
brain-modeling-ecosystemtobrainx; updated all source, documentation, and packaging URLs accordingly
Documentation:
Corrected the “Open in Colab/Kaggle” badges in every example notebook to target their actual paths on the
mainbranchReplaced the logo and favicon with hosted WebP assets and removed the bundled 3.5 MB
plotly.jsRemoved unused static assets (legacy PWA manifest, service worker, and stale images)
README:
Fixed the BrainTrace link, which previously pointed at the renamed
brainscalerepositoryAdded PINNx to the list of ecosystem components
Replaced the broken Read the Docs badge with Documentation and License badges
v2026.3.12#
This release updates package dependencies and drops Python 3.10 support.
Package Dependencies:
jax<=0.9.1,>=0.6.0↗️ (adjusted upper bound)
Project Configuration:
Dropped Python 3.10 support; minimum Python version is now
>=3.11Removed version bounds from JAX optional extras (
cpu,cuda12,cuda13,tpu)
v2026.1.31#
This release updates package dependencies and includes extensive documentation formatting improvements.
Package Dependencies:
Documentation:
Extensive formatting improvements across documentation notebooks and markdown files
Renamed
highlight_test_lexer.pytofix_ipython.pyfor better clarityUpdated all example notebooks with improved formatting and structure
Refreshed documentation structure and presentation
Project Files:
Updated GitHub templates (issue templates, PR template)
Improved CI/CD workflow configurations
Updated project configuration files (.gitignore, .pre-commit-config.yaml, .readthedocs.yml)
Enhanced contributing guidelines and code of conduct
v2026.1.22#
This release updates braintools package dependency.
v2026.1.21#
This release updates brainpy package dependency.
v2026.1.19#
This release updates package dependencies and CI/CD infrastructure.
Package Dependencies:
Documentation:
Updated paper reference for BrainTrace in ecosystem.html
CI/CD:
Bumped styfle/cancel-workflow-action from 0.12.1 to 0.13.0 (#57)
v2026.1.16#
This release updates package dependencies, documentation, and copyright notices.
Package Dependencies:
Copyright:
Updated copyright notice from BDP Ecosystem Limited to BrainX Ecosystem Limited
Documentation:
Updated paper reference for BrainTrace in ecosystem.html
Removed papers_using_us.md file
CI/CD:
Bumped styfle/cancel-workflow-action from 0.12.1 to 0.13.0 (#57)
Bumped braintools from 0.1.6 to 0.1.7 (#56)
Code Updates:
Updated import statements from
brainpytobrainpy.statein notebooks (#55)Updated CI configuration to use Python 3.13 and adjusted JAX versions
Updated multiple documentation notebooks with corrected imports and examples
v2025.12.26#
This release updates multiple package dependencies and improves CI/CD infrastructure.
v2025.12.25#
This release updates multiple package dependencies and improves CI/CD infrastructure.
Package Dependencies:
brainpy-state==0.0.1↗️ (new, replaces brainpy)
CI/CD:
Bumped actions/checkout from 5 to 6 (#48)
v2025.12.2#
This release introduces BrainTrace (replacing BrainScale) and updates multiple package dependencies.
Package Dependencies:
jax>=0.6.0↗️braintrace==0.1.1↗️ (renamed from brainscale)pinnx==0.0.3↗️ (new)
Documentation Updates:
Renamed BrainScale to BrainTrace in documentation and requirements
Updated ecosystem documentation with additional descriptions
Deprecated BrainTaichi component
Removed 3D card effect from ecosystem.html
Added braintools import and updated class inheritance in spiking network notebooks
CI/CD:
Bumped actions/upload-artifact from 4 to 5 (#46)
v2025.10.13#
This is the first release of the complete BrainX ecosystem, integrating multiple packages for comprehensive brain simulation and analysis.
Package Dependencies:
Documentation Fixes:
Updated BrainPy link in ecosystem documentation (#43)
Fixed image sources to use absolute URLs for BrainMass and BrainEvent logos
Copied CHANGELOG.md to the documentation directory for better accessibility
Reorganized static JavaScript files (moved service-worker.js to js subdirectory)
README Updates:
Updated documentation and references (#42, #43)
v2025.10.08 (yanked)#
Project Updates:
First integrative version of the BrainX ecosystem (#40)
Rebranded to BrainX and revamped documentation (#23)
Updated project description and author details to “BrainX Ecosystem”
Added support for CUDA 13 in optional dependencies
Documentation Enhancements:
Enhanced brain simulation documentation with English and Chinese versions (#36)
Added comprehensive core components documentation (#29)
Added HH thalamus oscillations notebooks and examples (#31, #32)
Updated core components documentation and removed obsolete Golgi file (#33)
Added Kaggle dataset download for Golgi cell morphology (#25)
Fixed ipython2 lexer to ipython3 in notebooks (#27)
Corrected titles and updated references in documentation files
Package Dependencies:
jax>=0.6.0,<0.8.0↗️brainpy==3.0.0↗️brainunit==0.1.1(from 0.0.18)brainstate==0.2.1↗️ (from 0.1.10)brainevent==0.0.4braincell==0.0.5↗️ (from 0.0.4)braintools==0.1.1↗️ (from 0.0.12)brainscale==0.0.11↗️ (from 0.0.10)brainmass==0.0.3
CI/CD:
Bumped actions/setup-python from 5 to 6 (#26)
Bumped actions/checkout from 4 to 5
Fixes:
Updated project name and copyright in conf.py; refactored lexer import (#28)
Updated Golgi cell notebook to include Kaggle dataset download and path adjustments
Updated index.rst to reference brain_simulation_point_neuron.md (#24)
v2025.9.15#
BrainXpackages:numpy>=1.15️↗️jax>=0.4.35,<0.8.0↗️brainunit==0.1.1↗️brainstate==0.1.10↗️brainevent==0.0.4↗️braincell==0.0.4↗️braintools==0.0.11↗️brainscale==0.0.10↗️brainmass==0.0.3↗️msgpack>=1.1.0↗️matplotlib↗️