JQ721 Config
The jq721 configuration is used to deploy and manage NFT collections. Each collection is defined by a config.json file inside your project directory.
To generate a config template, use:
$ joystiq init project <name>
<name>: The name of the nft collection.
Sample config.json
{
"collection_name": "test",
"collection_description": "description",
"collection_media_url": "https://arweave.net/...",
"supply": "4444",
"fixed_metadata": false,
"royalty_percent": "5",
"royalty_wallet": "0x...",
"is_immutable": false,
"start_order": "1",
"groups": [
{
"name": "public",
"merkle_root": null,
"max_mints_per_wallet": "0",
"reserved_supply": "0",
"payments": [
{
"coin": "0x2::sui::SUI",
"routes": [
{
"method": "transfer",
"amount": "100001",
"destination": "0x..."
}
]
}
],
"start_time": "2025-07-09T06:03:42Z",
"end_time": null
},
{
"name": "free",
"merkle_root": null,
"max_mints_per_wallet": "0",
"reserved_supply": "0",
"payments": [],
"start_time": "2025-07-09T06:03:42Z",
"end_time": null
}
]
}
Field Descriptions
Collection Fields
collection_name: Name of the collectioncollection_description: Description for the collectioncollection_media_url: Image URL shown on collection detailsupply: Total number of NFTs that can be mintedfixed_metadata: Set tofalsefor dynamic metadata, or provide fixed metadata objectname: Name of the NFTdescription: Description of the NFTimage: URL for the NFT imageattributes: Optional array of attributes for the NFT. Leave empty for no attributes.- Each attribute is an object with:
key: Attribute key (e.g. "color")value: Attribute value (e.g. "red")
name_format: Optional format string for NFT names (e.g. "My custom NFT {name} - {token_id}")
royalty_percent: Percent of royalties taken per trade (e.g. "5" = 5%)royalty_wallet: Wallet to receive royaltiesis_immutable: Iftrue, collection cannot be updated laterstart_order: Starting token ID (usually 0 or 1)
Mint Group Fields
groups is an array defining public and/or allowlisted mint phases. Each group supports:
name: Name of the mint group (e.g. "public", "presale")merkle_root: If set, restricts group to allowlisted walletsmax_mints_per_wallet: Per-wallet mint cap (0 = unlimited)reserved_supply: Optional max supply allocated to this grouppayments: List of accepted payment options (can be empty for free mints)start_time: Start time in ISO formatend_time: Optional end time in ISO format
Payment Fields
Each mint group can include one or more payment objects. Each payment supports:
coin: Coin type (e.g.0x2::sui::SUI)routes: Where the funds go - supports:method: Currently onlytransferis supportedamount: Amount in smallest unit (e.g. 1000000 for 1 SUI)destination: Wallet address to receive the funds (or null for burn)
You may provide up to 2 payment methods per group and each method can have multiple routes.
Notes
- All payments are denominated in SUI or custom coins (
0x...::...::COIN) - Free mints are valid (leave
paymentsas an empty array) - Fixed metadata support is optional
- Collections with
is_immutable: truecannot be updated after deployment