Project Layout
Forge is flexible on how you structure your project. By default, the structure is:
.
βββ README.md
βββ foundry.toml
βββ lib
βΒ Β βββ forge-std
βΒ Β βββ LICENSE-APACHE
βΒ Β βββ LICENSE-MIT
βΒ Β βββ README.md
βΒ Β βββ foundry.toml
βΒ Β βββ package.json
βΒ Β βββ scripts
βΒ Β βββ src
βΒ Β βββ test
βββ script
βΒ Β βββ Counter.s.sol
βββ src
βΒ Β βββ Counter.sol
βββ test
βββ Counter.t.sol
8 directories, 10 files
- You can configure Foundryβs behavior using
foundry.toml
. - Remappings are specified in
remappings.txt
. - The default directory for contracts is
src/
. - The default directory for tests is
test/
, where any contract with a function that starts withtest
is considered to be a test. - Dependencies are stored as git submodules in
lib/
.
You can configure where Forge looks for both dependencies and contracts using the --lib-paths
and --contracts
flags respectively. Alternatively you can configure it in foundry.toml
.
Combined with remappings, this gives you the flexibility needed to support the project structure of other toolchains such as Hardhat and Truffle.
For automatic Hardhat support you can also pass the --hh
flag, which sets the following flags: --lib-paths node_modules --contracts contracts
.