Releases: foundry-rs/foundry
Nightly (2025-10-10)
Other
- chore(cast): remove unclear
pretty
arg forprint_storage
(#11976) by @mablr - refactor(anvil): introduce get_block_with_hash and convert_block_with_hash (#11939) by @silvekkk
- feat(forge): enhance gas snapshot diff with configurable sorting and improved output (#11974) by @silvekkk
- feat(lint): emit suggestions for
named_struct_fields
lint (#11982) by @mablr - fix(doc): reuse solar sema compiler (#11980) by @grandizzy
- fix(
forge
): apply correct permission scoping in workflow templates (#11986) by @zerosnacks - fix(chisel): disable compiler optimizations (#11990) by @DaniPopes
- refactor(chisel): remove gas limit binary search (#11989) by @DaniPopes
- feat(cheats): preserve struct order when parsing JSON objects (#11612) by @0xrusowsky
- chore(docs): require contributors to disclose their use of AI (#11988) by @zerosnacks
- chore(deps): bump softprops/action-gh-release from 2.3.3 to 2.3.4 (#11999) by @dependabot[bot]
- chore(deps): bump taiki-e/install-action from 2.62.13 to 2.62.21 (#11998) by @dependabot[bot]
- chore(deps): bump crate-ci/typos from 1.36.3 to 1.38.0 (#11997) by @dependabot[bot]
- fix(
ci
):create-an-issue
in release workflow is pinned to incorrect hash (#12004) by @zerosnacks - fix(cast): clean up SenderKind enum and remove redundant checks (#12003) by @strmfos
- chore(
ci
): integrate CodeQL into regulartest.yml
workflow and mark as requirement for ci-success (#12007) by @zerosnacks - fix(forge): dynamic test linking should follow pranks (#12005) by @grandizzy
- ci: cache testdata project (#12009) by @DaniPopes
- fix(fmt): ensure leading blank lines are always removed (#12002) by @0xrusowsky
- feat(forge): install soldeer dependencies (#11994) by @wellnana
- ci: add test name to cache key (#12010) by @DaniPopes
- chore(test): add hints after test failed (#11995) by @silvekkk
- chore(tests): bump forge-std version (#12017) by @github-actions[bot]
- fix: improve error handling in available_senders with logging and deduplication (#12011) by @CreeptoGengar
- ci: use gha runner for macos arm releases (#12021) by @DaniPopes
- fix: replace Some(URL) with URL during installation output (#12024) by @milosdjurica
- docs(networks): fix doc heading (#12028) by @onbjerg
- chore: make network flags exclude each other (#12027) by @onbjerg
- fix(fmt): ensure commasep breaks with final trailing cmnt (#12031) by @0xrusowsky
- refactor: avoid cloning broadcast transactions in reader (#12030) by @reject-i
- deps: bump deps (#12033) by @onbjerg
- chore: rm
NodeConfig::with_optimism
(#12035) by @onbjerg - chore: rm
NodeConfig::with_celo
(#12034) by @onbjerg - refactor: make
NetworkConfig
fields private (#12037) by @onbjerg - fix(build): use output graph/artifacts rather than sources (#12019) by @0xrusowsky
- feat(cheatcodes): add setEvmVersion / getEvmVersion (#12014) by @grandizzy
- chore: rm extra
--celo
arg (#12038) by @onbjerg
Full Changelog:
v1.4.0
Foundry v1.4.0
This release brings up to 10.52% better performance for forge coverage
and up to 11.41% for fuzzed tests, a new formatter built on Solar
, enhanced handling of multiple chain configurations and deployments, and an improved testing and debugging experience with backtraces and custom network precompiles. Foundry v1.4 is Osaka-ready, comes with new Anvil endpoints, deprecates the Etherscan v1 API, and publishes forge
as an npm package.
Performance Improvements
Foundry v1.4 leverages Solar API to analyze contracts and identify coverage items (#11565), and updates coverage implementation to align with that of forge test (#11801). It also completely removes the proptest runner from fuzzed tests (#11061), resulting in up to a 10.52% performance improvement for forge coverage
and up to an 11.41% performance improvement in fuzzed tests execution speed on the same benchmarked projects as previous versions.
Forge Coverage
Repository | v1.3.6 | v1.4.0 | X Times Faster | % Improvement |
---|---|---|---|---|
ithacaxyz-account | 14.91 s | 13.34 s | x1.12 | 10.52% |
Uniswap-v4-core | 1m 34.8s | 1m 30.3s | x1.05 | 4.74% |
sparkdotfi-spark-psm | 3m 49.3s | 3m 40.2s | x1.04 | 3.97% |
Forge Fuzz tests
Repository | v1.3.6 | v1.4.0 | X Times Faster | % Improvement |
---|---|---|---|---|
ithacaxyz-account | 3.18 s | 3.02 s | x1.05 | 5.03% |
solady | 2.39 s | 2.24 s | x1.07 | 6.28% |
Uniswap-v4-core | 6.84 s | 6.20 s | x1.10 | 9.36% |
sparkdotfi-spark-psm | 3.07 s | 2.72 s | x1.13 | 11.41% |
Enhanced configuration
Configuration inheritance
Foundry v1.4 supports configuration inheritance through the extends
field in foundry.toml, making it easier to maintain a shared base configuration across multiple projects or profiles (#11284). This enables cleaner setups and reduces duplication by inheriting from a base configuration file:
[profile.default]
extends = "./base-config.toml"
src = "src"
test = "test"
For more details please refer to configuration inheritance docs.
Multi-chain configuration
The newly added forge-std config helper
, built on top of Foundry v1.4 cheatcodes, provides a streamlined way to manage configuration for multi-chain environments in tests and scripts. It automatically loads and parses TOML configuration files, creates forks for specified chains, and provides type-safe access to configuration variables.
Loading configuration and creating forks for each chain specified in the config can be done by calling _loadConfigAndForks
function, which also supports updating configurations on the fly.
function _loadConfigAndForks(string memory filePath, bool writeToFile) internal
Scripting workflows, in particular, gain significant advantages from the features of the Config
contract. Please refer to config helper docs and scripting with config docs for more details.
For a complex, production-ready example, please see Ithaca's account deploy script and configuration.
We're continuously working to improve multi-chain support, please share your feedback on the current approach and suggest new features or enhancements in #11449.
Enhanced testing UX
Foundry v1.4 introduces backtraces (#11547) that include the exact line number in the Solidity source code corresponding to the compiled bytecode where the error or revert occurred.
[FAIL: ERC20: transfer amount exceeds allowance] testTransferFromWithoutApproval() (gas: 28771)
Traces:
[28771] ForkBacktraceTest::testTransferFromWithoutApproval()
├─ [22928] ForkedERC20Wrapper::transferFromWithoutApproval(0x55FE002aefF02F77364de339a1292923A15844B8, 0x000000000000000000000000000000000000dEaD, 1000000 [1e6])
│ ├─ [18884] FiatTokenProxy::fallback(0x55FE002aefF02F77364de339a1292923A15844B8, 0x000000000000000000000000000000000000dEaD, 1000000 [1e6])
│ │ ├─ [11573] FiatTokenV2_2::transferFrom(0x55FE002aefF02F77364de339a1292923A15844B8, 0x000000000000000000000000000000000000dEaD, 1000000 [1e6]) [delegatecall]
│ │ │ └─ ← [Revert] ERC20: transfer amount exceeds allowance
│ │ └─ ← [Revert] ERC20: transfer amount exceeds allowance
│ └─ ← [Revert] ERC20: transfer amount exceeds allowance
└─ ← [Revert] ERC20: transfer amount exceeds allowance
Backtrace:
at FiatTokenV2_2.transferFrom
at FiatTokenProxy.fallback
at ForkedERC20Wrapper.transferFromWithoutApproval (src/ForkedERC20Wrapper.sol:35:24)
at ForkBacktraceTest.testTransferFromWithoutApproval (test/ForkBacktrace.t.sol:28:96)
Forge Formatter
Foundry v1.4 ships with a new Solidity formatter (forge fmt
) built on top of Solar
and replacing the previous Solang-based implementation and its limitations (#10907). This change enables faster support for new Solidity language features and allows us to address long-standing formatting bugs that were previously blocked by Solang dependency.
We've aimed for feature parity with the legacy formatter, but there may still be some edge cases that aren’t fully covered yet, so please be aware and report any issues you encounter.
Coverage-Guided Fuzzing
In addition to extending coverage-guided fuzzing and time-based campaigns to stateless fuzz tests, this version introduces ABI mutations (such as bit-flip, interesting word, increment/decrement, and Gaussian noise mutators) to enhance test coverage and help uncover new execution paths by generating diverse and edge-case inputs (#11061).
Custom Network Precompiles
Beginning with the transfer precompile contributed by the Celo team for Anvil
(#11209), we have extended support to forge
and cast
components, making it simpler for external contributions. If you want to contribute support for a custom network, please check out documentation and Celo example within foundry-evm-networks
crate.
Anvil Improvements
With this release, Anvil adds support for JS and prestate tracers, and print traces and logs when using --print-traces
switch, enabling more powerful and customizable debugging capabilities. Additionally, several new RPC endpoints have been introduced:
eth_config
: exposes Anvil's current configuration, such as chain ID, fork settings, and feature flags (#11591).anvil_impersonateSignature
: allows simulating transactions as if they were signed by a given address, useful for testing signature-based flows (#11195).anvil_getBlobSidecarsByBlockId
: returns the blobs for a given transaction hash (#11828).
Other
forge lint
improvements: mixed case exceptions lint, ERC20 transfer check- improve state diffs cheatcodes by adding nonce and balance diffs and by using storage layout to decode values
- addition of native
vm.bound
cheatcode that enables log-uniform sampling - updated Sourcify integration to support API v2
Performance improvements
- feat(forge): Remove proptest runner from fuzzed tests (#11061) by @grandizzy
- perf: box inspectors in InspectorStack (#11100) by @DaniPopes
- perf: use fxhash for coverage hitmap (#11155) by @DaniPopes
- perf: parallelize remappings provider (#11536) by @DaniPopes
- perf: avoid project output clone (#11707) by @DaniPopes
- perf: lazy cheatcodes SignaturesIdentifier, save only if online (#11708) by @DaniPopes
- perf: link in parallel (#11710) by @DaniPopes
- perf(coverage): reserve some space for hits early (#11793) by @DaniPopes
- fix(coverage): sync implementation with forge test (#11801) by @DaniPopes
Anvil Features
- feat(anvil): improve historic state access (#10420) by @naijauser
- feat(anvil): added js tracer (#11052) by @Soubhik-10
- feat(anvil): add option to disable pool balance checks in EVM configuration (#11242) by @mablr
- feat(anvil): added
anvil_impersonateSignature
(#11195) by @Soubhik-10 - feat: add missing eip7702 support (#11490) by @ongyimeng
- feat(anvil): support celo transfer precompile (#11491) by @mattsse
- feat(
anvil
): addeth_config
rpc endpoint (#11591) by @zerosnacks - feat(anvil): calculate max_transactions based on block gas capacity (#11670) by @forkfury
- feat(anvil): add PreStateTracer support for debug_traceTransaction (#11709) by @w1tcher
- feat: print traces and logs in calltracer (#11722) by @mattsse
- feat(anvil): add support for
anvil_getBlobSidecarsByBlockId
(#11828) by @mablr
Anvil Fixes
- fix(anvil): specialize eth_getAccountInfo in fork mode (#11634) by @mattsse
- fix: use existing functions for accountinfo (#11134) by @mattsse
- fix(
anvil
): unwrap panic ineth/backend/mem/mod.rs
(#11141) by @zerosnacks - fix(
anvil
): v1.2 state load compatibility (#11179) by @zerosnacks - fix(anvil): print traces for
eth_simulateV1
(#11253) by @klkvr - fix(anvil): deterministic block production (#11415) by @fubhy
- Fix: invalid tx input error in anvil component (#114...
Nightly (2025-10-09)
Other
- chore(cast): remove unclear
pretty
arg forprint_storage
(#11976) by @mablr - refactor(anvil): introduce get_block_with_hash and convert_block_with_hash (#11939) by @silvekkk
- feat(forge): enhance gas snapshot diff with configurable sorting and improved output (#11974) by @silvekkk
- feat(lint): emit suggestions for
named_struct_fields
lint (#11982) by @mablr - fix(doc): reuse solar sema compiler (#11980) by @grandizzy
- fix(
forge
): apply correct permission scoping in workflow templates (#11986) by @zerosnacks - fix(chisel): disable compiler optimizations (#11990) by @DaniPopes
- refactor(chisel): remove gas limit binary search (#11989) by @DaniPopes
- feat(cheats): preserve struct order when parsing JSON objects (#11612) by @0xrusowsky
- chore(docs): require contributors to disclose their use of AI (#11988) by @zerosnacks
- chore(deps): bump softprops/action-gh-release from 2.3.3 to 2.3.4 (#11999) by @dependabot[bot]
- chore(deps): bump taiki-e/install-action from 2.62.13 to 2.62.21 (#11998) by @dependabot[bot]
- chore(deps): bump crate-ci/typos from 1.36.3 to 1.38.0 (#11997) by @dependabot[bot]
- fix(
ci
):create-an-issue
in release workflow is pinned to incorrect hash (#12004) by @zerosnacks - fix(cast): clean up SenderKind enum and remove redundant checks (#12003) by @strmfos
- chore(
ci
): integrate CodeQL into regulartest.yml
workflow and mark as requirement for ci-success (#12007) by @zerosnacks - fix(forge): dynamic test linking should follow pranks (#12005) by @grandizzy
- ci: cache testdata project (#12009) by @DaniPopes
- fix(fmt): ensure leading blank lines are always removed (#12002) by @0xrusowsky
- feat(forge): install soldeer dependencies (#11994) by @wellnana
- ci: add test name to cache key (#12010) by @DaniPopes
- chore(test): add hints after test failed (#11995) by @silvekkk
- chore(tests): bump forge-std version (#12017) by @github-actions[bot]
- fix: improve error handling in available_senders with logging and deduplication (#12011) by @CreeptoGengar
- ci: use gha runner for macos arm releases (#12021) by @DaniPopes
- fix: replace Some(URL) with URL during installation output (#12024) by @milosdjurica
- docs(networks): fix doc heading (#12028) by @onbjerg
- chore: make network flags exclude each other (#12027) by @onbjerg
Full Changelog:
Nightly (2025-10-08)
Other
- chore(cast): remove unclear
pretty
arg forprint_storage
(#11976) by @mablr - refactor(anvil): introduce get_block_with_hash and convert_block_with_hash (#11939) by @silvekkk
- feat(forge): enhance gas snapshot diff with configurable sorting and improved output (#11974) by @silvekkk
- feat(lint): emit suggestions for
named_struct_fields
lint (#11982) by @mablr - fix(doc): reuse solar sema compiler (#11980) by @grandizzy
- fix(
forge
): apply correct permission scoping in workflow templates (#11986) by @zerosnacks - fix(chisel): disable compiler optimizations (#11990) by @DaniPopes
- refactor(chisel): remove gas limit binary search (#11989) by @DaniPopes
- feat(cheats): preserve struct order when parsing JSON objects (#11612) by @0xrusowsky
- chore(docs): require contributors to disclose their use of AI (#11988) by @zerosnacks
- chore(deps): bump softprops/action-gh-release from 2.3.3 to 2.3.4 (#11999) by @dependabot[bot]
- chore(deps): bump taiki-e/install-action from 2.62.13 to 2.62.21 (#11998) by @dependabot[bot]
- chore(deps): bump crate-ci/typos from 1.36.3 to 1.38.0 (#11997) by @dependabot[bot]
- fix(
ci
):create-an-issue
in release workflow is pinned to incorrect hash (#12004) by @zerosnacks - fix(cast): clean up SenderKind enum and remove redundant checks (#12003) by @strmfos
- chore(
ci
): integrate CodeQL into regulartest.yml
workflow and mark as requirement for ci-success (#12007) by @zerosnacks - fix(forge): dynamic test linking should follow pranks (#12005) by @grandizzy
- ci: cache testdata project (#12009) by @DaniPopes
- fix(fmt): ensure leading blank lines are always removed (#12002) by @0xrusowsky
- feat(forge): install soldeer dependencies (#11994) by @wellnana
- ci: add test name to cache key (#12010) by @DaniPopes
- chore(test): add hints after test failed (#11995) by @silvekkk
- chore(tests): bump forge-std version (#12017) by @github-actions[bot]
- fix: improve error handling in available_senders with logging and deduplication (#12011) by @CreeptoGengar
- ci: use gha runner for macos arm releases (#12021) by @DaniPopes
Full Changelog:
Nightly (2025-10-07)
Other
- chore(cast): remove unclear
pretty
arg forprint_storage
(#11976) by @mablr - refactor(anvil): introduce get_block_with_hash and convert_block_with_hash (#11939) by @silvekkk
- feat(forge): enhance gas snapshot diff with configurable sorting and improved output (#11974) by @silvekkk
- feat(lint): emit suggestions for
named_struct_fields
lint (#11982) by @mablr - fix(doc): reuse solar sema compiler (#11980) by @grandizzy
- fix(
forge
): apply correct permission scoping in workflow templates (#11986) by @zerosnacks - fix(chisel): disable compiler optimizations (#11990) by @DaniPopes
- refactor(chisel): remove gas limit binary search (#11989) by @DaniPopes
- feat(cheats): preserve struct order when parsing JSON objects (#11612) by @0xrusowsky
- chore(docs): require contributors to disclose their use of AI (#11988) by @zerosnacks
- chore(deps): bump softprops/action-gh-release from 2.3.3 to 2.3.4 (#11999) by @dependabot[bot]
- chore(deps): bump taiki-e/install-action from 2.62.13 to 2.62.21 (#11998) by @dependabot[bot]
- chore(deps): bump crate-ci/typos from 1.36.3 to 1.38.0 (#11997) by @dependabot[bot]
Full Changelog:
Nightly (2025-10-08)
Other
- chore(cast): remove unclear
pretty
arg forprint_storage
(#11976) by @mablr - refactor(anvil): introduce get_block_with_hash and convert_block_with_hash (#11939) by @silvekkk
- feat(forge): enhance gas snapshot diff with configurable sorting and improved output (#11974) by @silvekkk
- feat(lint): emit suggestions for
named_struct_fields
lint (#11982) by @mablr - fix(doc): reuse solar sema compiler (#11980) by @grandizzy
- fix(
forge
): apply correct permission scoping in workflow templates (#11986) by @zerosnacks - fix(chisel): disable compiler optimizations (#11990) by @DaniPopes
- refactor(chisel): remove gas limit binary search (#11989) by @DaniPopes
- feat(cheats): preserve struct order when parsing JSON objects (#11612) by @0xrusowsky
- chore(docs): require contributors to disclose their use of AI (#11988) by @zerosnacks
- chore(deps): bump softprops/action-gh-release from 2.3.3 to 2.3.4 (#11999) by @dependabot[bot]
- chore(deps): bump taiki-e/install-action from 2.62.13 to 2.62.21 (#11998) by @dependabot[bot]
- chore(deps): bump crate-ci/typos from 1.36.3 to 1.38.0 (#11997) by @dependabot[bot]
- fix(
ci
):create-an-issue
in release workflow is pinned to incorrect hash (#12004) by @zerosnacks - fix(cast): clean up SenderKind enum and remove redundant checks (#12003) by @strmfos
- chore(
ci
): integrate CodeQL into regulartest.yml
workflow and mark as requirement for ci-success (#12007) by @zerosnacks - fix(forge): dynamic test linking should follow pranks (#12005) by @grandizzy
- ci: cache testdata project (#12009) by @DaniPopes
- fix(fmt): ensure leading blank lines are always removed (#12002) by @0xrusowsky
- feat(forge): install soldeer dependencies (#11994) by @wellnana
- ci: add test name to cache key (#12010) by @DaniPopes
Full Changelog:
v1.4.0-rc3
Foundry v1.4.0
This release brings up to 10.52% better performance for forge coverage
and up to 11.41% for fuzzed tests, a new formatter built on Solar
, enhanced handling of multiple chain configurations and deployments, and an improved testing and debugging experience with backtraces and custom network precompiles. Foundry v1.4 is Osaka-ready, comes with new Anvil endpoints, deprecates the Etherscan v1 API, and publishes forge
as an npm package.
Performance Improvements
Foundry v1.4 leverages Solar API to analyze contracts and identify coverage items (#11565), and updates coverage implementation to align with that of forge test (#11801). It also completely removes the proptest runner from fuzzed tests (#11061), resulting in up to a 10.52% performance improvement for forge coverage
and up to an 11.41% performance improvement in fuzzed tests execution speed on the same benchmarked projects as previous versions.
Forge Coverage
Repository | v1.3.6 | v1.4.0 | X Times Faster | % Improvement |
---|---|---|---|---|
ithacaxyz-account | 14.91 s | 13.34 s | x1.12 | 10.52% |
Uniswap-v4-core | 1m 34.8s | 1m 30.3s | x1.05 | 4.74% |
sparkdotfi-spark-psm | 3m 49.3s | 3m 40.2s | x1.04 | 3.97% |
Forge Fuzz tests
Repository | v1.3.6 | v1.4.0 | X Times Faster | % Improvement |
---|---|---|---|---|
ithacaxyz-account | 3.18 s | 3.02 s | x1.05 | 5.03% |
solady | 2.39 s | 2.24 s | x1.07 | 6.28% |
Uniswap-v4-core | 6.84 s | 6.20 s | x1.10 | 9.36% |
sparkdotfi-spark-psm | 3.07 s | 2.72 s | x1.13 | 11.41% |
Enhanced configuration
Configuration inheritance
Foundry v1.4 supports configuration inheritance through the extends
field in foundry.toml, making it easier to maintain a shared base configuration across multiple projects or profiles (#11284). This enables cleaner setups and reduces duplication by inheriting from a base configuration file:
[profile.default]
extends = "./base-config.toml"
src = "src"
test = "test"
For more details please refer to configuration inheritance docs.
Multi-chain configuration
The newly added forge-std config helper
, built on top of Foundry v1.4 cheatcodes, provides a streamlined way to manage configuration for multi-chain environments in tests and scripts. It automatically loads and parses TOML configuration files, creates forks for specified chains, and provides type-safe access to configuration variables.
Loading configuration and creating forks for each chain specified in the config can be done by calling _loadConfigAndForks
function, which also supports updating configurations on the fly.
function _loadConfigAndForks(string memory filePath, bool writeToFile) internal
Scripting workflows, in particular, gain significant advantages from the features of the Config
contract. Please refer to config helper docs and scripting with config docs for more details.
For a complex, production-ready example, please see Ithaca's account deploy script and configuration.
We're continuously working to improve multi-chain support, please share your feedback on the current approach and suggest new features or enhancements in #11449.
Enhanced testing UX
Foundry v1.4 introduces backtraces (#11547) that include the exact line number in the Solidity source code corresponding to the compiled bytecode where the error or revert occurred.
[FAIL: ERC20: transfer amount exceeds allowance] testTransferFromWithoutApproval() (gas: 28771)
Traces:
[28771] ForkBacktraceTest::testTransferFromWithoutApproval()
├─ [22928] ForkedERC20Wrapper::transferFromWithoutApproval(0x55FE002aefF02F77364de339a1292923A15844B8, 0x000000000000000000000000000000000000dEaD, 1000000 [1e6])
│ ├─ [18884] FiatTokenProxy::fallback(0x55FE002aefF02F77364de339a1292923A15844B8, 0x000000000000000000000000000000000000dEaD, 1000000 [1e6])
│ │ ├─ [11573] FiatTokenV2_2::transferFrom(0x55FE002aefF02F77364de339a1292923A15844B8, 0x000000000000000000000000000000000000dEaD, 1000000 [1e6]) [delegatecall]
│ │ │ └─ ← [Revert] ERC20: transfer amount exceeds allowance
│ │ └─ ← [Revert] ERC20: transfer amount exceeds allowance
│ └─ ← [Revert] ERC20: transfer amount exceeds allowance
└─ ← [Revert] ERC20: transfer amount exceeds allowance
Backtrace:
at FiatTokenV2_2.transferFrom
at FiatTokenProxy.fallback
at ForkedERC20Wrapper.transferFromWithoutApproval (src/ForkedERC20Wrapper.sol:35:24)
at ForkBacktraceTest.testTransferFromWithoutApproval (test/ForkBacktrace.t.sol:28:96)
Forge Formatter
Foundry v1.4 ships with a new Solidity formatter (forge fmt
) built on top of Solar
and replacing the previous Solang-based implementation and its limitations (#10907). This change enables faster support for new Solidity language features and allows us to address long-standing formatting bugs that were previously blocked by Solang dependency.
We've aimed for feature parity with the legacy formatter, but there may still be some edge cases that aren’t fully covered yet, so please be aware and report any issues you encounter.
Coverage-Guided Fuzzing
In addition to extending coverage-guided fuzzing and time-based campaigns to stateless fuzz tests, this version introduces ABI mutations (such as bit-flip, interesting word, increment/decrement, and Gaussian noise mutators) to enhance test coverage and help uncover new execution paths by generating diverse and edge-case inputs (#11061).
Custom Network Precompiles
Beginning with the transfer precompile contributed by the Celo team for Anvil
(#11209), we have extended support to forge
and cast
components, making it simpler for external contributions. If you want to contribute support for a custom network, please check out documentation and Celo example within foundry-evm-networks
crate.
Anvil Improvements
With this release, Anvil adds support for JS and prestate tracers, and print traces and logs when using --print-traces
switch, enabling more powerful and customizable debugging capabilities. Additionally, several new RPC endpoints have been introduced:
eth_config
: exposes Anvil's current configuration, such as chain ID, fork settings, and feature flags (#11591).anvil_impersonateSignature
: allows simulating transactions as if they were signed by a given address, useful for testing signature-based flows (#11195).anvil_getBlobSidecarsByBlockId
: returns the blobs for a given transaction hash (#11828).
Other
forge lint
improvements: mixed case exceptions lint, ERC20 transfer check- improve state diffs cheatcodes by adding nonce and balance diffs and by using storage layout to decode values
- addition of native
vm.bound
cheatcode that enables log-uniform sampling - updated Sourcify integration to support API v2
Performance improvements
- feat(forge): Remove proptest runner from fuzzed tests (#11061) by @grandizzy
- perf: box inspectors in InspectorStack (#11100) by @DaniPopes
- perf: use fxhash for coverage hitmap (#11155) by @DaniPopes
- perf: parallelize remappings provider (#11536) by @DaniPopes
- perf: avoid project output clone (#11707) by @DaniPopes
- perf: lazy cheatcodes SignaturesIdentifier, save only if online (#11708) by @DaniPopes
- perf: link in parallel (#11710) by @DaniPopes
- perf(coverage): reserve some space for hits early (#11793) by @DaniPopes
- fix(coverage): sync implementation with forge test (#11801) by @DaniPopes
Anvil Features
- feat(anvil): improve historic state access (#10420) by @naijauser
- feat(anvil): added js tracer (#11052) by @Soubhik-10
- feat(anvil): add option to disable pool balance checks in EVM configuration (#11242) by @mablr
- feat(anvil): added
anvil_impersonateSignature
(#11195) by @Soubhik-10 - feat: add missing eip7702 support (#11490) by @ongyimeng
- feat(anvil): support celo transfer precompile (#11491) by @mattsse
- feat(
anvil
): addeth_config
rpc endpoint (#11591) by @zerosnacks - feat(anvil): calculate max_transactions based on block gas capacity (#11670) by @forkfury
- feat(anvil): add PreStateTracer support for debug_traceTransaction (#11709) by @w1tcher
- feat: print traces and logs in calltracer (#11722) by @mattsse
- feat(anvil): add support for
anvil_getBlobSidecarsByBlockId
(#11828) by @mablr
Anvil Fixes
- fix(anvil): specialize eth_getAccountInfo in fork mode (#11634) by @mattsse
- fix: use existing functions for accountinfo (#11134) by @mattsse
- fix(
anvil
): unwrap panic ineth/backend/mem/mod.rs
(#11141) by @zerosnacks - fix(
anvil
): v1.2 state load compatibility (#11179) by @zerosnacks - fix(anvil): print traces for
eth_simulateV1
(#11253) by @klkvr - fix(anvil): deterministic block production (#11415) by @fubhy
- Fix: invalid tx input error in anvil component (#114...
Nightly (2025-10-05)
Nightly (2025-10-06)
Nightly
Other
- chore(cast): remove unclear
pretty
arg forprint_storage
(#11976) by @mablr - refactor(anvil): introduce get_block_with_hash and convert_block_with_hash (#11939) by @silvekkk
- feat(forge): enhance gas snapshot diff with configurable sorting and improved output (#11974) by @silvekkk
- feat(lint): emit suggestions for
named_struct_fields
lint (#11982) by @mablr - fix(doc): reuse solar sema compiler (#11980) by @grandizzy
- fix(
forge
): apply correct permission scoping in workflow templates (#11986) by @zerosnacks - fix(chisel): disable compiler optimizations (#11990) by @DaniPopes
- refactor(chisel): remove gas limit binary search (#11989) by @DaniPopes
- feat(cheats): preserve struct order when parsing JSON objects (#11612) by @0xrusowsky
- chore(docs): require contributors to disclose their use of AI (#11988) by @zerosnacks
- chore(deps): bump softprops/action-gh-release from 2.3.3 to 2.3.4 (#11999) by @dependabot[bot]
- chore(deps): bump taiki-e/install-action from 2.62.13 to 2.62.21 (#11998) by @dependabot[bot]
- chore(deps): bump crate-ci/typos from 1.36.3 to 1.38.0 (#11997) by @dependabot[bot]
- fix(
ci
):create-an-issue
in release workflow is pinned to incorrect hash (#12004) by @zerosnacks - fix(cast): clean up SenderKind enum and remove redundant checks (#12003) by @strmfos
- chore(
ci
): integrate CodeQL into regulartest.yml
workflow and mark as requirement for ci-success (#12007) by @zerosnacks - fix(forge): dynamic test linking should follow pranks (#12005) by @grandizzy
- ci: cache testdata project (#12009) by @DaniPopes
- fix(fmt): ensure leading blank lines are always removed (#12002) by @0xrusowsky
- feat(forge): install soldeer dependencies (#11994) by @wellnana
- ci: add test name to cache key (#12010) by @DaniPopes
- chore(test): add hints after test failed (#11995) by @silvekkk
- chore(tests): bump forge-std version (#12017) by @github-actions[bot]
- fix: improve error handling in available_senders with logging and deduplication (#12011) by @CreeptoGengar
- ci: use gha runner for macos arm releases (#12021) by @DaniPopes
- fix: replace Some(URL) with URL during installation output (#12024) by @milosdjurica
- docs(networks): fix doc heading (#12028) by @onbjerg
- chore: make network flags exclude each other (#12027) by @onbjerg
- fix(fmt): ensure commasep breaks with final trailing cmnt (#12031) by @0xrusowsky
- refactor: avoid cloning broadcast transactions in reader (#12030) by @reject-i
- deps: bump deps (#12033) by @onbjerg
- chore: rm
NodeConfig::with_optimism
(#12035) by @onbjerg - chore: rm
NodeConfig::with_celo
(#12034) by @onbjerg - refactor: make
NetworkConfig
fields private (#12037) by @onbjerg - fix(build): use output graph/artifacts rather than sources (#12019) by @0xrusowsky
- feat(cheatcodes): add setEvmVersion / getEvmVersion (#12014) by @grandizzy
- chore: rm extra
--celo
arg (#12038) by @onbjerg