Config File
Here, you can learn more about all configuration options.
workspace
Relative directory path to Forc workspace.
workspace: './sway-programs',
The property
workspace
is incompatible withcontracts
,predicates
, andscripts
.
contracts
List of relative directory paths to Sway contracts.
contracts: ['./sway-programs/contracts'],
The property
contracts
is incompatible withworkspace
.
predicates
List of relative directory paths to Sway predicates.
predicates: ['./sway-programs/predicates'],
The property
predicates
is incompatible withworkspace
.
scripts
List of relative directory paths to Sway scripts.
scripts: ['./sway-programs/scripts'],
The property
scripts
is incompatible withworkspace
.
output
Relative directory path to use when generating Typescript definitions.
output: './src/sway-programs-api',
providerUrl
The URL to use when deploying contracts.
// Default: http://127.0.0.1:4000/v1/graphql
providerUrl: 'http://network:port/v1/graphql',
When
autostartFuelCore
property is set totrue
, theprovidedUrl
is overridden by that of the local short-livedfuel-core
node started by thefuels dev
command.
privateKey
Wallet private key, used when deploying contracts.
This property should ideally come from env — process.env.MY_PRIVATE_KEY
.
privateKey: '0xa449b1ffee0e2205fa924c6740cc48b3b473aa28587df6dab12abc245d1f5298',
When
autostartFuelCore
property is set totrue
, theprivateKey
is overridden with theconsensusKey
of the local short-livedfuel-core
node started by thefuels dev
command.
snapshotDir
- Used by
fuels dev
only.
Relative path to directory containing custom configurations for fuel-core
, such as:
chainConfig.json
metadata.json
stateConfig.json
This will take effect only when autoStartFuelCore
is true
.
snapshotDir: './my/snapshot/dir',
autoStartFuelCore
- Used by
fuels dev
only.
When set to true
, it will automatically:
- Starts a short-lived
fuel-core
node as part of thefuels dev
command - Override property
providerUrl
with the URL for the recently startedfuel-core
node
autoStartFuelCore: true,
If set to false
, you must spin up a fuel-core
node by yourself and set the URL for it via providerUrl
.
fuelCorePort
- Used by
fuels dev
only.- Ignored when
autoStartFuelCore
is set tofalse
.
Port to use when starting a local fuel-core
node.
// Default: first free port, starting from 4000
fuelCorePort: 4000,
forcBuildFlags
- Used by
fuels build
andfuels deploy
.
Sway programs are compiled in debug
mode by default.
Here you can customize all build flags, e.g. to build programs in release
mode.
// Default: []
forcBuildFlags: ['--release'],
Check also:
deployConfig
You can supply a ready-to-go deploy configuration object:
deployConfig: {},
Or use a function for crafting dynamic deployment flows:
- If you need to fetch and use configs or data from a remote data source
- If you need to use IDs from already deployed contracts — in this case, we can use the
options.contracts
property to get the necessary contract ID. For example:
deployConfig: async (options: ContractDeployOptions) => {
// ability to fetch data remotely
await Promise.resolve(`simulating remote data fetch`);
// get contract by name
const { contracts } = options;
const contract = contracts.find(({ name }) => {
const found = name === MY_FIRST_DEPLOYED_CONTRACT_NAME;
return found;
});
if (!contract) {
throw new Error('Contract not found!');
}
return {
storageSlots: [
{
key: '0x..',
/**
* Here we could initialize a storage slot,
* using the relevant contract ID.
*/
value: contract.contractId,
},
],
};
},
onBuild
A callback function that is called after a build event has been successful.
Parameters:
config
— The loaded config (fuels.config.ts
)
onBuild: (config: FuelsConfig) => {
console.log('fuels:onBuild', { config });
},
onDeploy
A callback function that is called after a deployment event has been successful.
Parameters:
config
— The loaded config (fuels.config.ts
)data
— The data (an array of deployed contracts)
import type { DeployedContract, FuelsConfig } from 'fuels';
onDeploy: (config: FuelsConfig, data: DeployedContract[]) => {
console.log('fuels:onDeploy', { config, data });
},
onDev
A callback function that is called after the fuels dev
command has successfully restarted.
Parameters:
config
— The loaded config (fuels.config.ts
)
onDev: (config: FuelsConfig) => {
console.log('fuels:onDev', { config });
},
onNode
A callback function that is called after the fuels node
command has successfully refreshed.
Parameters:
config
— The loaded config (fuels.config.ts
)
onNode: (config: FuelsConfig) => {
console.log('fuels:onNode', { config });
},
onFailure
Pass a callback function to be called in case of errors.
Parameters:
config
— The loaded config (fuels.config.ts
)error
— Original error object
onFailure: (config: FuelsConfig, error: Error) => {
console.log('fuels:onFailure', { config, error });
},
forcPath
Path to the forc
binary.
When not supplied, will default to using the system
binaries (forc
).
// Default: 'forc',
forcPath: '~/.fuelup/bin/forc',
fuelCorePath
Path to the fuel-core
binary.
When not supplied, will default to using the system
binaries (fuel-core
).
// Default: 'fuel-core'
fuelCorePath: '~/.fuelup/bin/fuel-core',
Loading environment variables
If you want to load environment variables from a .env
file, you can use the dotenv
package.
First, install it:
pnpm install dotenv
npm install dotenv
bun install dotenv
Then, you can use it in your fuels.config.ts
file:
import { createConfig } from 'fuels';
import dotenv from 'dotenv';
import { NODE_URL } from '@/lib';
dotenv.config({
path: ['.env.local', '.env'],
});
const fuelCorePort = +(process.env.NEXT_PUBLIC_FUEL_NODE_PORT as string) || 4000;
export default createConfig({
workspace: './sway-programs',
output: './src/sway-api',
fuelCorePort,
providerUrl: NODE_URL,
});