README.md

June 5, 2026 ยท View on GitHub

DynamicalSystems.jl logo: The Double Pendulum

DocBuild DOI Textbook Package Downloads

DynamicalSystems.jl is an award-winning Julia-based general-purpose software library for the whole of nonlinear dynamics and nonlinear timeseries analysis.

To install DynamicalSystems.jl, run import Pkg; Pkg.add("DynamicalSystems") as a Julia language command. To learn how to use it and see its contents visit the documentation, which you can either find online or build locally by running the docs/make.jl file.

DynamicalSystems.jl is part of JuliaDynamics, an organization dedicated to creating high quality scientific software.

Highlights

Aspects of DynamicalSystems.jl that make it stand out among other codebases for nonlinear dynamics or nonlinear timeseries analysis are:

  • Exceptional documentation. All implemented algorithms provide a high-level scientific description of their functionality in their documentation string as well as references to scientific papers. The documentation features hundreds of tutorials and examples ranging from introductory to expert usage.
  • Accessible source code. Key priority for the library is to keep source code of implementations small, simple, easy to understand and modify. This increases confidence, reduces bugs, and allows users to become developers without unnecessary effort.
  • Open source community project. Built from the ground up entirely on GitHub, DynamicalSystems.jl is 100% open source and based on community contributions. Anyone can be a developer of the library. Everyone is welcomed.
  • Extensive content. It aims to cover the entire field of nonlinear dynamics and nonlinear timeseries analysis. It has functionality for complexity measures, delay embeddings, periodic orbits, nonlocal stability analysis, basins of attraction, continuation, chaos, fractal dimensions, surrogate testing, recurrence quantification analysis, and much more. Furthermore, all algorithms are "general" and work for any dynamical system applicable. Missing functionality that falls under this wide category of content is welcomed to be part of the library!
  • Well tested. All implemented functionality is extensively tested. Each time any change in the code base is done, the extensive test suite is run and checked before merging the change in.
  • Extendable. All parts of the library follow professional standards in software design and implement extendable interfaces so that it is easy to contribute new functionality.
  • Active development. It is a living, evolving project. Since its beginning in May 2017, DynamicalSystems.jl has had some activity every single month: new features, new packages, bugfixes. The developer team routinely answers users questions on official Julia language forums or on GitHub.
  • Performant. Written entirely in Julia, heavily optimized and parallelized, and taking advantage of some of the best packages within the language, DynamicalSystems.jl is really fast.

Goals

The DynamicalSystems.jl library started as an ambitious vision with three main goals; These same goals are the core pillars guiding development, and are largely the source of where the aforementioned unique highlights stem from.

Goal 1: Accessible and reproducible nonlinear dynamics

Accessible means that if you read on some sorts of fancy algorithm online in a scientific article, you should be able to use it instantly. You shouldn't have to put in the work to code it yourself. The authors of the paper already did that. So why should you do it again?! To resolve this problem we developed, and continue to develop, a library that has an incredibly low threshold of entry: contributing to DynamicalSystems.jl and making your code available to all is truly easier than coding your own algorithms from scratch, due to the well thought out and generic interfaces it provides for dynamical systems. With this aproach we also hope to stop the endless reinviention of the wheel that is shockingly prevalent in nonlinear dynamics: where every time someone writes a new method/algorithm or even full software, they end up re-imlementing up to 90% of the functionality that may already exist somewhere else. With DynamicalSystems.jl and its extendable interfaces, new algorithms can be implemented with minimal code, and their software imlementation can be published along with the paper! We have done this already dozens of times and you can do too!

Reproducible means that given some sorts of dynamical systems analysis in a scientific article, you should be able to do exactly the same analysis and get exactly the same results (within some numeric precision) as the article. After all, computers are deterministic constructs. DynamicalSystems.jl allows this by (1) being written in a modern programming language with incredible environment and reproducibility support, (2) being well tested, and (3) by providing thousands of algorithms out of the box, allowing most dynamical systems analysis to be done instantly while implementing only as little new stuff as necessary.

Goal 2: Library in the literal sense

DynamicalSystems.jl is not just a software library. It is also a library in the literal sense: where people go to learn something new (here in particular for nonlinear dynamics). That is why the documentation is of exceptionally high quality: detailed descriptions and explanations of algorithms, with references to the scientific articles articles. It is also partly a reason for the source code to be written as clearly as possible, so that it is examinable by any user.

Goal 3: A general purpose software

The third goal is to fill the missing gap of a high quality general purpose software for nonlinear dynamics which can be easily extended with new functionality. This can be particularly impactful in teaching. You see, it is unfortunately rarely the case that real, runnable code is shown in the classroom, because it is often long and messy. This is especially hurtful for nonlinear dynamics, a field where computer-assisted exploration is critical.

DynamicalSystems.jl provides teachers with a framework capable of demonstrating actual, real-world nonlinear dynamics code and its output, without having to invest the weeks to code the internal infrastructure themselves. Its high level syntax requires writing little code to get lots of meaningful analysis done, while its extensive functionality covers most typical classroom applications.