An excerpt from the repository, fetched Nov 13, 2026.
Read the project’s introduction
Z3
Z3 is a theorem prover from Microsoft Research.
It is licensed under the MIT license. Windows binary distributions include C++ runtime redistributables
If you are not familiar with Z3, you can start here.
Pre-built binaries for stable and nightly releases are available here.
Z3 can be built using CMake, vcpkg, or Bazel.
It provides bindings for several programming languages.
See the release notes for notes on various stable releases of Z3.
Build status
Pull Request & Push Workflows
WASM Build
Windows Build
CI
Finite-Field Regressions
Determinism Linter
Solver Determinism
Pulse Native Checker Build
Scheduled Workflows
Android Build
Nightly Build
Cross Build
F* Master Build
MSVC Static
MSVC Clang-CL
Build Z3 Cache
Memory Safety
Mark PRs Ready
Clang-Tidy Warning Report
Manual & Release Workflows
Documentation
Release Build
WASM Release
Pyodide Wheel (PyPI)
Specialized Workflows
Nightly Validation
Copilot Setup
Agentics Maintenance
Dispatch NFV Formal Audit
Follow-up / Comment Workflows
Determinism Linter PR Comment
Solver Determinism PR Comment
Pulse Checker Regressions
Agentic Workflows
API Coherence
Code Simplifier
Release Notes
Workflow Suggestion
Academic Citation
Issue Backlog
Memory Safety Report
SMTLIB Benchmark Finder
F* NFV PR Audit
A3 Python Analysis
Code Conventions
Compare Stats Anomaly Reporter
CSA Analysis
Tactic-to-Simplifier
Building Z3 using CMake
CMake is the preferred and most fully featured build system for Z3. A basic
release build is:
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build --parallel $(nproc)
See README-CMake.md for build options, language bindings,
installation, and instructions for consuming Z3 from another CMake project.
Z3 uses C++20. On Windows, the recommended version of Visual Studio is
therefore VS2019 or later; CMake with the Ninja or Visual Studio generator
builds Z3 from the Visual Studio Command Prompt.
Security Features (MSVC): When building with Visual Studio/MSVC, a couple of security features are enabled by default for Z3:
Control Flow Guard (/guard:cf) - enabled by default to detect attempts to compromise your code by preventing calls to locations other than function entry points, making it more difficult for attackers to execute arbitrary code through control flow redirection
Address Space Layout Randomization (/DYNAMICBASE) - enabled by default for memory layout randomization, required by the /GUARD:CF linker option
These can be disabled using cmake -S . -B build -DZ3_ENABLE_CFG=OFF if needed
Use sudo cmake --install build to install to the system prefix (or set
-DCMAKE_INSTALL_PREFIX= at configure time for a custom prefix). To uninstall,
consult your platform's package manager, or, since CMake tracks installed
files in build/install_manifest.txt, remove those files directly.
Building Z3 using vcpkg
vcpkg is a full platform package manager. To install Z3 with vcpkg, execute:
git clone https://github.com/microsoft/vcpkg.git
./bootstrap-vcpkg.bat # For powershell
./bootstrap-vcpkg.sh # For bash
./vcpkg install z3
Building Z3 using Bazel
Z3 can be built using Bazel. This is known to work on
Ubuntu with Clang (but may work elsewhere with other compilers):
bazel build //...
Dependencies
Z3 itself has only few dependencies. It uses C++ runtime libraries, including pthreads for multi-threading.
It is optionally possible to use GMP for multi-precision integers, but Z3 contains its own self-contained
multi-precision functionality. Python is required to build Z3. Building Java, .NET, OCaml and
Julia APIs requires installing relevant toolchains.
Z3 bindings
Z3 has bindings for various programming languages.
.NET
You can install a NuGet package for the latest release Z3 from nuget.org.
With CMake, use the -DZ3_BUILD_DOTNET_BINDINGS=ON option.
See examples/dotnet for examples.
C
These are always enabled.
See examples/c for examples.
C++
These are always enabled.
See examples/c++ for examples.
Java
With CMake, use the -DZ3_BUILD_JAVA_BINDINGS=ON option.
For IDE setup instructions (Eclipse, IntelliJ IDEA, Visual Studio Code) and troubleshooting, see the Java IDE Setup Guide.
See examples/java for examples.
Go
With CMake, use the -DZ3_BUILD_GO_BINDINGS=ON option. Note that Go bindings use CGO and require a Go toolchain (Go 1.20 or later) to build.
See examples/go for examples and src/api/go/README.md for complete API documentation.
OCaml
With CMake, use the -DZ3_BUILD_OCAML_BINDINGS=ON option.
See examples/ml for examples.
Python
You can install the Python wrapper for Z3 for the latest release from pypi using the command:
pip install z3-solver
With CMake, use the -DZ3_BUILD_PYTHON_BINDINGS=ON option.
Note that it is required on certain platforms that the Python package directory
(site-packages on most distributions and dist-packages on Debian-based
distributions) live under the install prefix. If you use a non-standard prefix
you can use the -DCMAKE_INSTALL_PYTHON_PKG_DIR= option to change the Python
package directory used for installation. For example:
cmake -S . -B build -DCMAKE_INSTALL_PREFIX=/home/leo -DZ3_BUILD_PYTHON_BINDINGS=ON -DCMAKE_INSTALL_PYTHON_PKG_DIR=/home/leo/lib/python3.x/site-packages
If you do need to install to a non-standard prefix, a better approach is to use
a Python virtual environment
and install Z3 there.
Under Windows, recall to build inside the Visual C++ native command build environment.
Note that the build/python/z3 directory should be accessible from where Python is used with Z3
and it requires libz3.dll to be in the path.
virtualenv venv
source venv/bin/activate
cmake -S . -B build -DCMAKE_INSTALL_PREFIX=$VIRTUAL_ENV -DZ3_BUILD_PYTHON_BINDINGS=ON
cmake --build build --parallel $(nproc)
cmake --install build
# You will find Z3 and the Python bindings installed in the virtual environment
venv/bin/z3 -h
...
python -c 'import z3; print(z3.get_version_s
Read the full README on GitHub