HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
Z3Prover
z3
C++2015–2026
Z3Prover / z3

z3

The Z3 Theorem Prover

42Distinct people
48Mentions
1Explicit recommenders
12.9KGitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

The Z3 Theorem Prover

GitHub

Where it is used

  • zkWasm — We use z3 (https://github.com/Z3Prover/z3) to check that all operations are compiled to zkp circuits correctly. Source

What people are saying

1) For the "how to get started with formal verification outside academia", I'll first get the case of "in/for production" out of the way: a) "use Z3[0] with some…

namibj used a recommendation phrase. One indexed comment matches. This is a phrase match, not a verdict.

No classified warning is attached to this page. Read the discussions before treating silence as approval.

Also in these discussions

Mentioned in the same Hacker News threads. That is not proof they are substitutes.

This week on Hacker News

Nov 8–Nov 15 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/15/2026, 9:01:12 PM UTC.

No direct repository links were found in the indexed HN discussions over the past seven days. Older discussions are available below.

Mentions over time

HN mentions by year48 dated mentions

Observed mentions: 2015-03-26 19:02:35 UTC to 2026-04-18 18:51:51 UTC.

02462015-01-01 00:00:00 UTC to 2016-01-01 00:00:00 UTC (exclusive): 4 mentions; 2 submissions, 2 comments20152016-01-01 00:00:00 UTC to 2017-01-01 00:00:00 UTC (exclusive): 3 mentions; 1 submissions, 2 comments2017-01-01 00:00:00 UTC to 2018-01-01 00:00:00 UTC (exclusive): 3 mentions; 1 submissions, 2 comments2018-01-01 00:00:00 UTC to 2019-01-01 00:00:00 UTC (exclusive): 5 mentions; 3 submissions, 2 comments2019-01-01 00:00:00 UTC to 2020-01-01 00:00:00 UTC (exclusive): 7 mentions; 1 submissions, 6 comments2020-01-01 00:00:00 UTC to 2021-01-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 comments20202021-01-01 00:00:00 UTC to 2022-01-01 00:00:00 UTC (exclusive): 5 mentions; 1 submissions, 4 comments2022-01-01 00:00:00 UTC to 2023-01-01 00:00:00 UTC (exclusive): 4 mentions; 0 submissions, 4 comments2023-01-01 00:00:00 UTC to 2024-01-01 00:00:00 UTC (exclusive): 4 mentions; 0 submissions, 4 comments2024-01-01 00:00:00 UTC to 2025-01-01 00:00:00 UTC (exclusive): 4 mentions; 2 submissions, 2 comments2025-01-01 00:00:00 UTC to 2026-01-01 00:00:00 UTC (exclusive): 5 mentions; 2 submissions, 3 comments2026-01-01 00:00:00 UTC to 2027-01-01 00:00:00 UTC (exclusive): 2 mentions; 1 submissions, 1 comments. Incomplete calendar period.2026*

* An incomplete calendar period is marked with an outlined bar. Its count is not directly comparable with a full period.

Counts come from the repository’s dated source evidence. Index cutoff: 2026-11-02 08:16:59 UTC.

View mention counts and date ranges
UTC ranges include their start and exclude their end. Select a period to filter the source evidence.
PeriodStart (UTC)End (exclusive, UTC)MentionsSubmissionsComments
20152015-01-01 00:00:00 UTC2016-01-01 00:00:00 UTC422
20162016-01-01 00:00:00 UTC2017-01-01 00:00:00 UTC312
20172017-01-01 00:00:00 UTC2018-01-01 00:00:00 UTC312
20182018-01-01 00:00:00 UTC2019-01-01 00:00:00 UTC532
20192019-01-01 00:00:00 UTC2020-01-01 00:00:00 UTC716
20202020-01-01 00:00:00 UTC2021-01-01 00:00:00 UTC202
20212021-01-01 00:00:00 UTC2022-01-01 00:00:00 UTC514
20222022-01-01 00:00:00 UTC2023-01-01 00:00:00 UTC404
20232023-01-01 00:00:00 UTC2024-01-01 00:00:00 UTC404
20242024-01-01 00:00:00 UTC2025-01-01 00:00:00 UTC422
20252025-01-01 00:00:00 UTC2026-01-01 00:00:00 UTC523
2026 (partial)2026-01-01 00:00:00 UTC2027-01-01 00:00:00 UTC211

From the project README

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

What Hacker News says

4 sources
Well, I mistyped it should have been MDIL not MIDL. MDIL is the Machine Dependent Intermediate Language, which was the format produced by the Sing# compiler in Singularity, given as input to Bartok, the native code compiler for Singularity. The work was reused for Windows Phone 8 to generate .NET applications compiled ahead of time in the Windows Store, using just a dynamic linker at installation time on the devices https://channel9.msdn.com/Shows/Going+Deep/Mani-Ramaswamy-an... WinRT is the second coming of Ext-VOS, the initial idea that triggered .NET by making an OS ABI based on an improved COM. Then .NET happened and the idea kind of died. With the going native wave gaining speed back at Microsoft, the project was reborn with some improvements like C++/CX and using .NET Metadata instead of the old COM type libraries. Since Vista, the
Read the rest
majority of new APIs are COM based and with WinRT, Windows is one of the few current OS with an OO ABI. One of the driver validation tools makes use of the Z3 theorem prover as its verification engine https://github.com/z3prover/z3/wiki http://research.microsoft.com/en-us/um/redmond/projects/z3/s... https://msdn.microsoft.com/en-us/library/windows/hardware/ff... .NET Native might be just yet another compiler, however it is the continuation of the work that started in Singularity with Sing# and Bartok, followed by MDIL in WP8. Also shows the direction of having .NET Native and C++ as the backbones of the OS, while moving away from C. I am ignoring the work in free UNIX, because from the outside they appear to keep on copying commercial UNIXes. Everyone is so high on Docker, yet I was using HP-UX containers in 2000 aka Virtualvault .
In Critique of Microkernel Architectures – Is Linus Right? (2004) [pdf]
Firewalls are sets of rules which culminate in a decision to accept or block a packet. The rules are easily expressed in predicate logic accepted by Z3. You can do all sorts of neat stuff then; check out https://github.com/Z3Prover/z3/wiki/Publications Some general examples: * Does firewall 1 accept a subset of the packets accepted by firewall 2? * Does firewall 1 accept the same set of packets as firewall 2? * Does this firewall accept some arbitrary set of packets? (useful for proving implementation of security rules) * Do any of the firewall rules overlap? * Do any of the firewall rules conflict? Z3 will also provide examples or counter-examples to the above true/false questions. I like to think of Z3 as an Oracle. You give it a bunch of statements describing what you're looking for, and it magically spits out an answer.
In Solving a Crackme using Z3: Theorem Prover

MAKE YOURSELF AT HOME

A few shortcuts

/
Search the collection
?
Open this guide
Esc
Close dialogs and navigation

Your saved repositories and interests stay in this browser.