Skip to content
Logo

Profiles

Profiles let you maintain different configurations for different scenarios. The default profile is always active, and other profiles inherit from it.

Creating profiles

Define profiles in foundry.toml:

foundry.toml
[profile.default]
src = "src"
out = "out"
libs = ["lib"]
optimizer = true
optimizer_runs = 200
 
[profile.ci]
verbosity = 3
fuzz = { runs = 10000 }
 
[profile.lite]
optimizer = false
fuzz = { runs = 32 }

Selecting a profile

Set the FOUNDRY_PROFILE environment variable:

$ FOUNDRY_PROFILE=ci forge test

Common profile patterns

CI profile

Increase fuzz runs and verbosity for thorough testing in CI:

foundry.toml
[profile.ci]
verbosity = 3
fuzz = { runs = 10000, seed = "0x1" }
invariant = { runs = 1000 }

Development profile

Fast iteration with minimal optimization:

foundry.toml
[profile.lite]
optimizer = false
fuzz = { runs = 32 }
via_ir = false

Production profile

Maximum optimization for deployment:

foundry.toml
[profile.production]
optimizer = true
optimizer_runs = 1000000
via_ir = true
bytecode_hash = "none"

Profile inheritance

All profiles inherit from default. You only need to specify values that differ:

foundry.toml
[profile.default]
src = "src"
out = "out"
libs = ["lib"]
solc_version = "0.8.28"
optimizer = true
optimizer_runs = 200
 
# Inherits everything from default, overrides optimizer_runs
[profile.production]
optimizer_runs = 1000000

Environment variable overrides

Override any configuration value with environment variables prefixed with FOUNDRY_ or DAPP_:

# Override optimizer runs
$ FOUNDRY_OPTIMIZER_RUNS=500 forge build
 
# Override solc version
$ FOUNDRY_SOLC_VERSION=0.8.25 forge build

This is useful for CI or quick one-off builds without modifying foundry.toml.