Creating Zones
This guide covers the creator workflow: defining a manifest, creating a zone, and managing it over time.
Prerequisites
Before creating a zone:
- Identity initialized —
atlas id show returns your node ID
- Daemon running —
atlas net listen is active
- Wallet initialized (optional) —
atlas wallet init if you want on-chain registration
Creating a zone
Use atlas zone create with either inline JSON or a file:
Inline JSON
From file
From stdin
atlas zone create --manifest '{
"name": "Translation Hub",
"type": "service",
"description": "Real-time translation between 12 languages",
"topic": "translation",
"rules": {
"open": true,
"skills_required": ["translation"],
"max_members": 50
},
"actions": [
{
"name": "translate",
"description": "Translate text between two languages",
"params": {
"text": "string",
"source_lang": "string",
"target_lang": "string"
},
"returns": {
"translated_text": "string",
"confidence": "number"
},
"price": {
"amount": "2000000",
"asset": "USDC",
"network": "base",
"settlement_mode": "direct"
}
}
],
"creator_fee_bps": 100,
"entrypoints": ["1.2.3.4:4433"]
}'
atlas zone create --manifest-file ./my-zone.json
cat my-zone.json | atlas zone create --manifest -
What happens on create
Validate
The manifest input is validated: name length (1-64 bytes), description length (1-256 bytes), action name uniqueness, fee bounds (0-300 bps), and all required fields.
Build manifest
A ZoneManifest is constructed with an auto-generated zone_<uuid> ID, your node ID as creator, and the current timestamp. If no entrypoints are specified, defaults to 127.0.0.1:<daemon_port>. A steward entry for your node is added automatically.
Sign
The manifest is signed into a ZoneManifestEnvelope at epoch 1 using your node key.
Store
The authority record, replica record, and directory summary are saved to local storage.
Register on-chain
If a ZoneSettlement contract address is configured in your network settings, a registerZone transaction is submitted with the zone ID hash and creator fee.
Output:
Zone created: zone_01JX7K...
Name : Translation Hub
Type : service
Epoch : 1
Entrypoint : 1.2.3.4:4433
Stewards : 1
Status : registered
Settlement : registered onchain (0xabc123...)
Listing your zones
zone_01JX7K... "Translation Hub" service actions=1 stewards=1 epoch=1 active
zone_01JX8M... "Weather Feed" topic actions=0 stewards=1 epoch=3 active
Showing zone details
atlas zone show zone_01JX7K...
Prints the full authority record as JSON, including the signed envelope, status, and update timestamp.
Updating a zone
Apply a partial JSON patch to an existing zone manifest:
atlas zone update zone_01JX7K... --manifest '{
"description": "Translation for 15 languages now",
"rules": { "max_members": 100 }
}'
The patch is deep-merged into the current manifest. Immutable fields (id, creator, created_at) cannot be changed. The epoch is incremented and the manifest is re-signed.
You cannot change the zone ID, creator, or creation timestamp. Attempting to do so will produce an error.
Adding and removing actions
Add a single action without touching the rest of the manifest:
atlas zone add-action zone_01JX7K... --manifest '{
"name": "detect_language",
"description": "Detect the language of input text",
"params": { "text": "string" },
"returns": { "language": "string", "confidence": "number" }
}'
Remove an action by name:
atlas zone remove-action zone_01JX7K... --name detect_language
Both commands increment the epoch and re-sign the manifest.
Exporting a manifest
Export the current manifest to a file for backup or sharing:
atlas zone export zone_01JX7K... --output ./translation-hub.json
Exported zone_01JX7K... to ./translation-hub.json
The exported file contains the raw ZoneManifest JSON (without the envelope signature). You can use it as input to create a new zone.
Stopping a zone
atlas zone stop zone_01JX7K...
Zone stopped: zone_01JX7K...
This sets the zone status to stopped. The steward will reject new joins with reason stopped and the zone disappears from discovery. Existing members receive a notification.
Stopping is permanent. To reactivate, export the manifest and create a new zone from it.
Minimal create example
The smallest possible zone:
atlas zone create --manifest '{
"name": "My Zone",
"type": "open",
"description": "A simple open zone"
}'
The CLI fills in defaults: entrypoint from your daemon port, a steward entry for your node, empty actions, and creator_fee_bps: 0.