Skip to content
SPECIFICTION
Get listed

Stainless

stainless.epfl.ch

WindowsmacOSLinux

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

Alternatives to StainlessAll alternatives →