# Hardhat 3 > Hardhat is a development environment for Ethereum and EVM-compatible blockchains. > It helps developers compile, deploy, test, and debug Solidity smart contracts. > Solidity is the primary programming language for writing smart contracts on Ethereum. > > This documentation covers Hardhat 3, the latest major version. > The docs are organized into sections: core Hardhat usage, Hardhat Ignition > (a declarative deployment system), migration guides from Hardhat 2, > and a plugin development guide. ## Hardhat 3 - [Getting started with Hardhat 3](https://hardhat.org/docs/getting-started.md): Get started using Hardhat 3 - [Hardhat 2's documentation](https://hardhat.org/hardhat2.md): Documentation for Hardhat 2, the previous version of Hardhat ### Hardhat 3 - [What's new in Hardhat 3](https://hardhat.org/docs/hardhat3/whats-new.md): What's new in Hardhat 3 - [Beta status](https://hardhat.org/docs/hardhat3/beta-status.md): Hardhat 3 beta status - [Migrate to Hardhat 3](https://hardhat.org/docs/hardhat3/migration.md): How to migrate to Hardhat 3 ### Tutorial - [Hardhat 3 Tutorial](https://hardhat.org/docs/tutorial.md): Hardhat 3 Tutorial - Introduction - [Setting up a Hardhat project](https://hardhat.org/docs/tutorial/setup.md): Hardhat 3 Tutorial - Setting up a project - [Writing and testing a Solidity contract](https://hardhat.org/docs/tutorial/writing-and-testing.md): Hardhat 3 Tutorial - Writing and testing a Solidity contract - [Using an assertions library](https://hardhat.org/docs/tutorial/assertions-library.md): Hardhat 3 Tutorial - Using an assertions library - [Writing fuzz tests in Solidity](https://hardhat.org/docs/tutorial/fuzz-tests.md): Hardhat 3 Tutorial - Writing fuzz tests in Solidity - [Using a Hardhat plugin](https://hardhat.org/docs/tutorial/plugins.md): Hardhat 3 Tutorial - Using a Hardhat plugin - [Writing TypeScript tests](https://hardhat.org/docs/tutorial/typescript-tests.md): Hardhat 3 Tutorial - Writing TypeScript tests - [Measuring test coverage](https://hardhat.org/docs/tutorial/coverage.md): Hardhat 3 Tutorial - Measuring test coverage - [Deploying a contract](https://hardhat.org/docs/tutorial/deploying.md): Hardhat 3 Tutorial - Deploying a contract with Hardhat Ignition - [Using Configuration Variables](https://hardhat.org/docs/tutorial/configuration-variables.md): Hardhat 3 Tutorial - Using Configuration Variables - [Verifying a contract](https://hardhat.org/docs/tutorial/verifying.md): Hardhat 3 Tutorial - Verifying a contract on Etherscan - [Learn more](https://hardhat.org/docs/tutorial/learn-more.md): Hardhat 3 Tutorial - Learn more about Hardhat ### Guides - [Verifying smart contracts](https://hardhat.org/docs/guides/smart-contract-verification.md): How to verify a smart contract - [Managing config values and secrets safely](https://hardhat.org/docs/guides/configuration-variables.md): How to manage config variables and secrets safely - [Writing Hardhat tasks](https://hardhat.org/docs/guides/writing-tasks.md): How to write custom Hardhat tasks with Hardhat 3 - [Writing scripts with Hardhat](https://hardhat.org/docs/guides/writing-scripts.md): How to write and run Hardhat scripts - [Displaying execution traces](https://hardhat.org/docs/guides/execution-traces.md): How to control the amount of output shown during test execution, script runs, and deployments - [Forking a network](https://hardhat.org/docs/guides/forking.md): How to fork the state of another network - [Running a local development node](https://hardhat.org/docs/guides/hardhat-node.md): How to run and configure a local Hardhat development node for testing and development - [Using the Hardhat console](https://hardhat.org/docs/guides/hardhat-console.md): How to use the interactive Hardhat console - [Getting help](https://hardhat.org/docs/guides/getting-help.md): How to get help about Hardhat 3 #### Writing Smart contracts - [Writing contracts overview](https://hardhat.org/docs/guides/writing-contracts.md): How to write smart contracts using Hardhat 3 - [Managing smart contract dependencies](https://hardhat.org/docs/guides/writing-contracts/dependencies.md): How to use npm and git submodule dependencies - [Using Solidity remappings](https://hardhat.org/docs/guides/writing-contracts/remappings.md): How to use remappings - [Configuring the compiler](https://hardhat.org/docs/guides/writing-contracts/configuring-the-compiler.md): How to configure the compiler - [Isolated Builds](https://hardhat.org/docs/guides/writing-contracts/isolated-builds.md): How to use isolated builds in Hardhat 3 for better reproducibility - [Build Profiles](https://hardhat.org/docs/guides/writing-contracts/build-profiles.md): How to use Build Profiles in Hardhat 3 #### Testing Smart contracts - [Testing overview](https://hardhat.org/docs/guides/testing.md): How to test your smart contracts - [Writing unit tests in Solidity](https://hardhat.org/docs/guides/testing/using-solidity.md): How to write unit tests in Solidity - [Testing your smart contracts with viem and node:test](https://hardhat.org/docs/guides/testing/using-viem.md): Learn how to test your smart contracts using viem and Node.js test runner. - [Testing your smart contracts with Ethers and Mocha](https://hardhat.org/docs/guides/testing/using-ethers.md): Learn how to test your smart contracts using Ethers.js and Mocha. - [Inline configuration for Solidity tests](https://hardhat.org/docs/guides/testing/inline-configuration.md): How to use inline comments to override the solidity tests' configuration - [Computing code coverage of your tests](https://hardhat.org/docs/guides/testing/code-coverage.md): How to compute the code coverage of your tests - [Gas statistics for your test runs](https://hardhat.org/docs/guides/testing/gas-statistics.md): How to get gas statistics from your test runs - [Gas snapshots](https://hardhat.org/docs/guides/testing/gas-snapshots.md): How to track and compare gas usage across test runs #### Deploying Smart contracts - [Deployment overview](https://hardhat.org/docs/guides/deployment.md): How to deploy a smart contract using Hardhat - [Deploying smart contracts using Hardhat Ignition](https://hardhat.org/docs/guides/deployment/using-ignition.md): How to deploy a smart contract using Hardhat Ignition - [Deploying smart contracts using scripts](https://hardhat.org/docs/guides/deployment/using-scripts.md): How to deploy a smart contract using scripts ### Cookbook - [Cookbook overview](https://hardhat.org/docs/cookbook.md): A section with a collection of recipes for common tasks. - [Using Hardhat 3 with a HTTP proxy](https://hardhat.org/docs/cookbook/http-proxies.md): How to use Hardhat 3 with an HTTP proxy - [Using multiple versions of Solidity in a single project](https://hardhat.org/docs/cookbook/multiple-solidity-versions.md): How to use multiple versions of Solidity in a single project - [Generating artifacts from npm dependencies](https://hardhat.org/docs/cookbook/npm-artifacts.md): How to compile files from npm dependencies and generate compilation artifacts for them - [Using absolute imports in Solidity](https://hardhat.org/docs/cookbook/absolute-imports.md): How to configure and use absolute import paths in your Solidity contracts - [Using a custom Solidity compiler](https://hardhat.org/docs/cookbook/custom-solidity-compiler.md): How to configure Hardhat to use a custom Solidity compiler - [Running Hardhat with debug logs](https://hardhat.org/docs/cookbook/debug-logs.md): How to run Hardhat with debug logs - [Creating a Hardhat Runtime Environment programmatically](https://hardhat.org/docs/cookbook/programmatic-hre.md): How to initialize and configure a Hardhat Runtime Environment programmatically ### Reference - [Configuration](https://hardhat.org/docs/reference/configuration.md): Hardhat 3 configuration reference - [The Network Manager API](https://hardhat.org/docs/reference/network-manager.md): How to use the Network Manager of Hardhat 3 - [Simulated Networks by EDR](https://hardhat.org/docs/reference/edr-simulated-networks.md): Reference documentation for networks simulated by EDR - [OP Stack support](https://hardhat.org/docs/reference/op-stack-support.md): Reference documentation for OP Stack chain simulation in Hardhat - [JSON-RPC Methods](https://hardhat.org/docs/reference/json-rpc-methods.md): Reference of JSON-RPC methods supported by Hardhat's simulated networks - [Compilation artifacts formats](https://hardhat.org/docs/reference/artifacts.md): Hardhat 3 compilation artifacts formats reference - [Solidity console.log() reference](https://hardhat.org/docs/reference/console-log.md): Reference documentation of Hardhat's Solidity console.log() functionality - [Foundry compatibility](https://hardhat.org/docs/reference/foundry-compatibility.md): Hardhat 3's Foundry compatibility - [Stability guarantees](https://hardhat.org/docs/reference/stability-guarantees.md): Hardhat 3 stability guarantees - [Node.js support](https://hardhat.org/docs/reference/nodejs-support.md): Hardhat 3 Node.js support policy - [Hardhat 3 errors](https://hardhat.org/docs/reference/errors.md): This section contains a list of all the possible errors you may encounter when using Hardhat and an explanation of each of them #### Solidity test cheatcodes - [Cheatcodes overview](https://hardhat.org/docs/reference/cheatcodes/cheatcodes-overview.md): A section with the documentation of all Solidity test cheatcodes supported by Hardhat. - [Unsupported cheatcodes](https://hardhat.org/docs/reference/cheatcodes/unsupported-cheatcodes.md): List of unsupported cheatcodes in Hardhat. ### Explanations - [Hardhat 3 projects](https://hardhat.org/docs/explanations/hardhat-projects.md): An explanation about what a Hardhat project is - [The Hardhat Runtime Environment](https://hardhat.org/docs/explanations/hardhat-runtime-environment.md): An explanation about what the Hardhat Runtime Environment (HRE) is - [Multichain support](https://hardhat.org/docs/explanations/multichain-support.md): An explanation of Hardhat 3's Multichain support and its Chain Type concept - [Network Management](https://hardhat.org/docs/explanations/network-management.md): An explanation about Hardhat 3's Network Management - [Simulated Networks by EDR](https://hardhat.org/docs/explanations/edr-simulated-networks.md): An explanation of the networks simulated by EDR - [Configuration Variables](https://hardhat.org/docs/explanations/configuration-variables.md): An explanation about Hardhat 3's Configuration Variables - [Global Options](https://hardhat.org/docs/explanations/global-options.md): An explanation about Hardhat's global options ### Plugins ## Hardhat Ignition - [Getting started with Hardhat Ignition](https://hardhat.org/ignition/docs/getting-started.md): Getting started with Hardhat Ignition, a declarative smart contract deployment system. ### Guides - [Creating Ignition Modules](https://hardhat.org/ignition/docs/guides/creating-modules.md): How to create an Ignition Module - [Deploying a module](https://hardhat.org/ignition/docs/guides/deploy.md): How to deploy an Ignition Module - [Visualizing your Ignition Modules](https://hardhat.org/ignition/docs/guides/visualize.md): How to visualize an Ignition Module - [Modifying an existing module](https://hardhat.org/ignition/docs/guides/modifications.md): How to modify an existing Ignition Module - [Using Hardhat Ignition in your tests](https://hardhat.org/ignition/docs/guides/tests.md): How to use Hardhat Ignition in your tests - [Verifying your deployment](https://hardhat.org/ignition/docs/guides/verify.md): How to verify an Ignition deployment - [Using Ethers](https://hardhat.org/ignition/docs/guides/ethers.md): How to use Ethers.js with Ignition - [Version control of deployments](https://hardhat.org/ignition/docs/guides/versioning.md): How to version control your deployments - [Deploying via create2](https://hardhat.org/ignition/docs/guides/create2.md): How to use create2 with Ignition - [Upgradeable Contracts](https://hardhat.org/ignition/docs/guides/upgradeable-proxies.md): How to use upgradeable contracts with Hardhat Ignition - [Deploying with a Ledger hardware wallet](https://hardhat.org/ignition/docs/guides/ledger.md): How to to deploy with Hardhat Ignition using a Ledger wallet - [Deploying within Hardhat scripts](https://hardhat.org/ignition/docs/guides/scripts.md): How to to deploy with Hardhat Ignition using a Ledger wallet ### Reference - [Hardhat Ignition configuration](https://hardhat.org/ignition/docs/reference/config.md): Reference documentation about Hardhat Ignition's configuration - [Environment variables](https://hardhat.org/ignition/docs/reference/environment-variables.md): Hardhat Ignition env variables - [CLI commands](https://hardhat.org/ignition/docs/reference/cli-commands.md): Hardhat Ignition command line commands ### Explanations - [Module execution](https://hardhat.org/ignition/docs/explanations/execution.md): An explanation about Ignition's module execution - [Deployment artifacts](https://hardhat.org/ignition/docs/explanations/deployment-artifacts.md): An explanation about Ignition's deployment artifacts - [Reconciliation](https://hardhat.org/ignition/docs/explanations/reconciliation.md): An explanation about Ignition's reconciliation process - [Error handling](https://hardhat.org/ignition/docs/explanations/error-handling.md): How to Hardhat Ignition handles errors ## Migrate from Hardhat 2 - [Migrate from Hardhat 2](https://hardhat.org/docs/migrate-from-hardhat2.md): How to migrate from Hardhat 2 to Hardhat 3 ### Guides - [Migrate Mocha tests from Hardhat 2](https://hardhat.org/docs/migrate-from-hardhat2/guides/mocha-tests.md): How to migrate Mocha tests from Hardhat 2 to Hardhat 3 ## Plugin development - [Hardhat plugin development](https://hardhat.org/docs/plugin-development.md): How to build Hardhat 3 plugins to extend and customize its behavior ### Tutorial - [Your first Hardhat 3 plugin](https://hardhat.org/docs/plugin-development/tutorial.md): Hardhat 3 plugin tutorial - Your first Hardhat 3 plugin - [Extending the NetworkConnection](https://hardhat.org/docs/plugin-development/tutorial/network-connection.md): Hardhat 3 plugin tutorial - Extending the NetworkConnection - [Adding config to your plugin](https://hardhat.org/docs/plugin-development/tutorial/config.md): Hardhat 3 plugin tutorial - Adding config to your plugin - [Creating a custom task](https://hardhat.org/docs/plugin-development/tutorial/task.md): Hardhat 3 plugin tutorial - Creating a custom task - [Testing your plugin](https://hardhat.org/docs/plugin-development/tutorial/testing.md): Hardhat 3 plugin tutorial - Testing your plugin - [Next steps](https://hardhat.org/docs/plugin-development/tutorial/next-steps.md): Hardhat 3 plugin tutorial - Next steps ### Guides - [Using the Hardhat 3 plugin template](https://hardhat.org/docs/plugin-development/guides/hardhat3-plugin-template.md): How to use the Hardhat 3 plugin template repository to build your own plugin - [Plugin dependencies](https://hardhat.org/docs/plugin-development/guides/dependencies.md): How to use other plugins as dependencies - [Publishing a plugin](https://hardhat.org/docs/plugin-development/guides/publishing.md): How to publish your plugin to npm - [Writing integration tests for plugins](https://hardhat.org/docs/plugin-development/guides/integration-tests.md): How to write integration tests for your plugin - [Getting help](https://hardhat.org/docs/plugin-development/guides/getting-help.md): Where to get help building Hardhat 3 plugins ### Reference - [The HardhatPlugin object](https://hardhat.org/docs/plugin-development/reference/hardhat-plugin-object.md): Reference documentation for the HardhatPlugin object ### Explanations - [Lifecycle of the components of a Hardhat 3 plugin](https://hardhat.org/docs/plugin-development/explanations/lifecycle.md): An explanation about the lifecycles of a Hardhat 3 plugin - [Hooks and Hook Handlers](https://hardhat.org/docs/plugin-development/explanations/hooks.md): An explanation about Hardhat 3's Hooks and Hook Handlers - [Type extensions](https://hardhat.org/docs/plugin-development/explanations/type-extensions.md): What are type extensions in a Hardhat 3 plugin and how to use them - [Config system](https://hardhat.org/docs/plugin-development/explanations/config.md): An explanation about the Hardhat 3 config system and how to extend it - [Peer dependencies in Hardhat 3 plugins](https://hardhat.org/docs/plugin-development/explanations/peer-dependencies.md): An explanation about Hardhat 3 plugins and peer dependencies ## Official Plugins - [hardhat-toolbox-viem](https://hardhat.org/docs/plugins/hardhat-toolbox-viem.md): Nomic Foundation's recommended bundle of Hardhat plugins (viem based) - [hardhat-toolbox-mocha-ethers](https://hardhat.org/docs/plugins/hardhat-toolbox-mocha-ethers.md): Nomic Foundation's recommended bundle of Hardhat plugins (ethers based) - [hardhat-keystore](https://hardhat.org/docs/plugins/hardhat-keystore.md): This plugin adds an encrypted keystore to Hardhat, to handle secret values (e.g. API keys and private keys) in your config securely. - [hardhat-verify](https://hardhat.org/docs/plugins/hardhat-verify.md): Automatically verify contracts - [hardhat-network-helpers](https://hardhat.org/docs/plugins/hardhat-network-helpers.md): A plugin that provides a set of utility functions to interact with locally simulated networks. - [hardhat-ledger](https://hardhat.org/docs/plugins/hardhat-ledger.md): A plugin that allows to interact with Ledger hardware wallets. - [hardhat-viem](https://hardhat.org/docs/plugins/hardhat-viem.md): Integrates viem into a Hardhat project - [hardhat-viem-assertions](https://hardhat.org/docs/plugins/hardhat-viem-assertions.md): Adds a set of viem-based testing assertions to Hardhat - [hardhat-ethers](https://hardhat.org/docs/plugins/hardhat-ethers.md): Integrates Ethers.js into a Hardhat project - [hardhat-ethers-chai-matchers](https://hardhat.org/docs/plugins/hardhat-ethers-chai-matchers.md): Adds a set of ethers-based matchers to chai - [hardhat-typechain](https://hardhat.org/docs/plugins/hardhat-typechain.md): Generates TypeChain bindings for smart contracts - [hardhat-ignition](https://hardhat.org/docs/plugins/hardhat-ignition.md): Hardhat's official deployment solution - [hardhat-ignition-viem](https://hardhat.org/docs/plugins/hardhat-ignition-viem.md): Adds support for viem to Hardhat Ignition - [hardhat-ignition-ethers](https://hardhat.org/docs/plugins/hardhat-ignition-ethers.md): Adds support for Ethers.js to Hardhat Ignition - [hardhat-mocha](https://hardhat.org/docs/plugins/hardhat-mocha.md): Integrates Mocha into a Hardhat project - [hardhat-node-test-runner](https://hardhat.org/docs/plugins/hardhat-node-test-runner.md): Integrates Node.js' builtin test runner into a Hardhat project - [hardhat-foundry](https://hardhat.org/docs/plugins/hardhat-foundry.md): Hardhat plugin that provides compatibility with Foundry-based projects' remappings ## Community Plugins - [hardhat-deploy](https://www.npmjs.com/package/hardhat-deploy): A Hardhat Plugin For Replicable Deployments And Easy Testing - [hardhat-ignore-warnings](https://www.npmjs.com/package/hardhat-ignore-warnings): Hardhat plugin that adds ways to ignore Solidity warnings - [@solidstate/hardhat-contract-sizer](https://www.npmjs.com/package/@solidstate/hardhat-contract-sizer): Output Solidity contract sizes with Hardhat - [@solidstate/hardhat-git](https://www.npmjs.com/package/@solidstate/hardhat-git): Git-rev-based HRE execution - [@solarity/hardhat-gobind](https://www.npmjs.com/package/@solarity/hardhat-gobind): Hardhat plugin to generate Go bindings for smart contracts - [@solarity/hardhat-migrate](https://www.npmjs.com/package/@solarity/hardhat-migrate): The simplest way to deploy smart contracts - [@solarity/hardhat-markup](https://www.npmjs.com/package/@solarity/hardhat-markup): Hardhat plugin to generate customizable smart contracts documentation - [@solidstate/hardhat-bytecode-exporter](https://www.npmjs.com/package/@solidstate/hardhat-bytecode-exporter): Export Ethereum smart contract bytecode - [@openscan/hardhat-plugin](https://www.npmjs.com/package/@openscan/hardhat-plugin): Hardhat plugin to explore the hardhat network, blocks, txs, contracts, etc. - [@solidstate/hardhat-abi-exporter](https://www.npmjs.com/package/@solidstate/hardhat-abi-exporter): Export Ethereum smart contract ABIs - [@solidstate/hardhat-storage-layout-inspector](https://www.npmjs.com/package/@solidstate/hardhat-storage-layout-inspector): Compare storage layouts between contracts and revisions - [@solidstate/hardhat-accounts](https://www.npmjs.com/package/@solidstate/hardhat-accounts): Display connected accounts and balances - [hardhat-contract-signatures](https://www.npmjs.com/package/hardhat-contract-signatures): Display function, event, and error signatures for your contracts in the console - [hashscan-verify](https://www.npmjs.com/package/hashscan-verify): Verify contracts on Hashscan - [hardhat-reown](https://www.npmjs.com/package/hardhat-reown): Use the reown.com supported wallets with Hardhat - [@solidstate/hardhat-selector-uploader](https://www.npmjs.com/package/@solidstate/hardhat-selector-uploader): Upload local function selectors to the Ethereum Selector Database - [@solidstate/hardhat-license-identifier](https://www.npmjs.com/package/@solidstate/hardhat-license-identifier): Prepend local Solidity source files with an SPDX License Identifier - [@solidstate/hardhat-linearization](https://www.npmjs.com/package/@solidstate/hardhat-linearization): Calculate Solidity contract inheritance order - [@solidstate/hardhat-log-remover](https://www.npmjs.com/package/@solidstate/hardhat-log-remover): Remove Hardhat console.log imports and calls from Solidity source files