Creating a New Project
To start a new project with Foundry, use forge init
:
$ forge init hello_foundry
This creates a new directory hello_foundry
from the default template. This also initializes a new git
repository.
If you want to create a new project using a different template, you would pass the --template
flag, like so:
$ forge init --template https://github.com/foundry-rs/forge-template hello_template
For now, let’s check what the default template looks like:
$ cd hello_foundry
$ tree . -d -L 1
.
├── lib
├── script
├── src
└── test
4 directories
The default template comes with one dependency installed: Forge Standard Library. This is the preferred testing library used for Foundry projects. Additionally, the template also comes with an empty starter contract and a simple test.
Let’s build the project:
$ forge build
Compiling 27 files with Solc 0.8.19
Solc 0.8.19 finished in 1.10s
Compiler run successful!
And run the tests:
$ forge test
No files changed, compilation skipped
Ran 2 tests for test/Counter.t.sol:CounterTest
[PASS] testFuzz_SetNumber(uint256) (runs: 256, μ: 31054, ~: 31288)
[PASS] test_Increment() (gas: 31303)
Suite result: ok. 2 passed; 0 failed; 0 skipped; finished in 8.55ms (8.20ms CPU time)
Ran 1 test suite in 9.63ms (8.55ms CPU time): 2 tests passed, 0 failed, 0 skipped (2 total tests)
You’ll notice that two new directories have popped up: out
and cache
.
The out
directory contains your contract artifact, such as the ABI, while the cache
is used by forge
to only recompile what is necessary.