#3. Creating a new Hardhat project
We'll install Hardhat using the Node.js package manager (npm
), which is both a package manager and an online repository for JavaScript code.
You can use other package managers with Node.js, but we suggest you use npm 7 or higher to follow this guide. You should already have it if you followed the previous section's steps.
Open a new terminal and run these commands to create a new folder:
mkdir hardhat-tutorial
cd hardhat-tutorial
Then initialize an npm project as shown below. You'll be prompted to answer some questions.
TIP
Use the tabs in the snippets to select your preferred package manager. We recommend using npm 7 or later, since it makes installing Hardhat's dependencies much easier.
npm init
npm init
yarn init
pnpm init
Now we can install Hardhat:
npm install --save-dev hardhat
npm install --save-dev hardhat
yarn add --dev hardhat
pnpm add -D hardhat
In the same directory where you installed Hardhat run:
npx hardhat init
Select Create an empty hardhat.config.js
with your keyboard and hit enter.
$ npx hardhat init
888 888 888 888 888
888 888 888 888 888
888 888 888 888 888
8888888888 8888b. 888d888 .d88888 88888b. 8888b. 888888
888 888 "88b 888P" d88" 888 888 "88b "88b 888
888 888 .d888888 888 888 888 888 888 .d888888 888
888 888 888 888 888 Y88b 888 888 888 888 888 Y88b.
888 888 "Y888888 888 "Y88888 888 888 "Y888888 "Y888
š· Welcome to Hardhat v2.22.17 š·ā
? What do you want to do? ā¦
Create a JavaScript project
Create a TypeScript project
Create a TypeScript project (with Viem)
āÆ Create an empty hardhat.config.js
Quit
When Hardhat is run, it searches for the closest hardhat.config.js
file starting from the current working directory. This file normally lives in the root of your project and an empty hardhat.config.js
is enough for Hardhat to work. The entirety of your setup is contained in this file.
# Hardhat's architecture
Hardhat is designed around the concepts of tasks and plugins. The bulk of Hardhat's functionality comes from plugins, and you're free to choose the ones you want to use.
#Tasks
Every time you're running Hardhat from the command-line, you're running a task. For example, npx hardhat compile
is running the compile
task. To see the currently available tasks in your project, run npx hardhat
. Feel free to explore any task by running npx hardhat help [task]
.
TIP
You can create your own tasks. Check out the Creating a task guide.
#Plugins
Hardhat is unopinionated in terms of what tools you end up using, but it does come with some built-in defaults. All of which can be overridden. Most of the time the way to use a given tool is by consuming a plugin that integrates it into Hardhat.
In this tutorial we are going to use our recommended plugin, @nomicfoundation/hardhat-toolbox
, which has everything you need for developing smart contracts.
To install it, run this in your project directory:
npm install --save-dev @nomicfoundation/hardhat-toolbox
npm install --save-dev @nomicfoundation/hardhat-toolbox @nomicfoundation/hardhat-ignition @nomicfoundation/hardhat-ignition-ethers @nomicfoundation/hardhat-network-helpers @nomicfoundation/hardhat-chai-matchers @nomicfoundation/hardhat-ethers @nomicfoundation/hardhat-verify chai@4 ethers hardhat-gas-reporter solidity-coverage @typechain/hardhat typechain @typechain/ethers-v6
yarn add --dev @nomicfoundation/hardhat-toolbox @nomicfoundation/hardhat-ignition @nomicfoundation/hardhat-ignition-ethers @nomicfoundation/hardhat-network-helpers @nomicfoundation/hardhat-chai-matchers @nomicfoundation/hardhat-ethers @nomicfoundation/hardhat-verify chai@4 ethers hardhat-gas-reporter solidity-coverage @typechain/hardhat typechain @typechain/ethers-v6
pnpm add -D @nomicfoundation/hardhat-toolbox @nomicfoundation/hardhat-ignition @nomicfoundation/hardhat-network-helpers chai@4 ethers
Add the highlighted line to your hardhat.config.js
so that it looks like this:
require("@nomicfoundation/hardhat-toolbox");
/** @type import('hardhat/config').HardhatUserConfig */
module.exports = {
solidity: "0.8.28",
};