This is the developer manual for NEST. For assistance with using NEST, please use the NEST users’ mailing list.
In order to keep the community up to date with NEST development, we use a public source code repository. Any unpublished, internal work is done in private repositories and made public when ready.
For ways to add your own code to NEST, please read further.
Development infrastructure and workflow
NEST development is backed by multiple interlinked systems, most notably:
- a central source code repository hosted on GitHub
- the associated GitHub issue tracker
- continuous integration for pull requests provided by TravisCI
- self-hosted mailing lists based on Mailman.
The development workflow is based purely on pull requests. This means that no direct commits to the repository are allowed. All new material must go through the code review process.
The details of the development workflow and the code review process can be found in the following pages:
The NEST simulator is a scientific tool that is is constantly changing to meet the needs of novel neuroscientific endeavors. If functionality you need is not included in NEST already, you can extend NEST. The easiest way to add neuron or synapse models to NEST is in the form of a plugin in the form of an extension module:
A neuron model in NEST is a C++ class that contains the neuron dynamics and implements the API for setting and retrieving parameters, updating the dynamics, sending and receiving events, and recording analog quantities from the model.
Devices are similar to neurons, but used to stimulate the network or record from the neurons without necessarily having internal dynamics:
Synapses mediate the signal flow between neuron or device models. They can either be static or implement synaptic plasticity rules such as spike time dependent plasticity (STDP):
If you find models written for NEST version 2.4 and prior not working anymore in newer versions, it is most likely due to recent updates to the API for neuron and synapse models. We’ve put together a conversion guide to make the transition of models easier for you:
NEST is a complex piece of software with a long history. Here’s a collection of documents describing the NEST simulation kernel in chronological order to help you get started:
- Diesmann et al. (2002): An environment for neural systems simulation explains the first version of the NEST simulation kernel.
- J.M. Eppler (2006): A Multithreaded and Distributed System for the Simulation of Large Biological Neural Networks explains the general architecture of the first hybrid-parallel version of NEST, which is the 2nd generation of the simulation kernel.
- Helias et al. (2012): Supercomputers ready for use as discovery machines for neuroscience. explains updates to the simulation kernel to enable the routinely use of supercomputers.
- Kunkel et al. (2014): Spiking network simulation code for petascale computers introduced the 4th generation connection infrastructure of NEST, which reduces the memory consumption considerably and thus enables the use of the world’s largest supercomputers.
For even more information, please see the numerous publications about the technology behind NEST.
We encourage contributions to NEST! New models, new functions, and any general improvements to NEST are most welcome!
To prevent bit rot all code in NEST must adhere to some minimal coding and naming conventions:
- Coding Guidelines for C++
- Coding Guidelines for SLI
- Naming convention for neuron models
- Naming convention for synapse models
- Naming convention for variables and parameters
Please ensure that you follow these guidelines while adding new features to NEST. The workflow manual documents the development process in detail.
Contributor License Agreement
In order to make sure that the NEST Initiative can manage the NEST code base in the long term, you need to send us a completed and signed NEST Contributor Agreement to transfer your copyright to the NEST Initiative before we can merge your pull request.
You might also want to consider becoming a member in the NEST Initiative.