Hardhat 3 is now stable
Hardhat 3 shipped as a beta on August 2025, with a major overhaul: Solidity tests as first-class, multichain support, a performant Rust-powered runtime via EDR, a revamped build system, and Hardhat Ignition for deployments. Hardhat is more than ready for production use for any kind of modern Solidity project. TypeScript tested, Solidity tested, fuzzed — or all of the above! See below what landed across the five releases that led to the stable release.
The shape of the stable release
The cycle since 3.0.0 beta has been about turning an ambitious rewrite into something teams can confidently standardize on. A few directional themes stand out:
- Improved performance. We worked on optimizing the bootstrap time, the build system, networking stack, and solidity tests, and are happy with the results, plus we’re working on further optimizations which will land in the near future.
- AI-ready out of the box. Templates ship with
AGENTS.md,CLAUDE.md, and skills so AI coding tools understand a fresh Hardhat 3 project from the first prompt. - A first-class testing story. Solidity and JS/TS tests share output, tracing, and coverage tooling, with new capabilities — gas snapshots, EIP-712 cheatcodes, inline config, HTML coverage — that close the gap with what Foundry users expect.
- Ready for migrating from foundry. Hardhat 3 now covers the majority of foundry’s functionality (including Solidity tests, fuzzing, and invariant testing), plus a lot more, and there’s a migration guide for those ready to make the switch.
- A rigorous bug fixing effort. We fixed issues that came from beta test users, major users starting their migration process, and preemptive internal migrations of major ecosystem repositories intended to surface bugs that would’ve come up later.
- Decreased number of dependencies. We’re continuously vendoring and reimplementing external dependencies internally to reduce the amount of transitive packages, leading to a leaner install and increased security.
- A mature network and execution layer. A cleaner network API, JSON-RPC behavior aligned with the rest of the ecosystem, and an EDR runtime that's kept current with the L1 and OP-Stack hardforks teams actually deploy to.
- A faster, smaller, more reproducible build system. Contracts and Solidity tests compile together by default, artifacts shrank meaningfully, and
productionbuilds now record enough metadata to be reproduced later. - Better gas insight. Gas reporting moved from a debug aid to something you can wire into CI: aggregate stats, JSON export, and proxy-aware attribution.
- A plugin ecosystem that's caught up. Foundry interop, multi-provider verification (Etherscan, Blockscout, Sourcify), Hardhat Ignition, and Ledger all work on HH3 out of the box.
Companion plugin releases
A few plugins were updated or newly released alongside the H3 stable push.
@nomicfoundation/hardhat-foundry@3.0.0The HH3 port of the original plugin. Readsforge config, syncs sources/cache paths, and automatically feeds Foundry-generated remappings (including npm-installed ones) into Hardhat's compilation, closing the remappings UX gap tracked in issues #6508 and #4812.@nomicfoundation/hardhat-verifyv3 exposesetherscan,blockscout, andsourcifyas first-class providers inverifyContract; runningverifywith no subtask hits all three. Blockscout originally landed via issue #5224 and was carried into the H3 3.x line.@nomicfoundation/hardhat-ignitionhonors the same multi-provider flow through-verifyon the deploy module: Sourcify is on by default and Blockscout works without an API key.@nomicfoundation/hardhat-ledgerported to Hardhat 3 (issues #5646, #6983) — uses the new network/provider API and is configured throughledgerAccountsinhardhat.config.ts.
Our gratitude to OpenZeppelin and 1inch teams
The contracts and upgrades teams at OpenZeppelin have collaborated very closely with us throughout this process, and the team at 1inch have been providing very valuable feedback as they migrate their projects to Hardhat 3, and we’re beyond grateful for all their input and feedback 🙏
Hardhat 3 is now stable, performant, and ready for prime time.
The path towards stability
3.1.* — December 2025
The first follow-up after the beta launch focused on EVM currency and test ergonomics.
- Unified test output between Solidity tests and the Node.js test runner — running multiple test tasks now produces merged summaries instead of separate ones.
- Default L1 hardfork bumped to Osaka; default OP stack hardfork bumped to Isthmus, with corrected post-Osaka transaction gas limits.
- HTML coverage report .
--coveragenow produces an HTML report atcoverage/html/index.htmlin addition to the existing Markdown and LCOV outputs. - Gas snapshots in Solidity tests added function-level gas snapshots and snapshot cheatcodes for Solidity tests, exposed through new
--snapshotand--snapshot-checkCLI flags.
3.2.0 — March 2026
A smaller release built around the new gas-stats workflow and a few correctness fixes.
- Improvements and stabilization of gas statistics. A new
--gas-stats-json <path>option that writes gas usage to JSON for tooling/CI consumption. Deployment gas stats are now aggregated (min/avg/median/max/count) instead of only the last deployment cost and size, and multiple test runners are reported in a single consolidated table. network.createServergot a clearer non-genericchainTypessignature and a guard againsthttpnetwork configs.- Internal dependency-vendoring workspace. A new
@nomicfoundation/hardhat-vendoredpackage was added as a home for small utilities that used to come from external npm packages. This sets up the lighter dependency footprint that lands in 3.5.0.
3.3.0 — March 2026
A performance-focused release with two additional notable features.
- Execution tracing for JS/TS integration tests via
--verbosity/v,vv, etc. — previously trace output was Solidity-tests-only. - Per-test inline configuration for Solidity tests (matching the inline-config workflow Foundry users expect).
- Plugin extensibility: a new
ConfigHooks#validateResolvedConfighook andHardhatConfigValidationErrortype, plusSolidityHooks#downloadCompilersandSolidityHooks#getCompilerso plugins can register custom Solidity compiler types. - EDR network initialization performance optimizations
3.4.0 — April 2026
The largest release in the cycle and explicitly billed as "preparation of the first stable version of Hardhat 3." Several user- and plugin-facing migrations live here.
- New stabilized
NetworkManagerAPI.network.connect()is deprecated in favor ofnetwork.create()andnetwork.getOrCreate(), which more clearly describe their semantics. The old call still works for now. - Unified compilation of contracts and Solidity tests. Tests and contracts now build in a single pass, producing faster compiles and smaller artifacts. Projects that need the old isolated behavior can opt in with
splitTestsCompilation: truein thesolidityconfig. There's a detailed plugin migration guide covering scope rules,getRootFilePaths,getArtifactsDirectory,--no-tests/--no-contractssemantics, and theonCleanUpArtifactshook. - Smaller
artifacts/output by changing the default solcoutputSelection— in some projects around 50% smaller. toolVersionsInBuildInfosetting, on by default in theproductionbuild profile, records the Hardhat version inBuildInfofiles so production builds are easier to reproduce.- JSON-RPC revert errors now use code
3for simulated networks andhardhat node, aligning with the rest of the ecosystem (viem/ethers preserve error causes correctly). - Proxy chains in
--gas-stats: gas is attributed to the implementation contract reached through the proxy (e.g.VaultviaProxy), instead of being lumped under the proxy.
3.5.0 — May 2026
The most recent release; this is effectively the candidate for what becomes Hardhat 3 stable.
- Lighter dependency footprint.
chalkanddebug— two long-standing runtime dependencies — were removed in favor of the vendored equivalents in@nomicfoundation/hardhat-vendored, leaving a fresh Hardhat 3 project with a noticeably smaller install tree. - EIP-712 cheatcodes in Solidity Test.
- Non-interactive project init:
npx hardhat --init --template <template-name>, with-init --templatesto list available templates. - TypeScript 6 as the default in templates for new projects.
- Coverage improvements: respect user
allowUnlimitedContractSize, disable transaction gas cap and block gas limit under--coverage, fix coverage instrumentation interfering with single-callvm.prank, add instrumentation support for Solidity 0.8.35.
3.6.0 stable — May, 2026
A focused release built around a Solidity-hooks overhaul and the final piece of agent-ready scaffolding for the stable launch.
- AI coding agent enhancements: Projects created with
--initnow ship withAGENTS.mdandCLAUDE.mdfiles plus a.claude/commands/directory, providing ready-made context for agentic coding tools (Claude Code, Cursor, Aider, etc.). The Hardhat repo itself ships the same files at its root. These can be added to any HH3 project for better support. - Solidity hooks overhaul (PR #8327). Two new hooks were added —
processArtifactsAfterSuccessfulBuild(which receives a new exportedResolvedBuildOptionstype) andgetCompilationJobErrors, which lets plugins process compiler output errors before they reach the user. A long list of older hooks was deprecated and will be removed in a future release:getCompiler,onCleanUpArtifacts,preprocessProjectFileBeforeBuilding,preprocessSolcInputBeforeBuilding,readSourceFile,invokeSolc, andreadNpmPackageRemappings. The reshuffle gives Hardhat more room to optimize the build pipeline without breaking plugins, and is positioned as the hook surface Hardhat 3 stable will commit to. cleanupArtifactsis now a build option.SolidityBuildSystem#buildaccepts a newcleanupArtifactsflag; when set, the build system deletes orphan artifacts and unreachable build-info files for the scope after a successful build.cleanupArtifactsitself also now returns the list of artifact paths remaining after the cleanup.- Positional arguments accept value-less variants.
STRING_WITHOUT_DEFAULTandFILE_WITHOUT_DEFAULTare now valid as positional arguments (PR #8335).