An ultra-high performance and flexible EVM. Written in zig
See the codeThe ultrafast EVM for every language and platform
🔄 Repository in Flux: This repo is currently undergoing significant refactoring as we prepare to release a new Zig library that will be like ethers.js or alloy for Zig. More updates coming soon!
Current Status: DO NOT USE IN PRODUCTION
Guillotine is not suitable for production use at this time. Any use of Guillotine should be considered purely experimental.
Latest Test Run: 2251 tests executed
Most failures are in ecmul/BN254 elliptic curve tests. Run specs with: zig build specs
See specs/README.md for detailed instructions on running the test suite.
Current Development Focus: Our primary goal is achieving 100% Ethereum specification compliance while ensuring complete safety, debuggability, and observability through our tracer system (src/tracer/tracer.zig). The tracer provides comprehensive execution monitoring, differential testing against a reference implementation, and detailed error reporting for every opcode.
For an in-depth understanding of Guillotine's design and implementation, see our comprehensive Architecture Documentation. Follow the issue tracker for features planned for Beta.
Network Support: Currently only Ethereum Mainnet is supported. Planned for Beta:
🚧 = Coming soon. Consider opening a discussion if you have any API recommendations or requested features.
comptime configuration means you only pay for features you actually useCurrently Supported: macOS Planned: Linux support
# 1. Clone with submodules
git clone --recursive https://github.com/evmts/Guillotine.git
cd Guillotine
# Or if already cloned:
git submodule update --init --recursive
# 2. Build the project
zig build
# 3. Verify the build
zig build test-opcodes
All SDKs in this repo are vibecoded proof-of-concepts. APIs are unstable and may change without notice. We're actively seeking early users to try things out and tell us what APIs you want. Please open an issue or ping us on Telegram with feedback.
Looking for Contributors:
See each SDK's README for install, quick start, and current API.
Guillotine is fast.
Benchmarks so far look very promising.
These benchmarks were taken using the evm-bench test cases with hyperfine.
| Test Case | evmone | Guillotine | REVM | Geth |
|---|---|---|---|---|
| erc20-approval-transfer | 1.56 ms | 1.59 ms | 1.67 ms | 3.65 ms |
| erc20-mint | 4.26 ms | 4.28 ms | 5.76 ms | 12.84 ms |
| erc20-transfer | 6.01 ms | 6.65 ms | 8.30 ms | 17.50 ms |
| ten-thousand-hashes | 2.90 ms | 2.46 ms | 3.31 ms | 9.36 ms |
| snailtracer | 27.15 ms | 26.41 ms | 39.01 ms | 86.02 ms |
WASM Bundle Sizes
┌───────────────────────────────────────────────────────────────────────────────────────────┐
│ Package │ Size │ Mode │ Precompiles │
├───────────────────────────────────────────────────────────────────────────────────────────┤
│ MinimalEvm │ ▓▓▓ 56KB │ ReleaseSmall │ ✗ Not included│
│ Guillotine EVM │ ▓▓▓▓▓▓ 119KB │ ReleaseSmall │ ✗ Not included│
│ Primitives │ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ 687KB │ ReleaseSmall │ ✗ Not included│
│ Full Package │ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ 1.1MB │ ReleaseFast │ ✓ Included │
└───────────────────────────────────────────────────────────────────────────────────────────┘
Note: Smaller packages use ReleaseSmall optimization for size, while the full package uses ReleaseFast for performance.
ReleaseSafe builds (recommended for alpha) are larger due to additional safety features and validation overhead.
Guillotine was built using data-oriented design with an emphasis on minimizing branch-prediction misses in the CPU. We studied every EVM implementation as well as Wasm, Lua, and Python interpreter implementations for the state of the art. Optimizations include, from most impactful to least impactful:
Balanced tradeoffs
We focus on maintainable code and targeted optimizations where they matter. We do our best to write simple code the Zig compiler can optimize.
There are many more optimizations that have not been implemented yet. The biggest of which will be translating our stack-based EVM into a register-based EVM—a common technique used by interpreters like Lua and PyPy, and Cranelift-style designs—to achieve up to ~30% performance increases.
comptime allows us to easily and surgically only include the minimum necessary code given the specific EVM and hard fork configuration. Code you don't use isn't included.Guillotine is in early alpha, but we prioritize safety through multiple build modes and extensive testing:
ReleaseSafe includes a comprehensive safety system that runs a simplified EVM as a sidecar to validate execution:
While ReleaseSafe has performance overhead compared to ReleaseFast, it provides critical safety guarantees during alpha development.
Guillotine is a VM implementation (like REVM) not a full node (like reth). However, Tevm (the team behind Guillotine) plans to begin work on a highly performant Zig-based full client soon. This client will leverage parts of Guillotine's architecture to execute transactions in parallel and architect around I/O bottlenecks.
Guillotine ships with opinionated defaults and is mainnet‑ready with zero configuration.
Guillotine is built from the ground up to be a highly customizable EVM SDK.
With Guillotine you can easily create your own EVM!
Using Zig comptime, you configure features with regular Zig code, and the compiler includes only what you use. REVM offers similar customizability but requires more onboarding into complex generics and feature flags compared to Zig comptime.
Customizability features include
u256)comptime validation to ensure configurations are soundAll customizations are zero‑cost, compile‑time abstractions using Zig comptime, so customizations never sacrifice runtime performance and your bundle includes only the features you choose to use.
For most users who don't need customizations, we offer default options for all major hard forks.
🚧 This feature is considered experimental and the API could change.
Once stable, Guillotine’s Wasm build will replace the current JavaScript EVM in Tevm. Upgrades include:
We welcome contributions of all kinds, including AI-assisted contributions (with proper disclosure)!
See our Contributing Guide to get started.
Be an early contributor and get listed here forever!
Guillotine values minimal runtime dependencies but utilizes the following powerful crypto dependencies
We have plans to make all crypto comptime configurable with opinionated defaults for Beta.
solc wrapper exposed in Zig and used internally as a Zig library for building contracts.We deeply appreciate these excellent EVM implementations that served as inspiration:
MIT License. Free for all use. 🌍
Zig
54.0%
Assembly
15.9%
C
9.3%
Rust
6.4%
TypeScript
4.3%
Go
2.9%
Python
1.9%
Makefile
1.4%
C++
1.1%
An ultra-high performance and flexible EVM. Written in zig
See the codeThe ultrafast EVM for every language and platform
🔄 Repository in Flux: This repo is currently undergoing significant refactoring as we prepare to release a new Zig library that will be like ethers.js or alloy for Zig. More updates coming soon!
Current Status: DO NOT USE IN PRODUCTION
Guillotine is not suitable for production use at this time. Any use of Guillotine should be considered purely experimental.
Latest Test Run: 2251 tests executed
Most failures are in ecmul/BN254 elliptic curve tests. Run specs with: zig build specs
See specs/README.md for detailed instructions on running the test suite.
Current Development Focus: Our primary goal is achieving 100% Ethereum specification compliance while ensuring complete safety, debuggability, and observability through our tracer system (src/tracer/tracer.zig). The tracer provides comprehensive execution monitoring, differential testing against a reference implementation, and detailed error reporting for every opcode.
For an in-depth understanding of Guillotine's design and implementation, see our comprehensive Architecture Documentation. Follow the issue tracker for features planned for Beta.
Network Support: Currently only Ethereum Mainnet is supported. Planned for Beta:
🚧 = Coming soon. Consider opening a discussion if you have any API recommendations or requested features.
comptime configuration means you only pay for features you actually useCurrently Supported: macOS Planned: Linux support
# 1. Clone with submodules
git clone --recursive https://github.com/evmts/Guillotine.git
cd Guillotine
# Or if already cloned:
git submodule update --init --recursive
# 2. Build the project
zig build
# 3. Verify the build
zig build test-opcodes
All SDKs in this repo are vibecoded proof-of-concepts. APIs are unstable and may change without notice. We're actively seeking early users to try things out and tell us what APIs you want. Please open an issue or ping us on Telegram with feedback.
Looking for Contributors:
See each SDK's README for install, quick start, and current API.
Guillotine is fast.
Benchmarks so far look very promising.
These benchmarks were taken using the evm-bench test cases with hyperfine.
| Test Case | evmone | Guillotine | REVM | Geth |
|---|---|---|---|---|
| erc20-approval-transfer | 1.56 ms | 1.59 ms | 1.67 ms | 3.65 ms |
| erc20-mint | 4.26 ms | 4.28 ms | 5.76 ms | 12.84 ms |
| erc20-transfer | 6.01 ms | 6.65 ms | 8.30 ms | 17.50 ms |
| ten-thousand-hashes | 2.90 ms | 2.46 ms | 3.31 ms | 9.36 ms |
| snailtracer | 27.15 ms | 26.41 ms | 39.01 ms | 86.02 ms |
WASM Bundle Sizes
┌───────────────────────────────────────────────────────────────────────────────────────────┐
│ Package │ Size │ Mode │ Precompiles │
├───────────────────────────────────────────────────────────────────────────────────────────┤
│ MinimalEvm │ ▓▓▓ 56KB │ ReleaseSmall │ ✗ Not included│
│ Guillotine EVM │ ▓▓▓▓▓▓ 119KB │ ReleaseSmall │ ✗ Not included│
│ Primitives │ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ 687KB │ ReleaseSmall │ ✗ Not included│
│ Full Package │ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ 1.1MB │ ReleaseFast │ ✓ Included │
└───────────────────────────────────────────────────────────────────────────────────────────┘
Note: Smaller packages use ReleaseSmall optimization for size, while the full package uses ReleaseFast for performance.
ReleaseSafe builds (recommended for alpha) are larger due to additional safety features and validation overhead.
Guillotine was built using data-oriented design with an emphasis on minimizing branch-prediction misses in the CPU. We studied every EVM implementation as well as Wasm, Lua, and Python interpreter implementations for the state of the art. Optimizations include, from most impactful to least impactful:
Balanced tradeoffs
We focus on maintainable code and targeted optimizations where they matter. We do our best to write simple code the Zig compiler can optimize.
There are many more optimizations that have not been implemented yet. The biggest of which will be translating our stack-based EVM into a register-based EVM—a common technique used by interpreters like Lua and PyPy, and Cranelift-style designs—to achieve up to ~30% performance increases.
comptime allows us to easily and surgically only include the minimum necessary code given the specific EVM and hard fork configuration. Code you don't use isn't included.Guillotine is in early alpha, but we prioritize safety through multiple build modes and extensive testing:
ReleaseSafe includes a comprehensive safety system that runs a simplified EVM as a sidecar to validate execution:
While ReleaseSafe has performance overhead compared to ReleaseFast, it provides critical safety guarantees during alpha development.
Guillotine is a VM implementation (like REVM) not a full node (like reth). However, Tevm (the team behind Guillotine) plans to begin work on a highly performant Zig-based full client soon. This client will leverage parts of Guillotine's architecture to execute transactions in parallel and architect around I/O bottlenecks.
Guillotine ships with opinionated defaults and is mainnet‑ready with zero configuration.
Guillotine is built from the ground up to be a highly customizable EVM SDK.
With Guillotine you can easily create your own EVM!
Using Zig comptime, you configure features with regular Zig code, and the compiler includes only what you use. REVM offers similar customizability but requires more onboarding into complex generics and feature flags compared to Zig comptime.
Customizability features include
u256)comptime validation to ensure configurations are soundAll customizations are zero‑cost, compile‑time abstractions using Zig comptime, so customizations never sacrifice runtime performance and your bundle includes only the features you choose to use.
For most users who don't need customizations, we offer default options for all major hard forks.
🚧 This feature is considered experimental and the API could change.
Once stable, Guillotine’s Wasm build will replace the current JavaScript EVM in Tevm. Upgrades include:
We welcome contributions of all kinds, including AI-assisted contributions (with proper disclosure)!
See our Contributing Guide to get started.
Be an early contributor and get listed here forever!
Guillotine values minimal runtime dependencies but utilizes the following powerful crypto dependencies
We have plans to make all crypto comptime configurable with opinionated defaults for Beta.
solc wrapper exposed in Zig and used internally as a Zig library for building contracts.We deeply appreciate these excellent EVM implementations that served as inspiration:
MIT License. Free for all use. 🌍
Zig
54.0%
Assembly
15.9%
C
9.3%
Rust
6.4%
TypeScript
4.3%
Go
2.9%
Python
1.9%
Makefile
1.4%
C++
1.1%