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 tofalse
for 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 onlytransfer
is 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
payments
as an empty array) - Fixed metadata support is optional
- Collections with
is_immutable: true
cannot be updated after deployment