Skip to main content

Creating Zones

This guide covers the creator workflow: defining a manifest, creating a zone, and managing it over time.

Prerequisites

Before creating a zone:
  1. Identity initializedatlas id show returns your node ID
  2. Daemon runningatlas net listen is active
  3. 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:
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"]
}'

What happens on create

1

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.
2

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.
3

Sign

The manifest is signed into a ZoneManifestEnvelope at epoch 1 using your node key.
4

Store

The authority record, replica record, and directory summary are saved to local storage.
5

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

atlas zone list
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.