{"id":13632490,"url":"https://github.com/creusot-rs/creusot","last_synced_at":"2025-04-29T18:58:39.982Z","repository":{"id":36996209,"uuid":"332798321","full_name":"creusot-rs/creusot","owner":"creusot-rs","description":"Creusot helps you prove your code is correct in an automated fashion.","archived":false,"fork":false,"pushed_at":"2025-04-29T07:47:08.000Z","size":69652,"stargazers_count":1251,"open_issues_count":107,"forks_count":57,"subscribers_count":18,"default_branch":"master","last_synced_at":"2025-04-29T08:39:29.320Z","etag":null,"topics":["deductive-reasoning","formal-methods","formal-verification","proof","rust","rust-lang","verification","why3"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-2.1","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/creusot-rs.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2021-01-25T15:49:30.000Z","updated_at":"2025-04-29T07:47:10.000Z","dependencies_parsed_at":"2023-10-24T16:36:35.196Z","dependency_job_id":"bfff23a8-a9af-4ca8-b732-bdb3acf48251","html_url":"https://github.com/creusot-rs/creusot","commit_stats":{"total_commits":1125,"total_committers":26,"mean_commits":43.26923076923077,"dds":0.2897777777777778,"last_synced_commit":"ec47dd7e3f5a7541462793b911de0d188c34a175"},"previous_names":["creusot-rs/creusot","xldenis/creusot"],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/creusot-rs%2Fcreusot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/creusot-rs%2Fcreusot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/creusot-rs%2Fcreusot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/creusot-rs%2Fcreusot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/creusot-rs","download_url":"https://codeload.github.com/creusot-rs/creusot/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251469660,"owners_count":21594520,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["deductive-reasoning","formal-methods","formal-verification","proof","rust","rust-lang","verification","why3"],"created_at":"2024-08-01T22:03:04.677Z","updated_at":"2025-04-29T18:58:39.974Z","avatar_url":"https://github.com/creusot-rs.png","language":"Rust","funding_links":[],"categories":["Rust","Development tools","Verifiers","Projects"],"sub_categories":["Static analysis","Verification"],"readme":"![](/static/marteau.jpg)\n\n*Le marteau-pilon, forges et aciéries de Saint-Chamond, Joseph-Fortuné LAYRAUD, 1889*\n\n# About\n\n**Creusot** is a *deductive verifier* for Rust code. It verifies your code is safe from panics, overflows, and assertion failures. By adding annotations you can take it further and verify your code does the *correct* thing.\n\nCreusot works by translating Rust code to [Coma](https://coma.paulpatault.fr/), an intermediate verification language of the [Why3 Platform](https://www.why3.org). Users can then leverage the full power of Why3 to (semi)-automatically discharge the verification conditions!\n\nSee [ARCHITECTURE.md](ARCHITECTURE.md) for technical details.\n\n## Help and Discussions\n\nIf you need help using Creusot or would like to discuss, you can post on the [discussions forum](https://github.com/creusot-rs/creusot/discussions) or join our [Zulip chat](https://why3.zulipchat.com/#narrow/stream/341707-creusot)!\n\n## Documentation\n\n- To learn how to write code with Creusot: [guide](https://creusot-rs.github.io/creusot/guide)\n- To see the API of `creusot_contracts` (Creusot's \"standard library\"): [`creusot_contracts` API](https://creusot-rs.github.io/creusot/doc/creusot_contracts)\n\n## Citing Creusot\n\nIf you would like to cite Creusot in academic contexts, we encourage you to use our [ICFEM'22 publication](https://hal.inria.fr/hal-03737878/file/main.pdf).\n\n# Examples of Verification\n\nTo get an idea of what verifying a program with Creusot looks like, we encourage you to take a look at some of our test suite:\n\n- [Zeroing out a vector](tests/should_succeed/vector/01.rs)\n- [Binary search on Vectors](tests/should_succeed/vector/04_binary_search.rs)\n- [Sorting a vector](tests/should_succeed/vector/02_gnome.rs)\n- [IterMut](tests/should_succeed/iterators/02_iter_mut.rs)\n- [Normalizing If-Then-Else Expressions](tests/should_succeed/ite_normalize.rs)\n\nMore examples are found in [tests/should_succeed](tests/should_succeed).\n\n## Projects built with Creusot\n\n- [CreuSAT](https://github.com/sarsko/creusat) is a verified SAT solver written in Rust and verified with Creusot. It really pushes the tool to its limits and gives an idea of what 'use in anger' looks like.\n- Another big project is in the works :)\n\n# Installing Creusot as a user\n\n1. [Install `rustup`](https://www.rust-lang.org/tools/install), to get the suitable Rust toolchain\n2. [Get `opam`](https://opam.ocaml.org/doc/Install.html), the package manager for OCaml\n3. Clone the [creusot](https://github.com/creusot-rs/creusot/) repository,\n   then move into the `creusot` directory.\n    ```\n    $ git clone https://github.com/creusot-rs/creusot\n    $ cd creusot\n    ```\n4. Install **Creusot**:\n   ```\n   $ ./INSTALL\n   ```\n   A regular installation consists of:\n   - the `cargo-creusot` executable in `~/.cargo/bin/`;\n   - the `creusot-rustc` executable in `{DATA_DIR}/toolchains/$TOOLCHAIN/bin`;\n   - the `why3` and `why3find` executables in `{SWITCH}/bin`;\n   - the Creusot prelude in `{SWITCH}/lib/why3find/packages/creusot`;\n   - SMT solvers (Alt-Ergo, CVC4, CVC5, Z3) in `{DATA_DIR}/bin`;\n   - configuration files in `{CONFIG_DIR}`.\n\nwhere the directories depend on the OS:\n\n| | Linux | MacOS |\n|-|-|-|\n| `{DATA_DIR}` | `~/.local/share/creusot` | `~/Library/Application Support/creusot.creusot` |\n| `{CONFIG_DIR}` | `~/.config/creusot` | `~/Library/Application Support/creusot.creusot` |\n| `{SWITCH}` | `~/.local/share/creusot/_opam` | `~/.creusot/_opam` |\n\nInstallation options can be set in a text file `INSTALL.opts`.\nThey are just space-separated command-line arguments.\nType `./INSTALL --help` for a list of available options.\nFor example:\n\n```\necho \"--external z3\" \u003e INSTALL.opts\n./INSTALL\n```\n\n## Upgrading Creusot\n\n1. Enter the cloned Creusot git repository used previously to install Creusot\n2. Update Creusot's sources:\n   ```\n   $ git pull\n   ```\n3. Update opam's package listing:\n   ```\n   opam update\n   ```\n4. Reinstall Creusot:\n   ```\n   $ ./INSTALL\n   ```\n\n# Hacking on Creusot\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for information on the developer workflow for\nhacking on the Creusot codebase.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcreusot-rs%2Fcreusot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcreusot-rs%2Fcreusot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcreusot-rs%2Fcreusot/lists"}