NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #3367 most downloaded on crates.io
Revm - Rust Ethereum Virtual Machine
Last release 13 days ago
24 Sep 2026
Ships fairly regularly
a new release about every 5 weeks
Nearly every release is documented
notes for 54 of the last 60 stable releases
13 versions withdrawn
withdrawn after publishing
5 years old
120 releases · first in 2021
One column per quarter.
Adds extension data to Account gated behind the feature flag.
Adds extension data to Account gated behind the feature flag.
Full Changelog: v119...v120
account-ext feature for chain-specific account payloads, journal rollback, and BAL history (#3894).Revert "fix(eip8037): place the system call state-gas margin ( #3892 )" by @rakita in #3903
REVM v117 updates revm-context and revm-precompile to 43.0.1 .
REVM v117 updates revm-context and revm-precompile to 43.0.1.
Full Changelog: v116...v117
Full Changelog: v116...v117
Glamsterdam change for gas refill on frame return.
Full Changelog: v117...v118
REVM v116 brings every publishable workspace crate to version 43.0.0 . This release aligns the implementation with Glamsterdam devnet-8, adds asynchro
REVM v116 brings every publishable workspace crate to version 43.0.0. This release aligns the implementation with Glamsterdam devnet-8, adds asynchronous database execution, and includes correctness and performance improvements across the EVM stack.
asyncdb feature provides fiber-backed async database support, including async transaction and system-call APIs.MemoryOOG, and failed CREATE pre-access checks no longer warm or add the destination account to the block access list.State, and revme blockchain tests now validate receipt-trie roots.See the migration guide for full upgrade details.
Full Changelog: v115...v116
Small release that adds spilled state gas to PrecompileOutput.
Small release that adds spilled state gas to PrecompileOutput.
Full Changelog: v114...v115
v114 aligns REVM with Glamsterdam devnet-7 and the tests-glamsterdam-devnet@v7.0.0 fixtures — all state_tests and blockchain_tests pass. All crates ar
Date: 2026-07-23
v114 aligns REVM with Glamsterdam devnet-7 and the
tests-glamsterdam-devnet@v7.0.0 fixtures — all state_tests and
blockchain_tests pass. All crates are released as 42.0.0.
State-dependent transaction charges move out of intrinsic gas into a runtime
phase applied as the first frame is entered. Gated on
CfgEnv::enable_amsterdam_eip2780; older forks are unchanged.
REGULAR_PER_AUTH_BASE_COST (7,816) plus per-authority runtime charges, withTX_BASE.ACCOUNT_WRITECREATE/CREATE2SSTORE must cover theJournalEntry::CodeChange now records and restores the previous code hash andfeat(database): database fallback mode for BAL misses (#3754).feat: configurable max refund quotient (#3757); BAL account change slices (#3762).fix(inspector): EIP-7708 transfer logs reach the inspector (#3816); stalefix: GasTracker used-gas underflow (#3813); is_empty preserved on 7702load_account_delegated (#3802); storage original_valueperf: fewer bounds checks in precompile parsing (#3784); no intermediate BALtake_n_reverts (#3539).chore(deps): crossbeam-epoch 0.9.20 for RUSTSEC-2026-0204 (#3804).See MIGRATION_GUIDE.md
for the full list.
refund fallible by @klkvr in #3758Full Changelog: v113...v114
All crates are now versioned in lockstep, starting at 41.0.0 — hence the version jump (e.g. revm-bytecode 11.0.1 → 41.0.0). Released by #3711 and #375
date: 11.06.2026
All crates are now versioned in lockstep, starting at 41.0.0 — hence the version jump (e.g. revm-bytecode 11.0.1 → 41.0.0). Released by #3711 and #3753; full diff v112...v113.
Breaking:
TransientStorage is now a newtype over AddressMap<StorageKeyMap<StorageValue>> (#3736)OnStateHook::on_state takes EvmState by value; TransitionAccount gained a storage generic (#3732)GasStateTr removed, superseded by the SSTORE gas hook (#3750)Other highlights:
StateBuilder::with_bundle_update_if (#3729), Account::is_changed (#3727)analyze_legacy (#3752) and a const-eval panic in pop_address (#3735)See MIGRATION_GUIDE.md for migration notes.
Account::is_changed by @klkvr in #3727GasStateTr expose StateLoad by @0xrusowsky in #3737GasStateTr by @klkvr in #3750Full Changelog: v112...v113
feat: add OnStateHook for State<DB> by @decofe in #3710
Small maintenance release
OnStateHook for State<DB> by @decofe in #3710Full Changelog: v111...v112
v111 is a maintenance release that extends DBErrorMarker so callers can distinguish fatal database errors from recoverable BAL validation failures ( #
Date: 2026-05-22
v111 is a maintenance release that extends DBErrorMarker so callers can distinguish fatal database errors from recoverable BAL validation failures (#3704). The change adds is_fatal(&self) -> bool to the DBErrorMarker trait with a default of true, preserving existing fail-stop behavior for every current implementor. EvmDatabaseError overrides the default so the Database(_) variant is fatal and the Bal(_) variant is non-fatal — letting callers distinguish a real underlying database failure from a BAL validation issue that may be retried or surfaced differently.
revm-database-interface: 12.0.0 → 12.1.0 (✓ API compatible changes)revm-context-interface: 19.0.1 → 19.0.2 (✓ dependency bump)revm-context: 18.0.1 → 18.0.2 (✓ dependency bump)revm-database: 15.0.0 → 15.0.1 (✓ dependency bump)revm-interpreter: 37.0.1 → 37.0.2 (✓ dependency bump)revm-precompile: 36.0.1 → 36.0.2 (✓ dependency bump)revm-handler: 20.0.1 → 20.0.2 (✓ dependency bump)revm-inspector: 21.0.1 → 21.0.2 (✓ dependency bump)revm-statetest-types: 19.0.1 → 19.0.2 (✓ dependency bump)revm: 40.0.1 → 40.0.2 (✓ dependency bump)revme: 17.0.1 → 17.0.2 (✓ dependency bump)is_fatal to DBErrorMarker by @rakita in #3704Full Changelog: v110...v111
v110 is a maintenance release that removes the dead refill_amount tracking from the EIP-8037 reservoir model ( #3699 ). The change drops GasTracker.re
Date: 2026-05-21
v110 is a maintenance release that removes the dead refill_amount tracking from the EIP-8037 reservoir model (#3699). The change drops GasTracker.refill_amount and the parallel field on PrecompileOutput. The field tracked cumulative reservoir refills — refill_reservoir calls from 0→x→0 storage restorations and failed CREATE refunds — but the revert/halt unwinding it was meant to support is already covered by the signed-sum invariant child.reservoir + child.state_gas_spent: refill_reservoir(r) does reservoir += r; state_gas_spent -= r, so their sum is conserved across refills and recovers the pre-call value. Every read site — last_frame_result save/restore, the handle_reservoir_remaining_gas success branch, and precompile_provider — only fed the field back into itself, and nothing downstream consulted it. Net diff is −56 / +3 across 6 files.
Two compatibility notes are worth calling out. GasTracker derives serde::Serialize/Deserialize under the serde feature, so removing refill_amount is a serialization-format break for any external consumer that persists GasTracker. PrecompileOutput has no serde derive, so it is only a Rust-ABI break there.
revm-context-interface: 19.0.0 → 19.0.1 (✓ API compatible changes)revm-context: 18.0.0 → 18.0.1 (✓ dependency bump)revm-interpreter: 37.0.0 → 37.0.1 (✓ API compatible changes)revm-precompile: 36.0.0 → 36.0.1 (✓ API compatible changes)revm-handler: 20.0.0 → 20.0.1 (✓ API compatible changes)revm-inspector: 21.0.0 → 21.0.1 (✓ dependency bump)revm-statetest-types: 19.0.0 → 19.0.1 (✓ dependency bump)revm: 40.0.0 → 40.0.1 (✓ dependency bump)revme: 17.0.0 → 17.0.1 (✓ dependency bump)refill_amount tracking by @rakita in #3699Full Changelog: v109...v110
revm-database-interface : 11.1.0 → 12.0.0 (⚠ API breaking changes)
v109 (2026-05-20)
Date: 2026-05-20
v109 is a semver-correction release with no new code changes on top of v108. It re-cuts the workspace so that revm-database-interface is bumped as a
major version, accurately reflecting the API breaks shipped in v108 (BAL error context, non-max account/transaction index types, commit_iter
semantics). All transitively dependent crates are bumped accordingly.
The v108 cut left revm-database-interface at 11.1.0 (minor), but the changes that landed in that window — most notably the non-max index-type
optimizations (#3605, #3610) and the BAL error-context rework (#3619) — are API breaks for downstream databases. v109 re-publishes the affected crates with
the correct major bump so downstream consumers can pin against semver accurately.
revm-database-interface: 11.1.0 → 12.0.0 (⚠ API breaking changes)revm-context-interface: 18.0.0 → 19.0.0 (⚠ dependency bump)revm-database: 14.0.0 → 15.0.0 (⚠ dependency bump)revm-context: 17.0.0 → 18.0.0 (⚠ dependency bump)revm-interpreter: 36.0.0 → 37.0.0 (⚠ dependency bump)revm-precompile: 35.0.0 → 36.0.0 (⚠ dependency bump)revm-handler: 19.0.0 → 20.0.0 (⚠ dependency bump)revm-inspector: 20.0.0 → 21.0.0 (⚠ dependency bump)revm-statetest-types: 18.0.0 → 19.0.0 (⚠ dependency bump)revm: 39.0.0 → 40.0.0 (⚠ dependency bump)revm-ee-tests: 0.2.0 → 0.3.0 (⚠ dependency bump)revme: 16.0.0 → 17.0.0 (⚠ dependency bump)Full Changelog: v108...v109
…errors without ad-hoc control flow. This is a breaking change for anyone authoring custom instruction tables / handlers.
Date: 2026-05-19
v108 brings REVM in line with Amsterdam bal-devnet-7, finalizing the
EIP-8037 state-gas/reservoir model that landed experimentally in v106 and
v107.
op-revm removed from the workspace (#3568). The Optimism variantethereum-optimism/optimism.op-revm crate.Result (#3558). The instruction-functionResult<_, _> so that fallible opcodes canJournal traits restructured (#3663). The journal trait hierarchyCfgEnv synchronization withfeat(state): Bal::try_from_alloy for converting an alloy BAL intoBal type (#3665), with a borrowed-input variant added infeat(database): State::has_bal helper (#3604).feat(state): optimized index types using non-max for transactionfeat(primitives): SpecId::NEXT added and the num_enum dependencyfeat: InitialAndFloorGas is now propagated throughvalidate_against_state_and_deduct_caller (#3577), so the floor-gasfeat: BAL errors now show the offending address or slot (#3619), andBalError have been expanded (#3666).handler: senders with nonce at u64::MAX are now rejected beforeperf(precompile): vendor blake2b_simd for BLAKE2 compressionOnceLock array (#3602);perf(interpreter): instruction and gas tables are now separatedinit_code_hash is cached in CreateInputs so inspectors canperf: empty-account loads no longer allocate (#3590); thememory_limit check is moved into the cold resize path so the hotperf(database): commit_iter semantics preserved while improving itsfix(precompile): halt with PrecompileOOG when a precompilePrecompileOutput::gas_refunded (#3574); use SIGMA period 10 in thecfg on the blake2 AVX2fix(bal): record storage writes to zero for self-destructed accountsfix(context): use the storage_by_account_id fast path in SLOADfix(handler): skip reimburse_caller / reward_beneficiary whenfix(inspector): use build_result_gas in inspect_run_system_callfix(bytecode): mark Bytecode::new_analyzed as unsafe to reflectfix: opcode struct panics / safety hardening (#3566).fix: gracefully handle commits of non-cached accounts (#3657).refactor(interpreter): unify call handlers (#3626); dedup accountloop_control module (#3555).refactor: thread the reservoir through OOG constructors (#3580); passfirst_frame_input (#3578); remove the pointerGasParams (#3608).refactor: change &mut self to &self on read-only methods (#3669);get over get_mut where mutation isn't needed (#3643).refactor(gas): simplify log2floor (#3629).refactor: drop unused spec ids (#3649) and unusedMemoryExtensionResult (#3646).test(ee-tests): switch to insta for snapshot assertions (#3654)test: custom-opcode integration test added (#3576).ci: run the develop EEST fixtures by default (#3645); pin GitHubdocs: README in ee-tests now references eip8037.md instead oftip1016.md (#3648).chore: enable and fix clippy::missing_const_for_fn (#3592); audit#[allow] attributes (#3611); bump alloy 2.0 crates (#3565) andalloy-eip7928 (#3627); bump rustls-webpki for an advisory (#3600).| Crate | From | To | Compat |
|---|---|---|---|
revm-primitives |
23.0.0 | 24.0.0 | ⚠ breaking |
revm-bytecode |
10.0.0 | 11.0.0 | ⚠ breaking |
revm-state |
11.0.1 | 12.0.0 | ⚠ breaking |
revm-database-interface |
11.0.1 | 11.1.0 | ✓ compatible |
revm-context-interface |
17.0.1 | 18.0.0 | ⚠ breaking |
revm-context |
16.0.1 | 17.0.0 | ⚠ breaking |
revm-database |
13.0.1 | 14.0.0 | ✓ compatible |
revm-interpreter |
35.0.1 | 36.0.0 | ⚠ breaking |
revm-precompile |
34.0.0 | 35.0.0 | ⚠ breaking |
revm-handler |
18.1.0 | 19.0.0 | ⚠ breaking |
revm-inspector |
19.0.0 | 20.0.0 | ⚠ breaking |
revm-statetest-types |
17.0.1 | 18.0.0 | ✓ compatible |
revm |
38.0.0 | 39.0.0 | ✓ compatible |
revme |
15.0.0 | 16.0.0 | ✓ compatible |
op-revm is no longer released from this repository — see
ethereum-optimism/optimism
for the maintained version.
Result-returning signature introduced in #3558.Journal trait hierarchy (#3663).op-revm crateethereum-optimism/optimism (#3568).Bal::try_from_alloy (#3665, #3670) is theSee MIGRATION_GUIDE.md for the worked-example migration of the
breaking APIs.
Bytecode::new_analyzed as unsafe by @decofe in #3557PrecompileOutput::gas_refunded by @klkvr in #3574InitialAndFloorGas to stateful validation by @klkvr in #3577first_frame_input by @klkvr in #3578non-max by @developeruche in #3605eip8037.md instead of stale tip1016.md in README by @fgimenez in #3648Cow for warm precompile addresses by @klkvr in #3652Cow for warm precompile addresses" by @klkvr in #3653Journal traits by @klkvr in #3663BalError documentation by @rakita in #3666Note truncated.
Maintenance release with handler API refinements.
Maintenance release with handler API refinements.
PrecompileOutput::gas_refunded (#3574) — Field was inadvertently removed in v106.InitialAndFloorGas to validate_against_state_and_deduct_caller (#3577) — Handler gains a &mut InitialAndFloorGas parameter.first_frame_input (#3578) — Replaces &InitialAndFloorGas with a precomputed reservoir: u64; CreateInputs::new and create_init_frame gain a trailing reservoir param.Full Changelog: v106...v107
ci: add cargo-semver-checks to catch breaking changes in PRs by @decofe in #3476
frame_start and frame_end on Inspector trait (#3518) — New inspector hooks for observing frame lifecycle events.CallInput::as_bytes (#3515) — Convenience accessor for raw call input bytes.CallInput (#3537) — Access local context fields directly from CallInput.--keep-going (#3491) — Summary of all failures printed at the end of test runs.JournalLoadError from load_account_mut_skip_cold_load (#3477) — Error type was previously hidden.Bytecode Ord consistent with PartialEq and Hash (#3479) — Fixes ordering inconsistency.DummyHost return defaults instead of errors for storage ops (#3503) — Better behavior for testing.AnyError for PrecompileError::Fatal and EVMError::Custom (#3502) — Replaces stringly-typed errors with AnyError.set_spec and clean up deprecation attrs (#3550)validate_initial_tx_gas (#3552)underflow variable to success by @zeroprooff in #3486frame_start and frame_end to Inspector trait by @mablr in #3518Option by @klkvr in #3532Full Changelog: v105...v106
bump revm-database-interface to v10.0.0
*(precompile)* add aws-lc-rs as alternative backend for secp256r1
Propagate map-foldhash Feature Through Dependency Chain
expose optional_priority_fee_check feature from context crate
Nothing published for this version
updated the following local packages: revm-context-interface, revm-context, revm-interpreter, revm-precompile, revm-handler, revm-inspector
Nothing published for this version
updated the following local packages: revm-database, revm-context, revm-handler, revm-inspector
updated the following local packages: revm-primitives, revm-context, revm-bytecode, revm-state, revm-database-interface, revm-context-interface, revm-
### Other - consolidate revme imports
updated the following local packages: revm-interpreter, revm-handler, revm-inspector
updated the following local packages: revm-bytecode, revm-state, revm-database-interface, revm-context-interface, revm-context, revm-database, revm-in
updated the following local packages: revm-primitives, revm-bytecode, revm-context, revm-interpreter, revm-precompile, revm-handler, revm-state, revm-
updated the following local packages: revm-database-interface, revm-database, revm-interpreter, revm-precompile, revm-handler, revm-inspector, revm-co
Nothing published for this version
Apply spelling corrections from PRs #2926, #2915, #2908
updated the following local packages: revm-context-interface, revm-context, revm-interpreter, revm-handler, revm-inspector
updated the following local packages: revm-bytecode, revm-database-interface, revm-context-interface, revm-context, revm-database, revm-interpreter, r
updated the following local packages: revm-primitives, revm-bytecode, revm-state, revm-context-interface, revm-database, revm-precompile, revm-inspect
Reuse bls12-381 codepaths to implement kzg point evaluation precompile
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
expose sha3-keccak in revm and revm-primitives
updated the following local packages: revm-context, revm-interpreter, revm-precompile, revm-handler, revm-inspector
updated the following local packages: revm-bytecode, revm-handler, revm-inspector, revm-state, revm-database-interface, revm-context-interface, revm-c
inline documentation of revm top modules
Nothing published for this version
call stack_frame.clear() at end
*(multitx)* Add local flags for create and selfdestruct
updated the following local packages: revm-context, revm-handler, revm-inspector
make crates.io version badge clickable
Dependency bump
Dependency bump
### Other - typos (#2474) - copy edit The Book (#2463) - bump dependency version (#2431) - fixed broken link
### Other
Reorder revm deps in Cargo.toml
Add a wrapper for arkworks for EIP196
updated the following local packages: revm-database, revm-precompile
updated the following local packages: revm-primitives, revm-context-interface, revm-context, revm-database, revm-interpreter, revm-precompile, revm-ha
updated the following local packages: revm-primitives, revm-bytecode, revm-context-interface, revm-context, revm-precompile, revm-handler, revm-inspec
updated the following local packages: revm-context-interface, revm-context, revm-interpreter, revm-handler, revm-inspector
### Fixed - correct propagate features
*(precompiles)* add portable flag for bls
JournalTr, JournalOutput, op only using revm crate
optional_gas_refund as unused (#2132)revm (#2088)Split Inspector trait from EthHandler into standalone crate
Nothing published for this version
Nothing published for this version
*(op-isthmus)* missing granite precompiles and disable eof
Your coding agent can read these notes before it upgrades. Set up the MCP server →