Compiler
Configure how Foundry compiles your Solidity contracts, including version management, optimization, and output options.
Solidity version
By default, Foundry auto-detects the required Solidity version from your contracts. To pin a specific version:
[profile.default]
solc_version = "0.8.28"Disable auto-detection if you want full control:
[profile.default]
solc_version = "0.8.28"
auto_detect_solc = falseEVM version
Set the target EVM version for compilation. This affects which opcodes are available:
[profile.default]
evm_version = "cancun"Common values: paris, shanghai, cancun, prague (default).
Optimizer settings
Enable the optimizer and configure the number of runs:
[profile.default]
optimizer = true
optimizer_runs = 200- Lower runs (e.g., 1): Optimizes for deployment cost
- Higher runs (e.g., 1000000): Optimizes for runtime cost (frequent calls)
For production deployments, consider higher optimizer runs:
[profile.production]
optimizer = true
optimizer_runs = 1000000Via IR
Enable the new IR-based compilation pipeline for better optimization:
[profile.default]
via_ir = trueThis can produce more optimized bytecode but increases compilation time.
Remappings
Map import paths to actual file locations:
[profile.default]
remappings = [
"@openzeppelin/=lib/openzeppelin-contracts/",
"@uniswap/=node_modules/@uniswap/",
]Foundry auto-detects remappings from your lib folder by default. To disable:
[profile.default]
auto_detect_remappings = falseIgnoring warnings
Suppress specific compiler warnings:
[profile.default]
ignored_error_codes = ["license", "code-size"]Or treat all warnings as errors:
[profile.default]
deny_warnings = trueBytecode metadata
Control the metadata hash appended to bytecode:
[profile.default]
bytecode_hash = "none" # Options: ipfs, bzzr1, none
cbor_metadata = falseSetting bytecode_hash = "none" is useful for deterministic deployments.
Extra output
Include additional compiler output in artifacts:
[profile.default]
extra_output = ["storageLayout", "metadata"]
extra_output_files = ["ir", "irOptimized"]Example configuration
A complete compiler configuration for production:
[profile.default]
solc_version = "0.8.28"
evm_version = "cancun"
optimizer = true
optimizer_runs = 200
via_ir = false
[profile.production]
optimizer_runs = 1000000
via_ir = true
bytecode_hash = "none"For the complete list of compiler options, see the Solidity Compiler Reference.
Was this helpful?
