Releases: foundry-rs/foundry
Nightly (2026-05-04)
Other
- chore(lint): add missing lints to README (#14551) by @mablr
- chore(bench): update
benchmark.sh(#14548) by @mablr - chore(clippy): fix workspace-wide clippy regressions (#14554) by @stevencartavia
- fix(ci): use
PATH_USDfallback fee token in Mail templates (#14546) by @mablr - chore(deps): bump the actions-weekly group with 3 updates (#14497) by @dependabot[bot]
- refactor(chisel): migrate to solar (#14532) by @mablr
Full Changelog:
nightly-a5b7cc8da131956513da478f9fa99d2e0e29419d...nightly-58e0595f3533074705d2057ffe183dbf86b08c3e
Nightly (2026-05-03)
Other
- anvil: unify Tempo nonce markers across send RPCs (#14536) by @isagi-y22
- fix(forge):
flaky_gas_report_fallback_with_calldatadeployment cost (#14545) by @mablr
Full Changelog:
nightly-415cef0d0730270402e24d0a30d5c086a7a240b1...nightly-a5b7cc8da131956513da478f9fa99d2e0e29419d
Nightly (2026-05-01)
Other
- feat(lint): detect boolean constant misuse (#14489) by @figtracer
- feat(lint): add could-be-immutable lint (#14495) by @figtracer
- chore: bump compiler version to 0.8.35 for tests (#14524) by @zerosnacks
- chore: update codeowners (#14529) by @onbjerg
- feat(lint): add
unused-state-variable(#14483) by @mablr - chore(ci): re-enable Tempo devnet in CI, make Tempo testnet and mainnet a nightly check (#14501) by @zerosnacks
- feat(lint): add rtlo lint (#14499) by @stevencartavia
- feat(forge): use network = "tempo" and add rpc_endpoints in tempo template (#14528) by @zerosnacks
- ci(tempo): also run devnet checks on push to master (#14537) by @zerosnacks
- fix(config): suppress spurious unknown-key warning for
network(#14534) by @zerosnacks - test(fmt): cover erc7201 layout formatting (#14519) by @decofe
- perf(forge): avoid unnecessary gas_snapshots clones (#13969) by @ArshLabs
Full Changelog:
nightly-233324ea3161d971459ac9ef86fb5af4e7aa711e...nightly-415cef0d0730270402e24d0a30d5c086a7a240b1
Nightly (2026-04-30)
Other
- chore(lint): move low-severity lints to low/ (#14500) by @stevencartavia
- fix(ext): bump forge-std commit in external integration tests (#14504) by @zerosnacks
- fix(foundryup): sort nightly releases chronologically before picking latest (#14507) by @zerosnacks
- feat(doc): migrate from solang to solar (#14447) by @mablr
- fix(cheatcodes): fix solc 0.8.35 error keyword warning (#14509) by @figtracer
- chore(tests): bump forge-std version (#14510) by @github-actions[bot]
- chore(ext): bump revs in external integration tests (#14506) by @zerosnacks
Full Changelog:
nightly-5864f675120ce4f619871f9001555bc387331120...nightly-233324ea3161d971459ac9ef86fb5af4e7aa711e
v1.7.0
Foundry v1.7.0
Foundry v1.7.0 brings major improvements to fuzzing and invariant testing, upstreams Tempo support into the main Foundry toolchain, adds support for HTTP 402-gated RPC endpoints through MPP, improves browser-wallet and batching workflows across Forge and Cast, and moves Foundry releases to an immutable versioning model.
v1.7.0 folds in the previously cut
v1.6.0-rc1release candidate, which never shipped as stable, together with the changes merged since.
Highlights
Testing & Fuzzing
- Parallelized stateless fuzzing across worker threads with shared corpus (#12713)
- Invariant
check_intervalconfig — deep invariant runs up to 3.6× faster withcheck_interval = 10(#13133) - Invariant optimization mode — search input sequences that maximize a target value, with realtime best-value tracking and persistence (#13196, #14147, #14226)
- Improved reentrancy detection in
call_overrideinvariant testing (#13127) - Time-based invariant fuzzing via
max_time_delay/max_block_delayconfigs (#12616)
Network Updates
- Osaka is the default EVM hardfork (#13112), with precompile decoding for Prague BLS12-381 and Osaka P256VERIFY (#13094)
- Per-network
hardforkandnetworkkeys infoundry.toml(#14312, #14337), with auto-detection from a fork's chain ID (#14193)
Tempo
Tempo support has been upstreamed from the standalone tempoxyz/tempo-foundry fork into foundry-rs/foundry. The fork is deprecated; a normal foundryup install now ships Tempo support in forge, cast, anvil, and chisel.
This is 110 merged PRs spanning execution, RPC, transaction signing and validation, the AA/access-key flow, TIP20 fee tokens, cast keychain, forge create/script/test/coverage integration, Anvil genesis + pool + tracing, and CI. Notable entry points include:
forge init --network tempo(#12819)cast keychainfor Tempo access keys (#14166, #14222)cast tip20 createand TIP20 virtual address salt mining (#14160, #14365)--tempo.fee-tokenonforge scriptandcast send(#14204, #14184)- Tempo network auto-detection on
anvil --fork-url(#14279)
Full list in the Tempo section below.
MPP (Machine Payments Protocol)
Foundry now supports MPP (Machine Payments Protocol) for HTTP 402-gated RPC endpoints. When an RPC provider returns 402, Foundry signs and pays the challenge with the configured wallet, then retries the request — no API keys or upfront provisioning. A built-in URL mapping covers known providers, and a WebSocket transport handles long-lived subscriptions over paid connections (#14192, #14404, #14353).
Forge & Cast
- Browser wallet support across
forge script(#12952),forge create(#14394),cast send(#13747), andcast erc20(#14395) — sign and broadcast transactions directly from a browser wallet extension instead of provisioning a hot key on disk - Realtime
console.loginforgeandchisel(#13321) andconsole.tablesupport (#14338) forge inspect <x> linearization(#13704) makes it easier to inspect where inherited functions are resolved fromforge cloneSourcify support (#12900)cast batch-send/batch-mktxfor native call batching (#13973)cast --curlflag to print equivalent curl commands (#13114)
Cheatcodes & Lint
- New cheatcodes:
executeTransaction(#13437),Ed25519crypto (#13450),getRecordedLogsJson(#13093),currentFilePath(#13735) - New
forge-lintrules: incorrect ERC20 interface (#14428), incorrect ERC721 interface (#14412),block-timestamp(#14431), and custom errors (#13126). These catch incorrect ERC20/ERC721 interface implementations, timestamp-dependent logic, and custom-error usage issues.
Benchmarks
Live dashboard: getfoundry.sh/benchmarks
Headline wins per command, comparing v1.5.1 against the v1.7.0 release-cycle build:
| Command | Repository | v1.5.1 | v1.7.0 | Delta |
|---|---|---|---|---|
forge test |
aave/aave-v4 |
4m 14.2s | 3m 29.1s | ~45s faster |
forge fuzz |
ithacaxyz/account |
2.81s | 1.59s | ~1.8× faster |
forge test --isolated |
aave/aave-v4 |
4m 14.0s | 3m 53.4s | ~20s faster |
forge coverage |
aave/aave-v4 |
11m 20.8s | 10m 58.7s | ~22s faster |
Raw data: benches/LATEST.md.
Performance-related features (22 PRs)
- perf: add dist profile for smaller release binaries (#13097) by @onbjerg
- perf: compute literals only once (#12716) by @DaniPopes
- perf: remove redundant allocation in receipt bloom calculation (#13035) by @marukai67
- perf(forge): skip external identifiers for local tests (#13189) by @gakonst
- perf(anvil): avoid redundant block queries in
ots_getBlockTransactions(#13243) by @aganisgash - perf(evm): wrap
Executor.backendinArcfor copy-on-write cloning (#13327) by @gakonst - perf(cheatcodes): loop invariant code motion by hand (#13357) by @cuiweixie
- perf(linking): replace double hash map lookup with single
get(#13361) by @cuiweixie - perf(anvil): reuse storage root from
prove_storageinstead of recomputing (#13363) by @thunggis - perf(verify): reuse transaction from earlier RPC call instead of fetching twice (#13391) by @thunggis
- perf: avoid checksum (#13374) by @cuiweixie
- perf(invariant): avoid cloning state changeset in fuzz runs (#13398) by @thunggis
- perf(traces): deduplicate addresses before external fetching (#13320) by @marukai67
- perf(primitives): avoid cloning receipts (#13396) by @thunggis
- perf(config): skip redundant remapping detection in
_with_root(#13389) by @0xMars42 - perf(anvil): avoid redundant cloning and hash recomputation in mem backend (#13744) by @edgarr1986
- perf(anvil): remove redundant clone in
create_access_list(#13887) by @edgarr1986 - perf(evm): make
NestedEvm::to_evm_envconsuming to avoid useless clone (#13893) by @mablr - perf(evm): remove unnecessary clones in
do_call_end/do_create_end(#13913) by @figtracer - perf(evm): remove
EvmEnv/TxEnvcloning in DBs &CheatcodesExecutorimpls (#13960) by @mablr - perf(traces): skip precompile addresses in
identify_addresses(#14198) by @decofe - feat: make
asm-keccaka default feature in all binaries (#14389) by @DaniPopes
Breaking / Behavior Changes
forgeandanvilnow default to Osaka ([#13112](ht...
Nightly (2026-04-28)
Other
- chore(cli): make
Gitimpl more robust (#14452) by @mablr - fix(ci): aave v4 pinned on latest (#14474) by @mablr
- ci: prefer direct-key credentials for MPP e2e (#14472) by @brendanjryan
- fix: < to <= in validate_uint_mutation (#14459) by @cuiweixie
- ci(tempo): run testnet on PRs (#14479) by @zerosnacks
- feat: immutable releases (#14445) by @zerosnacks
- Improve CI action (#14484) by @grandizzy
- fix(config): warn instead of erroring on unknown FOUNDRY_PROFILE (#14486) by @zerosnacks
Full Changelog:
nightly-5e88010a83d1b87b8f4d13058e42a2949d3e9dc0...nightly-88c854987f2e9c8df31756546eeec710fa5bc88f
Nightly (2026-04-29)
Other
- fix(anvil): pre-check Tempo valid_after before execution (#14469) by @Perico-perica46
- feat(lint): add missing-zero-check (#14460) by @stevencartavia
- chore: bump Tempo deps + test
tempo_forkSchedule(#14485) by @0xrusowsky - fix(anvil): miner forced-tx deadlock (#14453) by @isagi-y22
Full Changelog:
nightly-88c854987f2e9c8df31756546eeec710fa5bc88f...nightly-5864f675120ce4f619871f9001555bc387331120
Nightly (2026-04-28)
Other
- fix(forge): adjust gas assertion
CounterWithFallback(#14465) by @mablr - chore: update latest benchmarks (#14467) by @mablr
- ci: split MPP e2e into its own workflow (#14468) by @zerosnacks
- Improve GH actions (#14473) by @grandizzy
- fix(benches): add repos + extra args support to prevent blocking errors (#14470) by @mablr
Full Changelog:
Nightly
Other
- fix(forge): adjust gas assertion
CounterWithFallback(#14465) by @mablr - chore: update latest benchmarks (#14467) by @mablr
- ci: split MPP e2e into its own workflow (#14468) by @zerosnacks
- Improve GH actions (#14473) by @grandizzy
- fix(benches): add repos + extra args support to prevent blocking errors (#14470) by @mablr
Full Changelog:
Nightly (2026-04-27)
- No changes