Features

Sharing & export

Plain JSON, a self-contained link, or an image.

FeatureDetails
AutosaveWritten to local storage shortly after you stop editing; the toolbar shows Saved or Saving…
Export JSONDownloads the canonical format — diffable, scriptable, version-controllable
Import JSONValidated on load; unusable parts are dropped rather than breaking the canvas
Share linkCompresses the whole diagram into the URL — no server involved
Export PNGRenders the canvas at 2× on a white background

The file format

One object with a name, a list of nodes and a list of edges. Anything Nautilus does not recognise is dropped on import, so hand-written and script-generated files are safe to load.

{
  "name": "Payments platform",
  "nodes": [
    {
      "id": "api",
      "type": "nautilusNode",
      "position": { "x": 120, "y": 40 },
      "data": {
        "label": "Payments API",
        "icon": "api_server",
        "color": "green",
        "description": "Authorises and captures charges",
        "sim": {
          "capacity": 4000,
          "replicas": 6,
          "latencyMs": 25,
          "errorRate": 0.001
        }
      }
    }
  ],
  "edges": [
    {
      "id": "e1",
      "source": "api",
      "target": "db",
      "type": "deletableEdge",
      "label": "cache miss",
      "data": { "sim": { "share": 0.15, "fanout": 1 } }
    }
  ],
  "sim": {
    "requestsPerSecond": 10000,
    "timeoutMs": 500,
    "payloadKb": 8,
    "targetUtilization": 0.7,
    "burstFactor": 2
  }
}

Node fields

FieldMeaning
idUnique within the file. Duplicates are dropped on import.
typenautilusNode
positionCanvas coordinates, { x, y }.
data.labelName shown on the node.
data.iconKey from the icon reference.
data.colordefault | blue | green | red | yellow | purple | orange
data.descriptionFree text shown on the node and read by the AI assistant.
data.simLoad model — see below. Optional.

Simulation fields

FieldWhereDefault
sim.capacitynode — requests/second one replica servesunbounded
sim.replicasnode — identical instances1
sim.latencyMsnode — service time before queueing20
sim.errorRatenode — baseline failure rate, 0–10
sim.downnode — failure injection; the node serves nothingabsent
sim.costPerHournode — price of one replica per hour0
sim.hitRatenode — share answered here, not forwarded, 0–10
sim.queuenode — buffers past capacity instead of droppingauto by icon
sim.shareedge — fraction of requests taking this edge, 0–11
sim.fanoutedge — calls made per request1
sim.asyncedge — fire-and-forget; latency past it leaves the request pathauto into queues

These survive export, import, share links and autosave, so a diagram carries its capacity model with it. Missing fields fall back to the defaults above rather than to zero.

The top-level sim object holds the playground parameters — offered load, timeout budget, payload size, target utilisation and burst factor — so a shared link reproduces the exact scenario instead of resetting to the defaults.

Edge fields

FieldMeaning
idUnique within the file.
source / targetNode ids. Edges pointing at a missing node are dropped on import.
typedeletableEdge
labelOptional text rendered on the connection.
animatedOptional boolean, purely visual.
data.simRouting model — share and fanout.
Share links are unlisted, not private
The diagram is encoded in the URL itself. Anyone holding the link — or reading a referrer header or a proxy log — has the diagram. Don't share internal architecture this way; export a file instead.