Z3
github.com
What it is
Z3 is a theorem prover and satisfiability modulo theories (SMT) solver used in software verification and analysis. SMT-LIB2 is its default input format, and it supports the SMT-LIB format. The project documents bindings or APIs for C, C++, .NET, Java, Go, OCaml, Python, Julia, and JavaScript/TypeScript. Z3 can be built with CMake, vcpkg, or Bazel, and the repository links to pre-built binaries for stable and nightly releases. A project wiki also links to a page for trying Z3 in a browser. It supports proof artifacts and counterexamples, and listed input languages include SMT-LIB2, Rust, Smalltalk, and several of the languages with documented APIs. Z3 is MIT licensed, with downloads and source code available at no charge. Python is required to build it; additional toolchains are needed for Java, .NET, OCaml, and Julia APIs. The README says MSVC builds enable Control Flow Guard and Address Space Layout Randomization by default.
Spec sheet
- Purpose
- Z3 is a theorem prover and satisfiability modulo theories (SMT) solver.Read 2 Oct 2026 · github.com
- Platforms
- The project wiki lists Windows, OSX, Linux (Ubuntu and Debian), and FreeBSD as supported platforms.Read 2 Oct 2026 · github.com
- Security
- The README says MSVC builds enable Control Flow Guard and Address Space Layout Randomization by default.Read 2 Oct 2026 · github.com
- Support
- The project wiki says to contact the creator of an external binding package for support issues.Read 2 Oct 2026 · github.com
- License
- The repository states that Z3 is licensed under the MIT license.Read 2 Oct 2026 · github.com
- Applications
- Z3 is used in software verification and analysis applications.Read 2 Oct 2026 · microsoft.com
- Browser use
- The project wiki links to a page for trying Z3 in a browser.Read 2 Oct 2026 · github.com
- Build systems
- Z3 can be built using CMake, vcpkg, or Bazel.Read 2 Oct 2026 · github.com
- Dependencies
- Python is required to build Z3, and additional toolchains are needed to build Java, .NET, OCaml, and Julia APIs.Read 2 Oct 2026 · github.com
- Downloads
- The repository links to pre-built binaries for stable and nightly releases.Read 2 Oct 2026 · github.com
- Input
- SMTLIB2 is Z3’s default input format.Read 2 Oct 2026 · github.com
- Language interfaces
- The repository documents bindings or APIs for C, C++, .NET, Java, Go, OCaml, Python, Julia, and JavaScript/TypeScript.Read 2 Oct 2026 · github.com
- SMT-LIB
- Z3 supports the SMTLIB format.Read 2 Oct 2026 · github.com
Plans and prices
Strong points and limits
Strong points
- MIT-licensed downloads and source code are free.
- Used in software verification and analysis.
- Supports proof artifacts and counterexamples.
- Offers bindings or APIs for multiple languages.
- Stable and nightly binaries are linked.
Limits
- Python is required to build Z3.
- Some APIs require additional toolchains.
- Support for external binding packages goes to their creators.
Who it suits
Z3 suits developers and researchers working on theorem proving, software verification, or analysis. Its documented language APIs and build options support projects with different development environments.
Z3 in depth
Read the full write-up
Z3 is a theorem prover and SMT solver for developers working on formal reasoning and software verification. It is a strong fit when SMT-LIB2 or integration into a programming-language stack is central; its main trade-off is the build and toolchain work some integrations require.
Overview
Z3 applies satisfiability modulo theories to problems in software verification and analysis. It is designed for technical workflows, not as a general-purpose application: its value is in expressing a problem for a solver and examining the result. The MIT license and self-hosted deployment suit teams that want to build or run it within their own environment.
Key features
SMT-LIB2 is Z3’s default input, and the solver also supports SMT-LIB. That gives verification workflows a defined format for expressing problems. Z3 supports theorem-proving, produces counterexamples, and provides proof artifacts, which can help users investigate behavior and retain proof-related outputs.
Documented bindings or APIs cover C, C++,.NET, Java, Go, OCaml, Python, Julia, and JavaScript/TypeScript. The broader input-language set also includes Rust and Smalltalk; that wider list should not be read as a claim of documented API support for every language. The range makes Z3 relevant to varied software stacks, but building it requires Python, and building the Java,.NET, OCaml, or Julia APIs requires additional toolchains.
Build routes include CMake, vcpkg, and Bazel, while the repository links to pre-built stable and nightly binaries. A wiki page offers a browser-based way to try Z3. For MSVC builds, Control Flow Guard and Address Space Layout Randomization are enabled by default, a useful security measure for teams using that build route. Support for external binding packages is directed to each package’s creator, so integrations can have a separate support path from the core project.
Pricing
Z3 is free, with a free plan and no free trial. The “Z3 (MIT licensed)” plan costs nothing and includes MIT-licensed downloads and source code. There are no paid tiers or seat and usage quotas in this plan’s stated terms; it is a straightforward choice for individual developers and teams that can operate the software themselves. The license does not remove the practical cost of configuring build dependencies or API-specific toolchains.
Platforms
Z3 is listed for Android, API, Linux, macOS, self-hosted environments, the web, and Windows. Self-hosted deployment is particularly relevant to teams that need to keep solver workflows in their own environment. Build choices and pre-built binaries provide different routes to use it, while the browser page offers a way to try it without making that the only mode of use.
Who it's for
Z3 suits software verification and analysis practitioners who need SMT solving, theorem-proving support, counterexamples, or proof artifacts, especially when their work already uses SMT-LIB2. It also fits developers who want to connect a solver to one of its documented language interfaces or choose among established build systems. It is a poorer fit for users seeking a turnkey general-purpose app, or teams that need a single support channel for every external binding.
Pros and cons
Pros: SMT-LIB2 input and SMT-LIB support give verification work a defined problem format.
Pros: Theorem-proving support, counterexamples, and proof artifacts address several needs in formal reasoning workflows.
Pros: Multiple documented APIs, three build systems, and pre-built binaries offer several integration routes.
Pros: MIT-licensed source and downloads are free, and self-hosted deployment supports running Z3 within a team’s own environment.
Cons: Python is required to build Z3, and selected APIs bring additional toolchain requirements.
Cons: Support questions for external binding packages go to their creators, which may complicate troubleshooting across integrations.
Alternatives
For a different formal-methods workflow, these free tools offer distinct choices:
Lean is another free option, with Linux, macOS, web, and Windows platforms.
PVS may suit noncommercial users seeking its free noncommercial plan; commercial use has custom pricing, and the Allegro runtime requires accepting a click-through license.
Rocq is a free alternative for users looking for an interactive theorem prover and dependently typed programming language.
HOL4 is a free alternative distributed under the Modified (3-clause) BSD licence.
Alloy Analyzer offers a free, self-contained executable for users who prefer that form of distribution.
NuSMV is a free, open-source alternative under LGPL v2.1.
UPPAAL may fit eligible academic researchers or students seeking its free academic license.
CBMC is a free, open-source alternative under the 4-clause BSD license.
See more options in Formal Verification Tools.
Verdict
Choose Z3 if you need a free, MIT-licensed SMT solver for verification work and value SMT-LIB2, proof-related outputs, and a choice of language interfaces and build routes. Look elsewhere if your project cannot absorb the required build dependencies, or if support for an external binding needs to come from the core project.
Verdict
Z3 offers SMT solving and theorem proving with multiple language interfaces and build routes. Check its build dependencies and the support path for external bindings before integrating it into a project.
Where Specifiction places it
- Formal Verification Tools#26 of 347.4