{"id":43427677,"url":"https://github.com/epfl-lara/stainless","last_synced_at":"2026-02-02T19:10:35.380Z","repository":{"id":13940336,"uuid":"65912716","full_name":"epfl-lara/stainless","owner":"epfl-lara","description":"Verification framework and tool for higher-order Scala programs","archived":false,"fork":false,"pushed_at":"2026-01-19T11:06:14.000Z","size":173914,"stargazers_count":391,"open_issues_count":325,"forks_count":59,"subscribers_count":17,"default_branch":"main","last_synced_at":"2026-01-19T18:12:21.134Z","etag":null,"topics":["cvc4","cvc5","formal-methods","inox","model-checking","proof-assistant","scala","smt","verification","z3"],"latest_commit_sha":null,"homepage":"https://epfl-lara.github.io/stainless/","language":"Scala","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/epfl-lara.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"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,"notice":"NOTICE","maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":"CLA.txt"}},"created_at":"2016-08-17T14:08:38.000Z","updated_at":"2026-01-19T11:06:15.000Z","dependencies_parsed_at":"2023-02-12T03:17:12.867Z","dependency_job_id":"89d0d234-1ce0-4bda-86f6-f40c471b6501","html_url":"https://github.com/epfl-lara/stainless","commit_stats":null,"previous_names":[],"tags_count":55,"template":false,"template_full_name":null,"purl":"pkg:github/epfl-lara/stainless","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/epfl-lara%2Fstainless","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/epfl-lara%2Fstainless/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/epfl-lara%2Fstainless/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/epfl-lara%2Fstainless/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/epfl-lara","download_url":"https://codeload.github.com/epfl-lara/stainless/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/epfl-lara%2Fstainless/sbom","scorecard":{"id":378918,"data":{"date":"2025-08-11","repo":{"name":"github.com/epfl-lara/stainless","commit":"e925387f7824e703d87a305fdcf9d5cfc871547c"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.8,"checks":[{"name":"Code-Review","score":6,"reason":"Found 20/30 approved changesets -- score normalized to 6","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Maintained","score":2,"reason":"1 commit(s) and 2 issue activity found in the last 90 days -- score normalized to 2","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/stainless-CI.yml:1","Warn: no topLevel permission defined: .github/workflows/stainless-explicit-fastmachines.yml:1","Warn: no topLevel permission defined: .github/workflows/stainless-nightly.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Binary-Artifacts","score":6,"reason":"binaries present in source code","details":["Warn: binary detected: unmanaged/scalaz3-mac-64-2.13.jar:1","Warn: binary detected: unmanaged/scalaz3-mac-64-3.jar:1","Warn: binary detected: unmanaged/scalaz3-unix-64-2.13.jar:1","Warn: binary detected: unmanaged/scalaz3-unix-64-3.jar:1"],"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v0.9.9.0 not signed: https://api.github.com/repos/epfl-lara/stainless/releases/189726091","Warn: release artifact v0.9.8.9 not signed: https://api.github.com/repos/epfl-lara/stainless/releases/180768801","Warn: release artifact v0.9.8.8 not signed: https://api.github.com/repos/epfl-lara/stainless/releases/171459166","Warn: release artifact v0.9.8.7 not signed: https://api.github.com/repos/epfl-lara/stainless/releases/154412693","Warn: release artifact v0.9.8.2 not signed: https://api.github.com/repos/epfl-lara/stainless/releases/128898204","Warn: release artifact v0.9.9.0 does not have provenance: https://api.github.com/repos/epfl-lara/stainless/releases/189726091","Warn: release artifact v0.9.8.9 does not have provenance: https://api.github.com/repos/epfl-lara/stainless/releases/180768801","Warn: release artifact v0.9.8.8 does not have provenance: https://api.github.com/repos/epfl-lara/stainless/releases/171459166","Warn: release artifact v0.9.8.7 does not have provenance: https://api.github.com/repos/epfl-lara/stainless/releases/154412693","Warn: release artifact v0.9.8.2 does not have provenance: https://api.github.com/repos/epfl-lara/stainless/releases/128898204"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/stainless-CI.yml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/epfl-lara/stainless/stainless-CI.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/stainless-CI.yml:23: update your workflow using https://app.stepsecurity.io/secureworkflow/epfl-lara/stainless/stainless-CI.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/stainless-explicit-fastmachines.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/epfl-lara/stainless/stainless-explicit-fastmachines.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/stainless-explicit-fastmachines.yml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/epfl-lara/stainless/stainless-explicit-fastmachines.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/stainless-nightly.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/epfl-lara/stainless/stainless-nightly.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/stainless-nightly.yml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/epfl-lara/stainless/stainless-nightly.yml/main?enable=pin","Warn: containerImage not pinned by hash: Dockerfile:1: pin your Docker image by updating openjdk:8u222-jre-slim-buster to openjdk:8u222-jre-slim-buster@sha256:a08e53e7d79e5c95a9f47677e9c22c2ed66d52f69f6f28841ebd9ecc3c16a059","Info:   0 out of   6 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   1 containerImage dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 29 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-18T14:56:32.073Z","repository_id":13940336,"created_at":"2025-08-18T14:56:32.074Z","updated_at":"2025-08-18T14:56:32.074Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29017941,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-02T18:51:31.335Z","status":"ssl_error","status_checked_at":"2026-02-02T18:49:20.777Z","response_time":58,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["cvc4","cvc5","formal-methods","inox","model-checking","proof-assistant","scala","smt","verification","z3"],"created_at":"2026-02-02T19:10:34.536Z","updated_at":"2026-02-02T19:10:35.370Z","avatar_url":"https://github.com/epfl-lara.png","language":"Scala","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Stainless [![Release][release-img]][latest-release] [![Nightly Status](https://github.com/epfl-lara/stainless/actions/workflows/stainless-nightly.yml/badge.svg)](https://github.com/epfl-lara/stainless/actions/workflows/stainless-nightly.yml) [![Build Status](https://github.com/epfl-lara/stainless/actions/workflows/stainless-CI.yml/badge.svg?branch=main)](https://github.com/epfl-lara/stainless/actions/workflows/stainless-CI.yml/?branch=main) [![Gitter chat][gitter-img]][gitter-ref] [![Apache 2.0 License][license-img]][license-ref]\n\nHosted at https://github.com/epfl-lara/stainless ; mirrored at https://gitlab.epfl.ch/lara/stainless . Check out also [Inox](https://github.com/epfl-lara/inox) and [Bolts](https://github.com/epfl-lara/bolts/).\n\nVerification framework for a subset of the [Scala](http://scala-lang.org) programming language. See the [tutorial](https://epfl-lara.github.io/asplos2022tutorial/).\n\nPlease note that this repository uses `git submodules`, so you need to either:\n\n- clone it with the `--recursive` option, or\n- run `$ git submodule update --init --recursive` after cloning.\n\nPlease note that Stainless does not support Scala 2 frontend anymore, only Scala 3.5.0 and later. The latest release that  supports Scala 2.13 frontend is the [v0.9.8.7](https://github.com/epfl-lara/stainless/releases/tag/v0.9.8.7).\n\n## Quick start\n\nWe test mostly on [Ubuntu](https://ubuntu.com/download); on [Windows](https://www.microsoft.com/eb-gb/software-download/windows10), you can get sufficient text-based Ubuntu environment by installing [Windows Subsystem for Linux](https://learn.microsoft.com/en-us/windows/wsl/install) (e.g. `wsl --install`, then `wsl --install -d ubuntu`). Ensure you have a [Java](https://openjdk.org/projects/jdk/17/) version ready (it can be headless); on Ubuntu `sudo apt install openjdk-17-jdk-headless` suffices.\n\nOnce ready, [download the latest `stainless-dotty-standalone` release](https://github.com/epfl-lara/stainless/releases) for your platform. Unzip the archive, and run Stainless through the `stainless` script. Stainless expects a list of space-separated Scala files to verify but also has other [Command-line Options](https://epfl-lara.github.io/stainless/options.html).\n\nTo check if everything works, you may create a file named `HelloStainless.scala` next to the `stainless` script with the following content:\n```scala\nimport stainless.collection._\nobject HelloStainless {\n  def myTail(xs: List[BigInt]): BigInt = {\n    require(xs.nonEmpty)\n    xs match {\n      case Cons(h, _) =\u003e h\n      // Match provably exhaustive\n    }\n  }\n}\n```\nand run `stainless HelloStainless.scala`.\nIf all goes well, Stainless should report something along the lines:\n```log\n[  Info  ]   ┌───────────────────┐\n[  Info  ] ╔═╡ stainless summary ╞════════════════════════════════════════════════════════════════════╗\n[  Info  ] ║ └───────────────────┘                                                                    ║\n[  Info  ] ║ HelloStainless.scala:6:5:   myTail  body assertion: match exhaustiveness  nativez3   0,0 ║\n[  Info  ] ╟┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄╢\n[  Info  ] ║ total: 1    valid: 1    (0 from cache) invalid: 0    unknown: 0    time:     0,0         ║\n[  Info  ] ╚══════════════════════════════════════════════════════════════════════════════════════════╝\n[  Info  ] Shutting down executor service.\n```\nIf you see funny symbols instead of beautiful ASCII art, run Stainless with the `--no-colors` option for clean ASCII output with a standardized error message format.\n\nThe release archive of Stainless only requires JDK 17. In particular, it needs\nneither a Scala compiler nor SBT. It is shipped with Z3 4.12.2+, cvc5 1.0.8+ and\nPrincess (branch compiled for Scala 3). If the Z3 native API is not found, use\nthe option `--solvers=smt-z3` to rely on the executable instead of API call to\nz3.\n\n## Build and Installation Instructions\n\nPlease refer to the [installation documentation here](https://epfl-lara.github.io/stainless/installation.html).\n\n## Further Documentation and Learning Materials\n\nThe main documentation for Stainless is hosted at\nhttps://epfl-lara.github.io/stainless/.\n\nTo get started with using Stainless, see videos:\n  * [Stainless Introduction for 2nd year EPFL BSc students](https://mediaspace.epfl.ch/media/%5BCS214+W13+FP%5D+Formal+Verification+%282024-12-09%29/0_g7v3qvjp)\n  * [ASPLOS'22 tutorial](https://epfl-lara.github.io/asplos2022tutorial/)\n  * [FMCAD'21 tutorial](https://github.com/epfl-lara/fmcad2021tutorial/)\n  * [Formal Verification Course](https://mediaspace.epfl.ch/channel/CS-550+Formal+Verification/30542):\n    * [Getting Started](https://mediaspace.epfl.ch/media/01-02%2C+First+Steps+with+Stainless/0_tghlsgep/30542)\n    * Four part tutorial: [1](https://mediaspace.epfl.ch/playlist/dedicated/30542/0_hrhu33vg/0_h1bv5a7v), [2](https://mediaspace.epfl.ch/playlist/dedicated/30542/0_hrhu33vg/0_io2c8cnl), [3](https://mediaspace.epfl.ch/playlist/dedicated/30542/0_hrhu33vg/0_j7fgd1oc), [4](https://mediaspace.epfl.ch/playlist/dedicated/30542/0_hrhu33vg/0_4soh944h)\n    * [Assertions](https://mediaspace.epfl.ch/playlist/dedicated/30542/0_vw42tr2d/0_54yx91xi)\n    * [Unfolding](https://mediaspace.epfl.ch/playlist/dedicated/30542/0_vw42tr2d/0_4byxmv9i)\n    * [Dispenser Example](https://mediaspace.epfl.ch/playlist/dedicated/30542/0_hrhu33vg/0_omextd9i)\n  * [Keynote at Lambda Days'20](https://www.youtube.com/watch?v=dkO59PTcNxA)\n  * [Keynote at ScalaDays'17 Copenhagen](https://www.youtube.com/watch?v=d4VeFa0z_Lo)\n\n or see local [documentation](https://epfl-lara.github.io/stainless/) chapters, such as:\n  * [Introduction to Stainless](https://epfl-lara.github.io/stainless/intro.html)\n  * [Installation](https://epfl-lara.github.io/stainless/installation.html)\n  * [Getting Started](https://epfl-lara.github.io/stainless/gettingstarted.html)\n  * [Command-line Options](https://epfl-lara.github.io/stainless/options.html)\n  * [Mini Tutorial](https://epfl-lara.github.io/stainless/tutorial.html)\n\nThere is also a [Stainless EPFL Page](https://stainless.epfl.ch) which hosts a mirror of the GitHub repository.\n\n## License\n\nStainless is released under the Apache 2.0 license. See the [LICENSE](LICENSE) file for more information.\n\n## Relation to [Inox](https://github.com/epfl-lara/inox)\n\nStainless relies on Inox to solve the various queries stemming from program verification.\nInox supports model-complete queries in a feature-rich fragment that lets Stainless focus\non program transformations and soundness of both contract and termination checking and uses its own reasoning steps, as well as invocations to solvers (theorem provers) [z3](https://github.com/Z3Prover/z3), [cvc5](https://cvc5.github.io/), and [Princess](http://www.philipp.ruemmer.org/princess.shtml).\n\n[latest-release]: https://github.com/epfl-lara/stainless/releases/latest\n[license-img]: https://img.shields.io/badge/license-Apache_2.0-blue.svg?color=134EA2\n[license-ref]: https://github.com/epfl-lara/stainless/blob/main/LICENSE\n[gitter-img]: https://img.shields.io/gitter/room/gitterHQ/gitter.svg?color=ed1965\n[gitter-ref]: https://gitter.im/epfl-lara/stainless\n[release-img]: https://img.shields.io/github/release-pre/epfl-lara/stainless.svg\n[tag-date-img]: https://img.shields.io/github/release-date-pre/epfl-lara/stainless.svg?style=popout\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fepfl-lara%2Fstainless","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fepfl-lara%2Fstainless","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fepfl-lara%2Fstainless/lists"}