Stainless
stainless.epfl.ch
Spec sheet
- Purpose
- Stainless is a verification framework and tool for a subset of the Scala programming language.Read 8 Oct 2026 · github.com
- Intended users
- The documentation describes using Stainless within an existing sbt project to check Scala code in enabled modules.Read 8 Oct 2026 · epfl-lara.github.io
- License
- The repository states that Stainless is released under the Apache 2.0 license.Read 8 Oct 2026 · github.com
- Browser workflow
- The documentation describes running Stainless in GitHub Codespaces, including through a browser.Read 8 Oct 2026 · epfl-lara.github.io
- Contracts
- It checks user-provided function preconditions and postconditions.Read 8 Oct 2026 · epfl-lara.github.io
- Correctness checks
- It can statically verify that a program conforms to a specification and cannot crash at runtime.Read 7 Oct 2026 · epfl-lara.github.io
- Counterexamples
- When a function does not satisfy its contract, Stainless can return a concrete counterexample.Read 8 Oct 2026 · epfl-lara.github.io
- Editor integration
- The project page links installation instructions for standalone use, Docker, sbt, and Metals.Read 7 Oct 2026 · ecocloud.epfl.ch
- Installation
- Stainless can be installed from a standalone release, through Snap or the Arch User Repository, built from source, or used as an sbt plugin.Read 8 Oct 2026 · epfl-lara.github.io
- Installation options
- The installation documentation lists standalone releases, Snap, source builds, and an sbt plugin.Read 7 Oct 2026 · epfl-lara.github.io
- Language limits
- The language does not provide a default encoding for concurrency with a shared mutable heap.Read 7 Oct 2026 · epfl-lara.github.io
- Limitations
- The documentation warns that verification assumes unbounded data types and sufficient stack space, so verified code may still encounter stack or heap overflow at runtime.Read 8 Oct 2026 · epfl-lara.github.io
- Runtime requirement
- The installation documentation lists Java 17 JRE as a general requirement.Read 8 Oct 2026 · epfl-lara.github.io
- Safety checks
- It checks array bounds and whether pattern matches cover all possible cases.Read 8 Oct 2026 · epfl-lara.github.io
- Scala subset
- Stainless verifies a Pure Scala fragment and also supports certain imperative features by translating them into Pure Scala concepts.Read 7 Oct 2026 · epfl-lara.github.io
- Scala support
- The current repository README says Stainless supports Scala 3.5.0 and later, and no longer supports the Scala 2 frontend.Read 8 Oct 2026 · github.com
- Solver support
- Stainless relies on Inox and supports SMT solvers including Z3, cvc5, and Princess.Read 7 Oct 2026 · github.com
- Solvers
- Stainless uses the Inox backend and can use SMT solvers including Z3 and cvc5; Princess is included as a Scala-based fallback solver.Read 8 Oct 2026 · epfl-lara.github.io
- Supported Scala version
- The repository says the current frontend supports Scala 3.5.0 and later and no longer supports Scala 2.Read 7 Oct 2026 · github.com
- Termination
- Stainless attempts to prove termination and lets users specify a decreasing measure when automatic checking does not suffice.Read 8 Oct 2026 · epfl-lara.github.io
- Use cases
- The project page reports use in proving compression and decompression algorithms, aspects of file systems, distributed algorithms, type systems, balanced trees, and student assignments.Read 7 Oct 2026 · ecocloud.epfl.ch
- Who it is for
- The documentation describes Stainless as a tool to help developers build verified Scala software.Read 7 Oct 2026 · epfl-lara.github.io
Where Specifiction places it
- Formal Verification Tools#29 of 357.1