NEST 3.10 is the result of 1876 commits by 25 developers since NEST 3.9 which was released on 2025-09-30.
This long-awaited release changes the inner structure by removing the legacy simulation language interface (SLI) layer and promoting PyNEST as primary user interface. People already using NEST via Python will benefit from the cleaner function calls, without any changes necessary to their code. Depending on the model setup, instantiation of large models may be noticeably faster. Simulation run-times are mostly unaffected, or have been seen to speed up in a few cases. Along with these changes, NEST can now be installed directly from PyPI with
pip install nest-simulatorCheck out more details in the docs: "What's new in NEST 3.10"
Enhancements
- Provide more information about changes introduced by PyNEST-NG
- Move from boost::any to std::variant
- Restore full welcome message
- Restore GetStatus backward compatibility with NEST 3.9 for plain output
- PyNEST-NG: A new Python interface for NEST directly connecting Python to C++
- Add PyNEST example for ArtificialSynchrony
- Add PyNEST examples for Brette et al. 2007
- Add
pip installoption to documentation - E-prop optimizations
- Introduce generic IgnoreAndSpikeMechanism and add ignore-and-spike support to eprop neurons and iaf_psc_delta
- New feature: cycle timers
- Improve documentation on wall-time vs cpu time timers
- Modernize the stopwatch implementation
- Add correct metadata for "New feature: cycle timers"
- Introduce more intuitive parameterization of surrogate gradients
- Enable distributed parameter values for
EpropArchivingNode,FlushEventMechanism,IgnoreAndSpikeMechanism
Bug Fixes
- Convert non-thread-skipping from unittest to pytest
- Add Apple' stub-based libraries (.tbd) to list of library suffixes
- Ensure NEST can be built without Boost
- Fix issue: #3532: Disconnect correctly with CompressedSpikes:ON/Off
- Fix a number of problems with GetNodes
- nest-server: BadRequest: 400 Bad Request: name '' is not defined
- Make parsing of XML files robust against extra > at end of file
- Fix issue with sorting when simulating more than 2 billion neurons
- Reinstate get/set_verbosity for backward compatiblity
- Fix CI trigger for
nest-extension-module - Hike Cython version requirement to >=3.0.0
- Update dependabot.yml pip path and version strategy to
increase-if-necessary - multimeter/voltmeter now raise an exception if one tries to set a recording interval that is not a multiple of the resolution
- Update documentation requirements path in environment.yml
- Fix use-after-free of ltdl error string
Maintenance
- Add missing include needed on macOS 26.4
- Replace deprecated MPI C++ bindings by their C equivalent
- Update dependabot.yml pip path and version strategy to
increase-if-necessary - Clarify documentation of node
update()method - Add note in docs about how to use volume transmitter during network setup
- Remove test_get_nodes.sli
- Remove test_global_rng.sli to complete #3630
- Integrate one_to_one and pairwise_bernoulli cases into test_all_to_all
- Remove test that has no meaningful function any more
- Simplify test implementation and remove complex reusable code for better readability (replacement for #3510)
- Add missing case to ticket-800 test
- Update comment to reflect behavior after merge of #3103.
- Convert unittest test_symmetric_connections to Pytest
- Convert unittest test_threaded_multimeter to Pytest
- Update test_pp_psc_delta.py and remove sli version
- Convert unittest test_spike_poisson_ps_base2 to Pytest
- Convert unittest test_ppd_sup_generator to Pytest
- Convert unittest test_gamma_sup_generator to Pytest
- Convert unittest test_inh_stdp_synapse to Pytest
- Remove issue-1974.sli as a follow-up to #3439
- Redirect performance benchmarks docs to new repository
- Add
venvoption for source installation in docs - Update doc install requirements
- Fix assertion to ensure range index is properly cast to size_t
- Fix destructor warning by updating PoolWrapper destructor signature
- Refactor
sli_vector_to_objectfunction to fix unreachable code warning - Replace numpy.in1d() with numpy.isin() in testsuite
- Implement activation events to reduce memory usage in the e-prop mechanism
- Minor documentation fixes
- Fix compiler warnings related to
size_t - Fix typesetting error in eprop_iaf_psc_delta_adapt documentation
- Pin libNeurosim/CSA version in CI install
- Add pandoc to the environment dependencies
- Update N-MNIST download URL and robustify download method in e-prop tutorial
- Add links for impressum and data protection on Read the Docs
- Load
NMNIST_pixels_blocklist.txtrelative to script directory - Update conf.py to fix pynest links and fix build warnings
- Add documentation to install latest development version with pip
- Restrict wheel build workflow to releases and manual triggers
- Remove helpdesk (and fix formatting in many files)
- Remove last mentions of SLI
- Remove
nest_vars.shand adjust corresponding documentation - Remove run_test.sh
- Fix typo in citation
- Improve maths typesetting in Hill-Tononi synapse
- Fix broken link in docs
- Reorganize test files
- Fix minor typos in docs
- Remove deprecated eprop image and simplify image paths
- Hide default thumbnail image from autogenerated sphinx-gallery
- Fix format all c c++ files
- Rename
nest-dockermasterbranch tomain - Remove unused pool class and ends_with() function
- Delete link to X, formerly known as Twitter
- Add a link to more details on installing NEST via pip
- Update what's new for 3.10
- Trusted publishing to pypi
- Fix failing weight plot in e-prop examples
- Add missing model to eprop model relationships image
- Move implementation and improve docs in flush event mechanism
- Fix the Python 3.14 builds and add some clarifications to the documentation
- Fix docs warnings
- Fix compiler warnings
- Test on CI without Boost and GSL and adjust tests where necessary
- Clarify installation instructions for mamba
- Change dependabot versioning-strategy for Python packages
- Update Python interpreter image in tutorial
The list contains 98 PRs.
There were also the following pull requests aside the above categorization:
-
Port test_localonly from SLI to Py and fix bug in GetLocalNodeCollection (Bug Fixes)
-
Port test_connect_array_*_mpi from SLI to Pytest (Maintenance)
-
Port test_rate_neurons_mpi from SLI to Py (and improve MPITestWrapper) (Maintenance)
-
Port test_issue_1974 from SLI to Py (Maintenance)
-
Port regression test 665 to Pytests (Maintenance)
-
Port regression test 414 to Pytests (Maintenance)
-
Port regression test 451 to Pytests (Maintenance)
-
Port regression test 452 to Pytests (Maintenance)
-
Port regression test 464 to Pytests (Maintenance)
-
Port regression test 481 to Pytest and remove test 466 (Maintenance)
-
Port regression test 507 to Pytests (Maintenance)
-
Port regression test 478 to Pytests (Maintenance)
-
Port regression test 433 to Pytests (Maintenance)
-
Port regression test ticket 772 to Pytests (Maintenance)
-
Port regression test ticket 737 to Pytests (Maintenance)
-
Port regression test ticket 716 to Pytests (Maintenance)
-
Port regression test ticket 710 to Pytests (Maintenance)
-
Port regression test ticket 798 to Pytests (Maintenance)
-
Port regression test ticket 800 to Pytests (Maintenance)
-
Port test_delay_exchange from SLI to Py (Maintenance)
-
Port mpitests/test_fixed_indegree from SLI to Py (Maintenance)
-
Port test_ginzburg_neuron from SLI to Py (Maintenance)
-
Port mpitest/test_global_rng from SLI to Python (Maintenance)
-
Port mpitets/test_iaf_ring from SLI to Py and refactor in the process (Maintenance)
-
Port most mpitests/test_*_generator to Python (Maintenance)
-
Port mpi-based tests of spatial connectivity from SLI to Py (Maintenance)
-
Port test_multiple_synapses from SLI to Py (Maintenance)
-
Port mpitests/test_multiplicity from SLI to Py (Maintenance)
-
Port test_neuron_vp* from SLI to Py (Maintenance)
-
Port test_parallel_conn_and_rand from SLI to Py (Maintenance)
-
Port test_rate_neurons_mpi from SLI to Py (and improve MPITestWrapper) (Maintenance)
-
Port tests for identical and individual spike trains from poisson generator from SLI to Py (Maintenance)
-
Port test_spatial_distributed_positions from SLI to Py (Maintenance)
-
Port test_spatial_pairwise_bernoulli_on_source_param from SLI to Py (Maintenance)
-
Port test_symmetric_connections_mpi from SLI to Py (Maintenance)
-
Port ticket-516 test from SLI to Py (Maintenance)
-
Port test ticket-955 from SLI to Py (Maintenance)
-
Port regression test 619 to pytests (Maintenance)
-
Port regression test 643 to Pytests (Maintenance)
-
Port regression test 673 to Pytests (Maintenance)
-
Port regression test 689 to Pytests (Maintenance)
-
Port regression test 692 get_connections to Pytest (Maintenance)
-
Port regression test 686 positive params to Pytest (Maintenance)
-
Port regression test 638 to Pytests (Maintenance)
-
Port regression test 832 to Pytests (Maintenance)
-
Port regression test 737 to Pytests (Maintenance)
-
Port regression test 740 to Pytests (Maintenance)
-
Port regression test 514 to Pytests (Maintenance)
-
Port regression test 421 to Pytests (Maintenance)
-
Port regression test 386 to Pytests (Maintenance)
-
Port regression test 564 to Pytests (Maintenance)
-
Port regression test 573 to Pytests (Maintenance)
-
Port regression test 618 to Pytests (Maintenance)
-
Port regression test 881 to Pytests (Maintenance)
-
Port regression test 85 to Pytests (Maintenance)
-
Port MUSIC tests from SLI to Python (Maintenance)
-
Port unittest test_psp_amplitude_consistency to Pytest (Maintenance)
-
Port unittest test_stdp_synapse to Pytest (Maintenance)
-
Port unittest test_syn_hom_w to Pytest (Maintenance)
-
Port unittest test_iaf_psp_normalized to Pytest (Maintenance)
-
Port unittest test_iaf_psp_peak to Pytest (Maintenance)
-
Port unittest test_iaf_psp to Pytest (Maintenance)
-
Port test for issue-1703 from SLI 2 Python (Maintenance)