github foundry-rs/foundry 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-rc1 release 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_interval config — deep invariant runs up to 3.6× faster with check_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_override invariant testing (#13127)
  • Time-based invariant fuzzing via max_time_delay / max_block_delay configs (#12616)

Network Updates

  • Osaka is the default EVM hardfork (#13112), with precompile decoding for Prague BLS12-381 and Osaka P256VERIFY (#13094)
  • Per-network hardfork and network keys in foundry.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 keychain for Tempo access keys (#14166, #14222)
  • cast tip20 create and TIP20 virtual address salt mining (#14160, #14365)
  • --tempo.fee-token on forge script and cast 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), and cast erc20 (#14395) — sign and broadcast transactions directly from a browser wallet extension instead of provisioning a hot key on disk
  • Realtime console.log in forge and chisel (#13321) and console.table support (#14338)
  • forge inspect <x> linearization (#13704) makes it easier to inspect where inherited functions are resolved from
  • forge clone Sourcify support (#12900)
  • cast batch-send / batch-mktx for native call batching (#13973)
  • cast --curl flag to print equivalent curl commands (#13114)

Cheatcodes & Lint

  • New cheatcodes: executeTransaction (#13437), Ed25519 crypto (#13450), getRecordedLogsJson (#13093), currentFilePath (#13735)
  • New forge-lint rules: 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.backend in Arc for 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_storage instead 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_env consuming 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/TxEnv cloning in DBs & CheatcodesExecutor impls (#13960) by @mablr
  • perf(traces): skip precompile addresses in identify_addresses (#14198) by @decofe
  • feat: make asm-keccak a default feature in all binaries (#14389) by @DaniPopes

Breaking / Behavior Changes

  • forge and anvil now default to Osaka (#13112).
  • Fuzz tests now use a random seed by default when none is provided (#13309).
  • copyStorage and setArbitraryStorage are now marked Unsafe (#13882).
  • Compilation now fails on unresolved imports instead of continuing (#12848).
  • foundry.toml now supports per-network hardfork selection and an explicit network key (#14312, #14337); forked runs can also auto-detect the active network from chain ID (#14193).

Upgrade Notes

  • Run forge build after upgrading. Compilation now fails on unresolved imports instead of silently continuing (#12848) — projects with stale remappings or dead imports that previously compiled may now error. Fix by correcting the remapping or removing the dead import.
  • If you rely on reproducible fuzz runs, pin a fuzz seed explicitly. v1.7.0 now generates a random seed when none is provided (#13309).
  • If you rely on copyStorage or setArbitraryStorage, update tests and helpers to account for these cheatcodes now being marked Unsafe (#13882).
  • If you previously configured a single hardfork, migrate to the new network / per-network hardfork settings (#14312, #14337). Forked runs can also infer the active network from chain ID (#14193).

Testing & Fuzzing

Parallelized Stateless Fuzzing (#12713)

Stateless fuzz tests now run across multiple worker threads, significantly improving execution speed on multi-core machines. Each worker maintains its own corpus and periodically syncs with a master corpus, enabling efficient parallel exploration while sharing discovered coverage. Workers automatically distribute runs evenly and aggregate results after completion. Stateful (invariant) tests are not parallelized in this release.

Invariant check_interval Config (#13133)

A new check_interval config option controls how often invariants are asserted during deep runs:

Value Behavior
0 Only assert on the last call of each run (fastest)
1 (default) Assert after every call (current behavior, most precise)
N Assert every N calls AND always on the last call
[invariant]
depth = 1000
check_interval = 10

Benchmark: With check_interval = 10, deep invariant runs (1×1000 depth) are 3.6× faster (15.09s → 4.17s).

Caveat: with check_interval > 1, an invariant that is violated and then restored between checks can be missed.

Invariant Optimization Mode (#13196, #14147, #14226)

Define an invariant_* function that returns int256 and the fuzzer searches for the call sequence that maximizes it. Useful for finding worst-case rounding errors, drained balances, max slippage, etc.

function invariant_optimize_maxRoundingError() external view returns (int256) {
    return int256(pool.totalShares()) - int256(pool.expectedShares());
}

The best value and shrunk reproducer are tracked in realtime and persisted across runs.

Improved Reentrancy Detection with call_override (#13127)

The call_override invariant testing feature now correctly detects ETH transfer reentrancy vulnerabilities, including:

  • EtherStore pattern: classic DAO-style reentrancy where a handler sends ETH out and the attacker reenters
  • Rari Capital pattern: protocol-level reentrancy where external protocols send ETH to handlers

Validated against a reproduction of the April 2022 Rari Capital hack.

Time-based Invariant Fuzzing (#12616)

New max_time_delay and max_block_delay invariant configs enable fuzzing of block timestamp and block number on consecutive transactions. This helps discover time-dependent vulnerabilities that only manifest under specific block timing conditions. Counterexamples now display the vm.warp() and vm.roll() calls needed to reproduce failures.

Other Testing Improvements

Smaller polish across the fuzzing and invariant pipeline: clearer reporting of assertion failures, faster feedback on broken invariants, more reliable counterexample replay, and broader fuzz coverage including native Rust code.

Other testing improvements (5 PRs)
  • Assertion failures (assert(), vm.assert*, panics) are now reported as invariant failures during campaigns instead of being silently discarded with reverts (#14275)
  • Broken invariants are logged as soon as they are found (#14433)
  • Counterexample validation now uses settings rather than bytecode (#13219)
  • SanitizerCoverage support for coverage-guided fuzzing of native Rust code (#14339)
  • Address mutation variant added to fuzz dictionary selection (#13090)

Network Updates

Multi-Network Execution

The entire foundry-evm and anvil stack has been genericized over Network, Spec, Block, and EvmFactory, allowing one Foundry binary to drive Ethereum, Optimism, and Tempo through the same execution path. See the Internals section below for the full list of refactor PRs.

Notable consequences:

  • A new network key in foundry.toml and per-network hardfork selection (#14337, #14312)
  • Auto-detection of the active network from a fork's chain ID (#14193)
[profile.default]
tempo = true              # marks Tempo as the active non-Ethereum network
hardfork = "tempo:T3"     # namespaced hardfork; bare names like "osaka" still work for Ethereum

Hardforks can also be set per-test via inline config:

/// forge-config: default.hardfork = "tempo:T3"
function test_something() public { ... }

forge init --network tempo writes the tempo = true key for you. Forked runs (forge test --fork-url ...) infer the network from chain ID, so the network key is only required when there is no fork to infer from.

Other Chain Support

Per-chain quirks landed across XDC, SKALE, Polkadot, Optimism, Monad, MegaETH, Arbitrum, and Etherlink — covering RPC gas estimation, base-fee parameters, system-tx senders, and fork block pinning.

Other chain support (8 PRs)
  • XDC Network + SKALE Base (#12710)
  • Polkadot, Kusama, and Polkadot Testnet RPC gas estimation (#12537)
  • Network-specific BaseFeeParams for Optimism in Anvil (#12944)
  • Monad mainnet gas calculation + system address constant (#12615, #12585)
  • MegaETH system tx sender + gas calc (#14149, #13999)
  • Arbitrum fork block-number pinning (#14021)
  • Etherlink testnet → shadownet rename (#13763)
  • RPC URL bump: ithaca.xyz → reth.rs (#13261)

Improved Integration

Immutable Releases (#14445)

Foundry releases are now fully immutable. The mutable nightly, stable, and rc Git tags are gone — only semver tags (v*.*.*) and per-commit nightly-{SHA} releases exist.

For foundryup users:

  • latest is the new default channel (alias: stable).
  • nightly resolves to the most recent nightly-{SHA} prerelease.
  • Pinning to a specific build (foundryup -i v1.7.0 or foundryup -i nightly-abc1234) continues to work and is now permanently reproducible.

Docker tags follow the same model: version releases get :v1.7.0, :v1.7, :v1; nightlies are tagged as nightly-{SHA}.

Foundryup Rust Rewrite (Experimental)

This release is accompanied by a new Rust rewrite of foundryup for better maintainability, testing, and compatibility. The rewrite is still experimental; the existing installer remains the recommended path for now. To try the new foundryup:

curl -L https://raw.githubusercontent.com/foundry-rs/foundryup/HEAD/foundryup-init.sh | bash
foundryup

Foundry-toolchain TypeScript Rewrite

The foundry-toolchain GitHub Action has been completely rewritten in TypeScript for improved maintainability and reliability. See the v1.7.0 release.

foundry-core

The previously standalone foundry-fork-db, foundry-compilers, foundry-block-explorers (+ foundry-blob-explorers), and foundry-wallets crates are now maintained under foundry-rs/foundry-core and consumed as published crates (#14348, #14427, #14443).

Other Integration Changes

Hardening of the publishing pipeline: trusted OIDC for npm and proper semver floating tags for Docker.

Other integration changes (2 PRs)
  • OIDC trusted publishing for npm, removing the long-lived NPM_TOKEN (#14249)
  • Docker semver major/minor floating tags on release (#13182)

Tempo

Full PR breakdown for the Tempo upstreaming.

Fork deprecation, CI upstreaming & foundryup
Onboarding & project setup
Execution path & EVM integration
Transactions, pool & gas
Wallets, keychain & access keys
  • feat(cast): tempo nonce keys (#12977) by @onbjerg
  • feat(cast): add tempo tx construction support (#12973) by @onbjerg
  • feat: Tempo wallet access key support for cast (#13909) by @onbjerg
  • feat(forge-script): Tempo access key support for forge script (#13917) by @stevencartavia
  • feat(common): add Tempo wallet keystore types (#13975) by @figtracer
  • feat(cast): introduce cast keychain (#14166) by @figtracer
  • feat(cast): full cast keychain suite (#14222) by @figtracer
  • feat(wallets): add --tempo.access-key and --tempo.root-account (#14201) by @figtracer
  • feat(forge): forge create Tempo keychain support (#14185) by @figtracer
  • refactor(cast): fold run_tempo_keychain into run_generic as AccessKey case (#14137) by @mablr
  • refactor(common): unify sign_with_access_key with provisioning check (#14189) by @figtracer
  • feat(common): FoundryTransactionBuilder::sign_with_access_key method (#14120) by @mablr
  • fix(cast): keychain auth legacy mode w/ forks before T3 (#14311) by @mablr
  • test(cast): add keychain parsing unit tests, enforce deny_unknown_fields (#14322) by @figtracer
TIP20 / fee token
  • feat(cast): add ISO 4217 validation for TIP-20 (#14158) by @figtracer
  • feat(cast): add cast tip20 create (#14160) by @figtracer
  • feat(cast): cast send ISO 4217 validation for TIP20Factory (#14184) by @figtracer
  • feat(cast): mine TIP20 virtual address master salt (#14365) by @0xrusowsky
  • feat(script): add --tempo.fee-token to forge script (#14204) by @figtracer
  • feat(cli): --tempo.fee-token token id parsing (#14219) by @mablr
  • feat(forge): propagate fee_token to deploy_tokens in CreateArgs::deploy (#14221) by @mablr
  • fix(evm): proper fee_token handling in InspectorHandler & Cheatcodes (#14225) by @mablr
  • feat(evm): tempo genesis init and fork warmup into FoundryEvmFactory (#14159) by @mablr
Forge / Cast / Script integration
  • feat(forge): forge test/coverage Tempo support (#14165) by @mablr
  • feat(script): add --batch flag for Tempo native batching (#14167) by @mablr
  • feat(forge,cast): auto-detect network from fork chain ID (#14193) by @mablr
  • fix(script): Tempo direct signer + gas calc logic (#14242) by @mablr
  • fix(forge): script/test Tempo selection when used w/ Anvil (#14258) by @mablr
  • fix(script): skip deploy_create2_deployer in tempo mode to avoid CreateCollision (#14336) by @mablr
  • fix(evm): enforce tx gas limits in executeTransaction (#14318) by @0xrusowsky
  • feat(config): support network-specific hardfork in foundry.toml (#14312) by @0xrusowsky
  • feat(config): network key in foundry.toml (#14337) by @mablr
Tests, deps & docs

MPP (Machine Payments Protocol)

Full PR breakdown for end-to-end MPP support — 402 challenge handling, retry logic, a built-in RPC URL mapping, a WebSocket transport for paid subscriptions, and dedicated CI coverage.

MPP changes (6 PRs)

Forge

Features

Headline Forge changes: Osaka becomes the default hardfork, browser-wallet signing extends to forge script / forge create, realtime console.log / console.table, random fuzz seeds by default, Sourcify support in forge clone, forge inspect linearization, and broader network/solc compatibility.

Forge features (15 PRs)
Forge fixes (22 PRs)
  • fix: svm fails to download solc 0.8.33 on linux/arm64, bump svm-rs (#13007) by @zerosnacks
  • fix(forge): fail compilation on unresolved imports (#12848) by @subwaycookiecrunch
  • fix(forge): failing tests trigger early exit without --fail-fast (#12785) by @0xferrous
  • fix(forge): lookup path artifact if not in available artifacts (#12927) by @grandizzy
  • fix(forge): prevent gas underflow in delete operations on Cancun (#13157) by @gakonst
  • fix(forge): reseed cheatcodes rng in fuzz tests (#12843) by @DaniPopes
  • fix(forge): respect lint ignore config in solar compilation (#12978) by @tefyosL-sol
  • fix: only classify setUp as test setup if it has no parameters (#13204) by @mattsse
  • fix(forge): apply --access-list in forge create (#13557) by @FredPhilipy
  • fix(forge): don't reset snapshot diff result on missing file (#13442) by @dizer-ti
  • fix(forge): correct solar Solidity version support message (#13592) by @0xferrous
  • fix(forge): preserve invariant replay failure reason (#14136) by @0xWeakSheep
  • fix(forge): adjust gas assertion CounterWithFallback (#14465) by @mablr
  • fix(cli): Git::is_repo_root always returns false (#13505) by @letmehateu
  • fix: prevent panic on Etherscan client creation failure in test command (#13395) by @CreeptoGengar
  • forge: avoid repeated selector decoding in find command (#13516) by @anim001k
  • chore(forge): init reuse NetworkVariant (#14182) by @mablr
  • refactor(forge): remove redundant networks fields (#14183) by @mablr
  • test: mark clone CLI tests as flaky (#13472) by @mattsse
  • fix: bind TempDir guard in clone test to prevent premature cleanup (#13471) by @mattsse
  • fix(tests): update gas report snapshot after gas params sync fix (#14439) by @zerosnacks
  • chore(tests): bump forge-std version (#13482, #14422) by @github-actions

Cheatcodes, Fuzz & Invariant

Cheatcode features

  • feat(cheatcodes): add getRecordedLogsJson cheatcode (#13093) by @grandizzy

  • feat(cheatcodes): support both 4844/7594 formats in attachBlob (#13054) by @mablr

  • feat: add executeTransaction cheatcode (#13437) by @onbjerg

    Replays a fully-signed RLP-encoded transaction in an isolated EVM context, recovering the signer from the signature. State changes merge back into the parent context.

    function executeTransaction(bytes calldata rawTx) external returns (bytes memory);
  • feat(cheatcodes): add Ed25519 crypto cheatcodes (#13450) by @howydev

    bytes32 privateKey = vm.createEd25519Key(salt);
    bytes32 publicKey  = vm.publicKeyEd25519(privateKey);
    bytes memory sig   = vm.signEd25519("namespace", message, privateKey);
    bool ok            = vm.verifyEd25519(sig, "namespace", message, publicKey);
  • feat(cheatcodes): add currentFilePath cheatcode (#13735) by @alextnetto

Cheatcode fixes (17 PRs)
  • fix(cheatcodes): vm.mockFunction to work correctly with delegatecall (#13117) by @quangloc99
  • fix(evm): pin fork block number to prevent state inconsistency (#13085) by @grandizzy
  • fix(evm): use timestamp-based blob base fee calculation (#12959) by @cakevm
  • fix: emit console.log on fuzz test last run at verbosity >= 2 (#12478) by @avorylli
  • fix(preprocessor): mark getCode as view in VmContractHelper (#13089) by @grandizzy
  • fix(cheatcodes): fix vm.expectRevert for direct precompile calls (#13460) by @gakonst
  • fix(cheatcodes): make vm.executeTransaction work in isolation mode (#13475) by @gakonst
  • fix(cheatcodes): preserve nested EVM changes on executeTransaction (#13645) by @figtracer
  • fix(cheatcodes): prevent panic in expectRevert with empty bytes (#13769) by @decofe
  • fix(cheatcodes): create file in writeJson/writeToml 3-arg overload (#13777) by @decofe
  • fix(cheatcodes): fix interval notation in memory error (#14126) by @zeroprooff
  • fix(cheatcodes): reject nested debug trace recording (#14423) by @Perico-perica46
  • fix(cheatcodes): read broadcasts with the active network (#14388) by @solanaXpeter
  • fix vm.rpc cheatcode ABI encoding for structs (#13842) by @e1Ru1o
  • refactor: use native Solidity types for vm.rpc struct decoding (#14050) by @decofe
  • evm: only classify skip reverts from cheatcode address (#14264) by @ArshLabs
  • fix(macros): use correct index for tuple struct fields in ConsoleFmt (#13829) by @dizer-ti

Fuzz

Improvements to mutation strategies and coverage-guided fuzzing for native Rust code, plus minor correctness fixes.

Fuzz changes (4 PRs)

Invariant

Better counterexample validation, surfacing of assertion failures, and faster reporting of broken invariants. Optimization-mode PRs (#13196, #14147, #14226) and other testing improvements are listed under Testing & Fuzzing.

Invariant changes (6 PRs)

Cast

Wallets, signing & account inputs

Mnemonic-derived accounts, multi-authorization 7702 flows, browser-wallet receipt handling for cast send / cast erc20, plus cleanups around WalletOpts / EtherscanOpts.

Wallets, signing & account inputs (9 PRs)
  • feat(cast): derive accounts from mnemonic (#12700) by @leovct
  • feat(cast): strip WalletOpts and EtherscanOpts from subcommands that don't expect a signer or need Etherscan API (#12705) by @tskoyo
  • feat(cast): wallet sign-auth --self-broadcast (#12624) by @0xferrous
  • feat(cast): accept multiple 7702 authorizations (#12627) by @0xferrous
  • refactor(cast): deduplicate browser wallet receipt handling in cast send (#13747) by @figtracer
  • fix(cast): add browser wallet support for erc20 commands (#14395) by @figtracer
  • fix(cast): remove duplicate 0x prefix in sign-auth output (#14143) by @zeroprooff
  • fix(cast): sponsor hash computation and gas estimation mismatch (#14202) by @figtracer
  • fix(cast): restore current_dir in keystore overwrite tests (#13690) by @mablr

Transactions, batching & gas

Native call batching (batch-send / batch-mktx), EIP-7594 support, raw-tx flags, system-tx replay, network-aware encoding, and a wave of correctness fixes around boundary checks and historical execution.

Transactions, batching & gas (15 PRs)
  • feat(cast): add support for raw transaction data with --data flag in send (#12712) by @Jds-23
  • feat(cast): add --data flag to access-list command (#13515) by @VolodymyrBg
  • feat(cast): add tx flags to erc20 command (#13002) by @mablr
  • feat: alias cast erc20 transfer to cast erc20 send (#12990) by @onbjerg
  • feat(cast): add EIP-7594 support (#13058) by @mablr
  • feat(cast): add batch-send and batch-mktx commands for native call batching (#13973) by @stevencartavia
  • feat(cast): --replay-system-txes / --sys arg to cast run system txes (#12853) by @grandizzy
  • feat(cast): add --network flag to cast tx for network-specific raw encoding (#13745) by @mablr
  • feat(cast): block --raw network selection (#13754) by @mablr
  • fix(cast): batch-send handling by clearing to/value fields (#14250) by @mablr
  • chore(cast): remove redundant batch-mktx clearing (#14252) by @stevencartavia
  • fix(cast): resolve correct hardfork for historical tx execution (#14207) by @decofe
  • fix(cast): correct max_int boundary check for uint255 (#13568) by @zeroprooff
  • fix: accept 0x-prefixed value inputs (#14406) by @figtracer
  • refactor(cast): cleanup cast send (#14385) by @0xrusowsky

Tracing, inspection & interface tooling

--curl for reproducing requests, trace_transaction / trace_rawTransaction, --flatten for cast interface, persistent Etherscan source cache, query chunking for cast logs, plus --json parity across erc20 commands.

Tracing, inspection & interface tooling (11 PRs)

Reliability & RPC plumbing

Smaller robustness fixes for sender enumeration, threads handling, plasma verifier errors, and flaky-test cleanup.

Reliability & RPC plumbing (4 PRs)
  • fix(cast): handle errors in list_local_senders() (#12419) by @ragnar
  • fix(cast): treat threads=0 as logical cores (#12799) by @ANtutov
  • fix: add plasma verifier err msg (#12790) by @grandizzy
  • test(cast): mark flaky revert_reason_from and wildcard RPC-dependent tail (#13796) by @decofe
Generic-Network refactors (11 PRs)

Anvil

Features

New RPC endpoints (trace_replayBlockTransactions, eth_fillTransaction, eth_getStorageValues, debug_traceBlockBy{Hash,Number}), EIP-2935 / EIP-3860 / EIP-7825 support, multi-fork-URL round-robin load balancing, and new CLI flags for tx gas limits and pool sizing.

Anvil features (14 PRs)
  • feat(anvil): add eth_fillTransaction support (#12595) by @mablr
  • feat(anvil): extend Content-Type support on Beacon API (#12611) by @mablr
  • feat(anvil): add trace_replayBlockTransactions endpoint for block txs tracing (#13098) by @mablr
  • feat(anvil): cache block timestamp in mined receipts (#13311) by @thunggis
  • add EIP-3860 initcode size check in txpool validation (#13473) by @DanielGuupta
  • Add --enable-tx-gas-limit CLI flag for EIP-7825 support (#13307) by @DanielGuupta
  • add --max-transactions CLI flag (#13495) by @DanielGuupta
  • remove unimplemented anvil_enableTraces endpoint (#13499) by @DanielGuupta
  • notify subscribers for txs promoted after block mining (#13464) by @DanielGuupta
  • feat(anvil): add EIP-2935 blockhash history storage support (#13588) by @koko1123
  • feat(anvil): add eth_getStorageValues RPC method (#13971) by @stevencartavia
  • feat(anvil): populate Metadata client_semver (#14229) by @ndavd
  • feat(anvil): support multiple fork URLs with round-robin load balancing (#14280) by @decofe
  • feat(anvil): add debug_traceBlockByHash and debug_traceBlockByNumber (#14391) by @exp0nge
Anvil fixes (46 PRs)
  • fix(anvil): insufficient allowance → insufficient balance (#12855) by @anim001k
  • fix(anvil): propagate gas estimation errors (#12813) by @jxom
  • fix(anvil): resolve incorrect historical states dump behavior (#12732) by @w1tcher
  • fix(anvil): use B256 instead of TxHash for block hash parameters (#12961) by @pivasdesant
  • fix(anvil): use suggested priority fee by default (#13092) by @tefyosL-sol
  • fix(anvil): clear stale block hashes from db cache during reorg (#13179) by @gakonst
  • fix(anvil): update genesis_hash when loading state with block 0 (#13197) by @mattsse
  • fix(anvil): set contractAddress in receipt for reverted contract creation (#13195) by @mattsse
  • fix(anvil): preserve withdrawals in SerializableBlock for state dump/load (#13227) by @echowandere
  • fix(anvil): use consistent chain_id fallback for blob params (#13241) by @echowandere
  • fix(anvil): return error instead of empty vec for out-of-range log queries (#13251) by @echowandere
  • fix(anvil): return error when querying future block number in with_database_at (#13267) by @thunggis
  • fix(anvil): use consistent chain_id fallback in fork setup (#13276) by @tefyosL-sol
  • fix(anvil): handle disk cache write failures in state eviction (#13332) by @thunggis
  • return error instead of empty array when filter not found (#13415) by @DanielGuupta
  • fix(anvil): variable shadowing bug in ReadyTransactions::remove_with_markers (#13436) by @letmehateu
  • prevent balance overflow in anvil_addBalance (#13457) by @DanielGuupta
  • fix(anvil): correct blob_gas_used_ratio calculation in fee history (#13491) by @letmehateu
  • fix(anvil): prevent panic in utc_from_secs for out-of-range timestamps (#13520) by @stevencartavia
  • fix(anvil): preserve original error in update_url (#13531) by @gutonosa
  • fix(anvil): use EIP-2718 encoding for OP enveloped_tx (#13537) by @gutonosa
  • fix(anvil): clear tx pool on anvil_reset (#13544) by @FredPhilipy
  • fix: clarify Anvil storage caching builder naming (#13546) by @anim001k
  • fix(anvil): use individual tx gas instead of cumulative in fee history (#13552) by @zeroprooff
  • fix(test): add missing rpc_before assertion in deep reorg blockhash test (#13586) by @FredPhilipy
  • chore(test): harden anvil API assertions (#13615) by @MarkFizz77
  • fix(anvil): validate blob count against per-tx limit, not per-block (#13626) by @gutonosa
  • fix(script): add missing #[serde(default)] for backward compat in TransactionWithMetadata (#13684) by @gutonosa
  • fix(anvil): initialize fork blob params even with explicit base fee (#13717) by @edgarr1986
  • fix(anvil): swap param order in get_next_block_blob_excess_gas to match callers (#13740) by @gutonosa
  • fix(anvil): flaky test_trace_filter() (#13764) by @figtracer
  • fix(anvil): reject invalid versioned_hashes in beacon blobs endpoint (#13787) by @FredPhilipy
  • fix(anvil): downgrade transaction validation failure logs from warn to debug (#13911) by @FredPhilipy
  • fix(anvil): downgrade "Already imported" log from warn to debug (#13970) by @FredPhilipy
  • fix(anvil): skip missing transactions in mined_parity_trace_block (#13977) by @FredPhilipy
  • fix(anvil): clean up InMemoryBlockStates on rollback (#13978) by @FredPhilipy
  • fix(anvil): handle BlockTransactions::Uncle without panic (#14135) by @strmfos
  • fix(anvil): use <= for pending pool replacement underprice check (#14254) by @cuiweixie
  • fix(anvil): auto-detect seconds vs milliseconds in evm_setTime (#14292) by @decofe
  • fix(anvil): return error for eth_getLogs with unknown blockHash instead of empty (#14371) by @spalladino
  • fix(anvil): refetch full fork blocks with missing tx cache (#14384) by @solanaXpeter
  • fix(anvil-server): distinguish empty and notification batches (#14405) by @solanaXpeter
  • fix(anvil): separate queued txs in txpool RPC responses (#14425) by @mk0walsk
  • fix(anvil): fix flaky test_increase_time_by_zero test (#14430) by @figtracer
Anvil cleanup / refactors (23 PRs)
  • chore(anvil): clean-up impersonated_signature logic (#13187) by @mablr
  • chore(anvil): clean up remaining dead code after Odyssey sunset (#13211) by @mablr
  • chore(anvil): deprecate getBlobSidecars Beacon API endpoint (#12568) by @mablr
  • chore(anvil): remove anvil_getBlobSidecarsByBlockId endpoint (#13022) by @mablr
  • chore(anvil): remove unnecessary clone operations (#13330) by @MarkFizz77
  • chore(anvil,cast): remove unnecessary populate_blob_hashes() (#13308) by @mablr
  • refactor(anvil): using is_ok since it's more robust (#13377) by @cuiweixie
  • chore(anvil): clean-up impersonated tx building (#13637) by @mablr
  • chore(anvil): remove unused alloy-eip5792 dev-dependency (#13640) by @strmfos
  • refactor(anvil): remove redundant tx lookup in transaction_by_sender_and_nonce (#13638) by @Aboudjem
  • chore(anvil): simplify evm tests by removing useless Env wrapper (#13750) by @mablr
  • refactor(anvil): extract transaction_at_block_index in fork (#14271) by @stevencartavia
  • refactor(anvil): extract build_block_info helper (#14251) by @stevencartavia
  • refactor(anvil): consolidate duplicate BlockEnv construction (#13729) by @figtracer
  • refactor(anvil): deduplicate executor pipeline via inline run! macro (#14168) by @stevencartavia
  • refactor(anvil): extract unpack_execution_result helper (#14181) by @stevencartavia
  • refactor(anvil): extract inject_precompiles (#13956) by @figtracer
  • refactor(anvil): extract build_mining_inspector (#13961) by @figtracer
  • refactor(anvil): extract block_env_from_header utility (#13838) by @figtracer
  • refactor(anvil): extract execute_pool_transactions (#13940) by @figtracer
  • refactor(anvil): extract rehash helper for transaction hash replacement (#14151) by @stevencartavia
  • refactor(anvil): encapsulate per-tx inspector lifecycle in finish_transaction (#13932) by @figtracer
  • refactor(anvil): remove duplicated FeeDetails match arm (#14130) by @stevencartavia

Chisel

Stability fixes for invalid pc/memory access and uninitialized variable handling. Realtime console.log is shared with forge (#13321) — see the Forge section.

Chisel changes (2 PRs)

Forge Lint

Features

These catch incorrect ERC20/ERC721 interface implementations, timestamp-dependent logic, and custom-error usage issues. Also includes lower default verbosity, mixedCase exception tweaks, and broader visitor coverage.

Forge Lint features (8 PRs)
  • feat(forge-lint): add custom errors rule (#13126) by @milosdjurica
  • feat(lint): reduce default verbosity (#12901) by @DaniPopes
  • feat(lint): add common uppercase abbreviations to mixedCase exceptions (#13305) by @Himess
  • feat(lint): refactor LinterConfig and add 3 new linting rules (#12581) by @milosdjurica
  • feat(lint): add missing visit methods to EarlyLintVisitor (#13454) by @hawkadrian
  • feat(lint): add incorrect ERC721 interface lint (#14412) by @figtracer
  • feat(lint): add incorrect ERC20 interface lint (#14428) by @figtracer
  • feat(lint): add block-timestamp lint (#14431) by @stevencartavia

Fixes

Exit-code semantics for compilation warnings, unreachable macro cleanup, and missing late-visitor methods.

Forge Lint fixes (3 PRs)
  • fix(forge-lint): ignore compilation warnings in exit code (#13138) by @0xrusowsky
  • fix(lint): remove unreachable macro arm in declare_forge_lint (#13452) by @aso20455
  • fix(lint): add missing visit methods to LateLintVisitor (#14276) by @solanaXpeter

Forge Fmt

Features

A new namespace_import_style config and generic pretty-printing across blocks, transactions, receipts, OP envelopes, and Tempo receipts.

Forge Fmt features (5 PRs)
  • feat(fmt): add namespace_import_style config (#13108) by @quangloc99
  • feat(fmt): pretty printing for generic block/transaction responses (#13497) by @mablr
  • feat(common): generic TransactionReceiptWithRevertReason + pretty printing (#13503) by @mablr
  • feat(common): add pretty-printing for TempoTransactionReceipt (#13594) by @mablr
  • feat(fmt): OpTxEnvelope/Transaction pretty printing (#13734) by @mablr

Fixes

Indentation correctness for chained struct calls, empty contracts, named-args calls, and multi-statement control blocks; plus total_difficulty and Tempo pretty-print fixes.

Forge Fmt fixes (9 PRs)
  • fix(forge fmt): fix incorrect indentation for chained struct calls (#13163) by @gakonst
  • fix(fmt): keep struct field access on same line after named args call (#13166) by @gakonst
  • fix(fmt): correct indentation for closing brace in empty contracts with comments (#13319) by @Himess
  • fix(fmt): don't inline while/for/if blocks with multiple statements (#13566) by @MarkFizz77
  • fix(fmt): correct total_difficulty attribute name (#13578) by @eeemmmmmm
  • fix(fmt): swap valid_before/valid_after in TempoTransaction pretty print (#13910) by @dizer-ti
  • fix(fmt): prefer header total_difficulty for totalDifficulty (#13919) by @edgarr1986
  • refactor(fmt): add tempo pretty printing + cleanup/dedup (#13631) by @mablr
  • refactor(fmt): extract pretty_receipt helper (#14191) by @figtracer

Verification

Features

Auto-recompile on forge verify-bytecode, custom verifier URLs for unknown Etherscan chains, and clearer Etherscan-key error messages.

Verify features (3 PRs)
  • feat: forge verify-bytecode automatically recompiles upon running (#12651) by @Jds-23
  • Allow verifier-url for unknown Etherscan chains (#13079) by @mayanksharma-eth
  • feat(verify): clearer error when ETHERSCAN_API_KEY selects Etherscan (#14383) by @o-az
Verify fixes (13 PRs)
  • fix(verify): handle lack of trailing slash in verifier url (#12806) by @onbjerg
  • fix(verify): improve error message for CREATE2 deployment failures in verify-bytecode (#13176) by @grandizzy
  • fix(verify): improve error message for unsupported chain in Etherscan verifier (#12685) by @DeVikingMark
  • fix(verify): mismatch between strip_prefix and strip_suffix (#12563) by @Bashmunta
  • fix(verify): support chains with custom Sourcify-compatible APIs (#13175) by @mattsse
  • fix(verify): respect user-configured Etherscan URL over chain defaults (#13275) by @tefyosL-sol
  • fix(verify): correct Sourcify API URL construction for custom chains (#13360) by @marukai67
  • fix(verify): remove unused functions from VerificationContext (#13481) by @Forostovec
  • fix(script): actually skip Vyper contract verification (#13484) by @eeemmmmmm
  • fix / refactor(verify): dedupe standard JSON input logic + avoid unnecessary work for Vyper branch (#13549) by @eeemmmmmm
  • refactor(verify): dedupe Vyper standard JSON input logic (#13743) by @eeemmmmmm
  • fix(config): respect user-configured Etherscan URL over chain defaults (#13239) by @zerosnacks
  • fix(config): respect custom Etherscan URL in cast/forge commands (#14319) by @FredPhilipy

Coverage

Coverage output is now produced even when tests fail, BRDA hit counts match LCOV expectations, and stack-too-deep warnings link to the troubleshooting guide.

Coverage changes (3 PRs)
  • fix(coverage): write coverage file even when tests fail (#12717) by @0xferrous
  • fix(coverage): correct BRDA hit values for LCOV consistency (#13151) by @gakonst
  • docs(coverage): link to stack-too-deep guide in warnings (#13240) by @gakonst

Traces & Debugger

Features

A new -d / --depth trace flag (analogous to tree) and the debugger now shows actual gas usage alongside refunds.

Traces & Debugger features (2 PRs)
  • feat(traces): add -d / --depth flag for verbose traces, like tree (#12643) by @tskoyo
  • feat(debugger): display actual gas usage alongside refund counter (#13271) by @Philogy

Fixes

Decoder cache hygiene, verbosity unification, safer Sourcify parsing, panic guards on invalid source spans, and improved expectRevert formatting.

Traces & Debugger fixes (7 PRs)
  • fix(traces): check HTTP status before JSON parsing in Sourcify fetcher (#13446) by @marukai67
  • fix(traces): filter empty string labels (#13601) by @onbjerg
  • fix(traces): clear non_fallback_contracts in decoder reset (#13671) by @gutonosa
  • fix(traces): fix verbosity trace mode and unify verbosity handling (#13859) by @decofe
  • fix(traces): decode expectRevert payload before revert formatting (#13981) by @ArshLabs
  • fix(traces): don't persist unknown signatures to disk cache (#14172) by @skyc1e
  • fix(traces): avoid panic on invalid internal source spans (#14273) by @mk0walsk

Wallets

Features

Browser-wallet flows extended to forge script / forge create, generic Network MultiWallet, new BrowserWalletOpts, and a --browser priority-fee patch.

Wallet features (6 PRs)
  • feat(forge): add browser wallet support for forge script (#12952) by @mablr
  • feat(primitives): introduce NetworkWallet<FoundryNetwork> impl for EthereumWallet (#13248) by @mablr
  • feat(wallets): introduce BrowserWalletOpts (#13602) by @mablr
  • feat(wallets): MultiWallet generic Network (#13648) by @mablr
  • feat: patch --browser priority fee (#13700) by @sakulstra
  • feat(forge): browser wallet support for create subcommand (#14394) by @mablr
Wallets fixes & refactors (15 PRs)
  • fix(primitives): track both 4844/7594 sidecars presence in FoundryTransactionRequest::build_typed_tx (#13218) by @mablr
  • chore(wallets): remove NetworkWallet<FoundryNetwork> impl for WalletSigner (#13343) by @mablr
  • fix(wallets): use turnkey_unsupported() instead of hardcoded error (#13535) by @zeroprooff
  • refactor(wallets): browser wallet generic Network (#13550) by @mablr
  • refactor(wallets): extract Browser from WalletSigner (#13613) by @mablr
  • refactor(script): extract BrowserSigner from MultiWallet (#13839) by @mablr
  • fix(wallets): browser wallet CLI help heading formatting (#13876) by @mablr
  • fix(deps): bump to Foundry browser wallet version 0.2.0 (#13890) by @zerosnacks
  • chore(wallets): move wallets crate to foundry-core (#14348) by @mablr
  • chore: bump foundry-wallets dep (#14409) by @mablr
  • chore: pin to foundry-wallets release (#14429) by @zerosnacks
  • fix(wallets): add gas limit margin to handle WebAuthn/P256 signing (#14416) by @mablr
  • fix(common): enable foundry-wallets browser/tempo features (#14421) by @mablr
  • refactor(common): make ProviderBuilder generic over Network (#13250) by @mablr
  • feat(common): introduce generic ProviderBuilder::from_config method (#13268) by @mablr

Script & Broadcast

Features

The script pipeline (ScriptSequence, ScriptResult, ScriptConfig, BundledState, ScriptTransactionBuilder, …) is now fully Network-generic, enabling Tempo and Optimism scripting through the same code paths as Ethereum.

Script & Broadcast features (10 PRs)
  • feat(script): generic estimate_gas + FoundryTransactionBuilder::reset_gas_limit method (#13706) by @mablr
  • feat(script): generic TxStatus receipt type (#13770) by @mablr
  • feat(script): generic TransactionWithMetadata + generic pretty printing for TransactionMaybeSigned (#13795) by @mablr
  • feat(script): Network-generic ScriptSequence<N> (#13803) by @mablr
  • feat(script): Network-generic ScriptSequenceKind<N> (#13809) by @mablr
  • feat(script): generic BundledState impl (#13825) by @mablr
  • feat(script): generic ScriptTransactionBuilder (#13830) by @mablr
  • feat(script): ScriptResult, ProvidersManager and state structs Network-generic (#14104) by @mablr
  • feat(script): ScriptConfig generic Network, FoundryEvmFactory (#14115) by @mablr
  • feat(script): forge script generic over FoundryEvmNetwork (#14125) by @mablr

Fixes

Sender resolution improvements (--turnkey msg.sender, single-keystore auto-set) and preservation of exit reason on failed revert decoding.

Script & Broadcast fixes (3 PRs)
  • fix(script): set msg.sender from TURNKEY_ADDRESS when using --turnkey (#13149) by @gakonst
  • fix(script): auto-set sender from single keystore (#13525) by @MarkFizz77
  • fix(script): preserve exit reason in failed revert decode (#13985) by @ArshLabs
Script cleanup / refactors (10 PRs)
  • refactor(script-sequence): extract duplicated filter logic (#13500) by @aso20455
  • chore(broadcast): cleanup avg gas price calculation (#13509) by @mablr
  • refactor: use fs::write_pretty_json_file in MultiChainSequence::save (#13510) by @prestoalvarez
  • chore: use fs::write_pretty_json_file in ScriptSequence::save (#13562) by @MarkFizz77
  • chore(script): remove EitherSigner abstraction (#13649) by @mablr
  • chore(script): use rpc trait methods instead of direct field accesses (#13693) by @mablr
  • chore(script): eliminate remaining get_http_provider / try_get_http_provider usage (#13702) by @figtracer
  • chore(script): idiomatic BroadcastReader::into_tx_receipts (#13771) by @mablr
  • refactor(script-sequence): rename misleading opcode field to call_kind (#13907) by @anim001k
  • refactor(script): streamline EvmOpts resolution (#14217) by @mablr
  • chore(script): eliminate AnyNetwork misuse (#13686) by @mablr

Config

Features

foundry.toml gains a network key and per-network hardfork selection, plus ignored_error_codes_from and curl mode as a config key.

Config features (4 PRs)
  • chore(config): curl mode as config key (#13260) by @mablr
  • feat: add ignored_error_codes_from config option (#13841) by @ndavd
  • feat(config): support network-specific hardfork in foundry.toml (#14312) by @0xrusowsky
  • feat(config): network key in foundry.toml (#14337) by @mablr
Config fixes (14 PRs)
  • fix(config): error on unknown profile with fallback for nested libs (#13153) by @gakonst
  • fix(config): preserve hyphenated profile names (#13172) by @gakonst
  • fix(config): print error when accessing invalid Etherscan config (#9951) by @andelf
  • fix(config): reject bare versions in compilation restrictions (#12955) by @tefyosL-sol
  • fix(config): warn on unknown keys in all config sections (#13154) by @grandizzy
  • fix(config): handle decimal string in U256 deserialization (#13284) by @thunggis
  • fix(config): handle vyper section with skip_serializing_if fields (#13318) by @gakonst
  • fix: broken config test, currently blocking CI (#13340) by @zerosnacks
  • fix: avoid setting FOUNDRY_PROFILE: ci in template workflows, profile does not exist (#13339) by @zerosnacks
  • chore(config): remove unused enum accessor methods (#13414) by @MozirDmitriy
  • fix(config): normalize deny_warnings from env vars (#13434) by @aso20455
  • add missing doc section keys to config validation (#13447) by @DanielGuupta
  • fix(config): add symmetric serialization for FuzzDictionaryConfig usize fields (#13723) by @gutonosa
  • fix(config): validate optimizer_runs does not exceed u32::MAX (#14354) by @FredPhilipy
  • fix(config): surface cleanup failures as warnings instead of hard errors (#14379) by @decofe

CLI

Markdown docs generation, log routing to stderr, --no-proxy for sandboxed macOS, common RPC opts extraction, and a handful of error-handling and EtherscanOpts polishing.

CLI changes (11 PRs)
  • fix(cli): redirect tracing logs to stderr (#13167) by @MarkFizz77
  • feat(cli): cli markdown docs (#13291) by @onbjerg
  • fix: use shared display_chain helper in CLI error handler (#13314) by @prestoalvarez
  • fix: correct dead condition in command error formatting (#13427) by @letmehateu
  • fix(cli): add --no-proxy to disable reqwest proxying to prevent crash on macOS in sandboxed environments (#13155) by @gakonst
  • refactor(cli): introduce RpcCommonOpts (#14224) by @figtracer
  • fix(cli): restore short flag for --rpc-url (#14246) by @mablr
  • fix(cli): always insert numeric chain_id in EtherscanOpts::dict() (#14335) by @decofe
  • refactor(cli): unify NetworkVariant with NetworkConfigs (#14426) by @mablr
  • chore(cli): make Git impl more robust (#14452)
  • chore(cli): remove unused TryFrom<Result<RawCallResult>> on TraceResult (#14122) by @figtracer

Internals: generic Network / EVM refactor

Mostly relevant to contributors and downstream integrators. The largest internal refactor since the revm/alloy migration: the entire foundry-evm, cheatcodes, script, cast, and anvil stacks were genericized over Network, Spec, Block, and EvmFactory, enabling a single Foundry binary to drive Ethereum, Optimism, and Tempo through the same code paths.

This work spans ~260 PRs, primarily by @mablr, @figtracer, and @stevencartavia, broken down roughly as:

  • foundry-evm core: ~130 PRs (Backend, Executor, DatabaseExt, InspectorStack, FoundryEvmFactory, FoundryContextExt, NestedEvm, etc. all generic; Env abstraction removed; EthFoundryEvmFactory and OpEvmNetwork introduced)
  • Cheatcodes generic refactor: ~30 PRs (Cheatcodes, CheatcodesExecutor, BroadcastableTransaction made Network/Evm/Spec/Block-generic)
  • Anvil generic refactor: ~50 PRs (Backend, EthApi, Pool, Storage, Signer, BlockExecutor, fee history, beacon handlers, etc. all generic over Network)
  • Additional supporting changes: ~50 PRs (trait-method usage instead of direct field access, dead-code removal, revm v34→v38 bump, alloy 2.0.x bumps)

Full PR list: v1.5.1...v1.7.0 changelog.


Distribution

Smaller distribution work covers Tempo support in foundryup, sha256sum sanitation, and npm OIDC release setup.

Distribution changes (4 PRs)
  • feat(foundryup): add Tempo support (#12775)
  • fix(foundryup): strip leading backslash from sha256sum (#12827) by @DaniPopes
  • fix(npm): add release environment for OIDC trusted publishing (#14411) by @grandizzy
  • fix(npm): remove deprecated baseUrl compiler option (#14413) by @zerosnacks

Docs

Major refresh of the foundry.toml reference (fuzz/invariant options, full config schema), README slimming, lint rule documentation, plus Anvil and command-help corrections.

Docs changes (10 PRs)
  • docs(config): complete fuzz and invariant sections with 20+ missing options (#12789) by @aso20455
  • docs(lint): add missing lint rules to README (#12758) by @dizer-ti
  • docs: clean up config docs (#12296) by @onbjerg
  • docs(anvil): clarify --cache-path is for persisted states, not fork RPC cache (#13194) by @mattsse
  • docs(config): complete foundry.toml configuration reference (#13198) by @zerosnacks
  • docs: slim README (#13393) by @onbjerg
  • fix: correct path format in get_paths doc comment (#13388) by @gap-editor
  • fix: swap incorrect doc comments for archive RPC URL functions in rpc.rs (#13480) by @gap-editor
  • fix: correct flag name in error message from --compiler-version (#13539) by @gap-editor
  • chore: add id attributes to issue templates (#13864) by @decofe

Full Changelog

v1.5.1...v1.7.0

Don't miss a new foundry release

NewReleases is sending notifications on new releases.