Soteria is a library for writing efficient symbolic interpreters directly in OCaml. The core library is just a small toolbox that we use for writing a set of analyses, currently for C and Rust.
To build the current repository, you first need to install OCaml. We then advise to create a local switch for development, and build the project:
opam switch create . --deps-only -y
dune build @allIf you want to run the build version of the code, you must also install Z3.
You can make sure that everything is working properly by running the test suite:
dune testSoteria-C is an automatic in-IDE bug finder for C programs. It is in heavy development.
It can currently be tested on standalone files by opening this project in VSCode.
To do so, open the Run and Debug tab of the sidebar, select the "Launch (Local)" configuration and click the "play" button.
Soteria-Rust is a Kani-like symbolic execution engine for Rust. It is in heavy development.
It can run standalone files, symbolically executing the main function, or any function with the attribute #[kani::proof], if in Kani mode (--kani).
soteria-rust rustc <file>It can also run all tests in a crate:
soteria-rust cargo <crate dir>You may add --help to either of these commands to see all available options.
To use Soteria Rust you must have a frontend installed; we support Obol (recommended) and Charon.
Obol is the default, to use it you must have it installed and and have the obol command on your path. To do so:
- clone Obol (the right version is indicated here)
- run
make build - add
obol/binto your path (e.g.export PATH=$PATH:/path/to/obol/bin)
To use Charon, you must specify --frontend charon and have the charon command on your path. To do so:
- clone Charon (the right version is indicated here)
- run
make build-charon-rust - add
charon/binto your path (e.g.export PATH=$PATH:/path/to/charon/bin)
To test Soteria Rust on the Kani test suite, clone Kani next to soteria, and run soteria-rust/scripts/test.py kani.
You can also test Soteria Rust on the Miri test suite: clone Miri next to soteria and run soteria-rust/scripts/test.py miri.
Soteria Rust supports a large subset of Rust, but is still in development. Some currently unsupported features include:
- Concurrency
- Inline assembly
- SIMD intrinsics
Currently, and unlike Soteria-C, Soteria-Rust has neither IDE integration or compositionality support (all tests must instead start from an entry point). We are actively working on the latter!
We are very happy to welcome contributions from the community! Soteria is open source and will remain open source, feel free to use it for your own projects as well and let us know if we can help!
If you want to submit a pull request, take a quick look at the contribution guidelines, and make sure you have read the Contributor License Agreement which requires your contributions to be compatible with our open source license.
Soteria and derived tools in this repository are under Apache-2.0 license, copyright Soteria Team 2025.
The Soteria logo is a trademark of the Soteria Tools Ltd.