ConcurrentSim (formerly SimJulia)

Documentation Documentation of latest stable version Documentation of dev version
Continuous integration GitHub Workflow Status
Code coverage Test coverage from codecov
Static analysis with JET static analysis Aqua QA

A discrete event process oriented simulation framework written in Julia inspired by the Python library SimPy. One of the longest-lived Julia packages (originally under the name SimJulia).


ConcurrentSim.jl is a registered package, and is installed by running

julia> Pkg.add("ConcurrentSim")




  • Ben Lauwens, Royal Military Academy, Brussels, Belgium.
  • Maintainer volunteers from the JuliaDynamics and QuantumSavory organizations.


  • To discuss problems or feature requests, file an issue. For bugs, please include as much information as possible, including operating system, julia version, and version of the dependencies: DataStructures and ResumableFunctions.
  • To contribute, make a pull request. Contributions should include tests for any new features/bug fixes.

Release Notes

A detailed change log is kept.


ConcurrentSim.jl and DiscreteEvents.jl both provide for typical event-based simulations. ConcurrentSim.jl is built around coroutines (implemented in ResumableFunctions.jl), while DiscreteEvents.jl uses Julia's async primitives via Channels. DiscreteEvents.jl has an explicit clock that "ticks" at a fixed finite resolution, while ConcurrentSim.jl uses coroutines to make arbitrary jumps in time. If you are evaluating which library to you for your goals, ConcurrentSim.jl might be a good choice if you are used to python's SimPy, but otherwise you are advised to try a small demo project in each and do your own benchmarks. Do not hesitate to submit issues on Github with questions or suggestions or feature requests. We value hearing what your experience with this library (compared to other libraries) has been.