DynamicalSystems.jl is a library in the literal sense
Award winning software library for nonlinear dynamics and nonlinear timeseries analysis
At a glance
- What is it?
- DynamicalSystems.jl is a Julia package for nonlinear dynamics and nonlinear time series analysis, and the argument its README makes is unusual. It is not only a toolbox, it is a place to learn, and the way it achieves that is by writing implementations small enough to read, documenting each algorithm with the paper it came from, and making the interfaces general enough that a new method fits in a few lines.
- Who is it for?
- DynamicalSystems.jl fits a researcher or graduate student who has just read a method in a paper and does not want to reimplement it, since the documented algorithms and the general interfaces make that a call rather than a project, and it fits a teacher who needs worked examples that can be examined. It does not fit a production service engineer looking for a stable API, because the package is under active development with monthly changes.
- Can I use it commercially?
- Check first. The repository uses a licence we do not classify automatically, so read its LICENSE file before any commercial use.
- Is it still maintained?
- Yes. The repository last received commits 11 days ago.
- What is it written in?
- Mainly Julia, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.
Editorial analysis
What the library covers
The package is described as an award-winning Julia-based general-purpose software library for the whole of nonlinear dynamics and nonlinear timeseries analysis, and the content list is where the scope becomes clear. There is functionality for complexity measures, delay embeddings, periodic orbits, nonlocal stability analysis, basins of attraction, continuation, chaos, fractal dimensions, surrogate testing and recurrence quantification analysis, among others. Two properties of that list are worth noting. The algorithms are described as general, meaning they work for any dynamical system they apply to rather than for one particular family, and missing functionality in that wide category is explicitly welcomed into the library. The extension of the library reaches into neighbouring disciplines, since the topics carry the mathematics of complexity and physics alongside the dynamical systems, and the JOSS paper and the Springer textbook badge in the README point at an academic audience rather than a product one.
Documentation is the product
The first highlight is exceptional documentation, and the explanation of what that means is specific. All implemented algorithms provide a high-level scientific description of their functionality in their documentation string, as well as references to scientific papers, and the documentation features hundreds of tutorials and examples ranging from introductory to expert usage. That is a stronger claim than having good reference documentation, because a scientific description next to the code tells you what the algorithm assumes and what it computes, and the reference tells you whether the implementation matches the paper. The award referenced in the README comes from a SIAM magazine software contest, which fits a project whose value is partly pedagogical, and the JOSS DOI and the textbook reference make it citable, which matters for the reproducibility goal that comes later.
Small implementations on purpose
The second highlight is accessible source code, and it states a key priority of the library, which is to keep the source code of implementations small, simple, easy to understand and to modify. The reasoning given is worth repeating because it is unusual for a scientific package to say out loud. It increases confidence, reduces bugs, and allows users to become developers without unnecessary effort. The argument is about inspection. A package that implements a hundred algorithms in a hundred files of two thousand lines each is impossible to check, and a reader who suspects a wrong result has no way to find out. A package that implements the same hundred algorithms in a hundred files of a hundred lines each can be read, argued with, and fixed, and the authors claim that the same reasoning is what lets a graduate student contribute a method without a rewrite of the library.
Goal one: accessible and reproducible
The first of the three goals the library started from is accessibility and reproducibility, and the accessibility half is stated with some force. If you read a fancy algorithm in a scientific article you should be able to use it instantly, without doing the work of coding it yourself, because the authors of the paper already did that, and the README asks why you should do it again. The concrete target is the endless reinvention of the wheel that the authors say is shockingly prevalent in nonlinear dynamics, where every time someone writes a new method or even full software, they end up reimplementing up to ninety percent of the functionality that may already exist somewhere else. Reproducibility is the second half, and it is defined tightly, as being able to do exactly the same analysis and get exactly the same results, within some numeric precision, as the article. The library tries to get there by being written in a modern language with strong environment and reproducibility support, by being well tested, and by providing thousands of algorithms so that only the genuinely new work has to be written.
Goal two: a library in the literal sense
The second goal is the one that explains the emphasis on documentation and on readable source. The library is not just a software library, it is also a library in the literal sense, a place where people go to learn something new, here in particular for nonlinear dynamics. The reason the documentation is of that quality is given directly, because detailed descriptions and explanations of algorithms with references to the scientific articles are exactly what a learning resource needs. The second reason is that the source code is written as clearly as possible so that it is examinable, which is the same argument as the accessibility highlight seen from the other side. Taken together with the first goal, the pattern is a package that treats the reader as a potential contributor, and the third goal completes the picture of a library that also wants to be a community project.
Community, testing and the pace of work
The third highlight is that the library is an open source community project, built from the ground up entirely on GitHub, one hundred percent open source and based on community contributions, and the statement that anyone can be a developer of the library. The testing highlight is specific in a way that is worth reading, since all implemented functionality is extensively tested and each time any change is done in the code base, the extensive test suite is run and checked before merging the change in. The extendability claim follows from the interfaces, and the performance claim is that the library is written entirely in Julia, heavily optimized and parallelized, taking advantage of some of the best packages within the language. The activity claim is the most concrete, that since its beginning in May 2017 the project has had some activity every single month, with new features, new packages and bug fixes. The package belongs to JuliaDynamics, an organisation dedicated to creating high quality scientific software, and the README carries a note about a ten year anniversary symposium in August 2027, which is a rare statement of intent from a research library.
The repository and the current state
The tree is the standard Julia package layout, with src/ for the implementation, test/ for the test suite, ext/ for the package extensions that Julia uses for optional dependencies, docs/ for the documentation sources, a paper/ directory for the JOSS submission, and a Project.toml that declares the package dependencies and the Julia compatibility range. There is a CITATION.bib file, which tells you that the project takes citation seriously, a CHANGELOG.md, an issue template and a contributing guide. The releases are v3.7.0 on 2026-08-05, v3.6.8 on 2026-06-05 and v3.6.7 on 2026-01-30, with the last push on 2026-10-12, so the version moves steadily and the project is under active development rather than in maintenance. The licence is recorded as a custom one that GitHub cannot classify, and the README points at a licence file, so anyone shipping this in a commercial product should read that file rather than assume the terms.
Editorial conclusion
DynamicalSystems.jl fits a researcher or graduate student who has just read a method in a paper and does not want to reimplement it, since the documented algorithms and the general interfaces make that a call rather than a project, and it fits a teacher who needs worked examples that can be examined. It does not fit a production service engineer looking for a stable API, because the package is under active development with monthly changes. Before you build on it, read the documentation rather than the highlights, because the scientific description of each algorithm and its references are the point, and check the version you pin, since 3.7.0 was published on 2026-08-05 while the last commit was on 2026-10-12.
Frequently asked questions
What is DynamicalSystems.jl?
It is an award-winning Julia-based general-purpose software library for nonlinear dynamics and nonlinear time series analysis, covering complexity measures, delay embeddings, periodic orbits, nonlocal stability, basins of attraction, continuation, chaos, fractal dimensions, surrogate testing and recurrence quantification analysis.
How do I install DynamicalSystems.jl?
By running import Pkg; Pkg.add("DynamicalSystems") as a Julia language command. The documentation is published online and can also be built locally by running the docs/make.jl file.
Why is the source code of DynamicalSystems.jl written to be small?
Because keeping implementations small, simple and easy to understand and modify is a stated key priority. The reasoning given is that it increases confidence, reduces bugs, and lets users become developers without unnecessary effort.
What does reproducibility mean for this library?
That given an analysis described in a scientific article you can do exactly the same analysis and get exactly the same results within some numeric precision, which the project tries to achieve through a modern language with strong environment and reproducibility support, thorough testing, and thousands of algorithms provided out of the box.
Is DynamicalSystems.jl still updated?
Yes. The last push was on 2026-10-12, with v3.7.0 released on 2026-08-05 after v3.6.8 in June 2026 and v3.6.7 in January 2026, and the project states it has had activity every month since it began in May 2017.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/juliadynamics-dynamicalsystems-jl)Was this useful?