export format

Ideallo documents can be exported as self-contained JSON files for backup, sharing, and interoperability.

File Format

  • File extension: .ideallo
  • Content type: application/vnd.cloudillo.ideallo+json
  • Format version: 3.0.0
  • Encoding: UTF-8 JSON
v3 generic export format

Since format version 3.0.0, Ideallo uses the generic exportYDoc() serializer from @cloudillo/crdt. All Yjs types carry inline @T type markers and data keys match the raw CRDT shared type names. See v3 Generic Export Format for the full specification.

Envelope Structure

{
  "contentType": "application/vnd.cloudillo.ideallo+json",
  "appVersion": "0.5.0",
  "formatVersion": "3.0.0",
  "exportedAt": "2026-01-15T14:30:00.000Z",
  "data": {
    "m": { "@T": "M", ... },
    "o": { "@T": "M", ... },
    "r": [ "@T:A", ... ],
    "txt": { "@T": "M", ... },
    "geo": { "@T": "M", ... },
    "paths": { "@T": "M", ... }
  }
}

Envelope Fields

Field Type Description
contentType string Always "application/vnd.cloudillo.ideallo+json"
appVersion string Ideallo version that created this export
formatVersion string Export format version (currently "3.0.0")
exportedAt string ISO 8601 timestamp of export

Data Fields

Key @T Yjs Type Description
m M Y.Map Document metadata (name, background color, grid settings)
o M Y.Map<StoredObject> All objects keyed by ObjectId, using compact field names
r A Y.Array<string> Z-order array of ObjectId values (index 0 = backmost)
txt M Y.Map<Y.Text> Text content keyed by ObjectIdY.Text with text and delta fields
geo M Y.Map<Y.Array<number>> Polygon vertices keyed by ObjectId – flat [x, y, x, y, ...] arrays
paths M Y.Map<string> SVG path strings keyed by ObjectId
Text content preserves formatting in v3

The txt entries are Y.Text instances serialized with @T: "T", containing both text (plain text) and delta (Quill Delta operations). This preserves rich text formatting. In pre-v3 exports, text was a plain string from Y.Text.toJSON().

Numeric Precision

All numeric values are rounded to 3 decimal places in the export to produce cleaner output. For example, a position of [100.123456, 200.789012] becomes [100.123, 200.789].

Complete Example

A minimal whiteboard with a rectangle, text label, sticky note, and freehand path:

{
  "contentType": "application/vnd.cloudillo.ideallo+json",
  "appVersion": "0.5.0",
  "formatVersion": "3.0.0",
  "exportedAt": "2026-02-20T10:00:00.000Z",
  "data": {
    "m": {
      "@T": "M",
      "initialized": true,
      "name": "Project Planning",
      "backgroundColor": "#f8f9fa"
    },
    "o": {
      "@T": "M",
      "aB3x_Qm7kL9p": {
        "@T": "M",
        "t": "R",
        "xy": [200, 150],
        "wh": [300, 200],
        "fc": "#4a90d9",
        "sc": "#2d5a87",
        "cr": 8
      },
      "Xk2nR8vH_wYq": {
        "@T": "M",
        "t": "T",
        "xy": [250, 180],
        "wh": [200, 40],
        "sc": "n0"
      },
      "m4Jf_L1pZq8w": {
        "@T": "M",
        "t": "S",
        "xy": [550, 150],
        "wh": [200, 200],
        "fc": "#fff3cd"
      },
      "Hw5_qT2mLkJx": {
        "@T": "M",
        "t": "F",
        "xy": [100, 400],
        "wh": [180, 60],
        "sw": 3
      }
    },
    "r": [
      "@T:A",
      "aB3x_Qm7kL9p",
      "Xk2nR8vH_wYq",
      "m4Jf_L1pZq8w",
      "Hw5_qT2mLkJx"
    ],
    "txt": {
      "@T": "M",
      "Xk2nR8vH_wYq": {
        "@T": "T",
        "text": "Project Title",
        "delta": [{ "insert": "Project Title" }]
      },
      "m4Jf_L1pZq8w": {
        "@T": "T",
        "text": "Remember to update the timeline",
        "delta": [{ "insert": "Remember to update the timeline" }]
      }
    },
    "geo": { "@T": "M" },
    "paths": {
      "@T": "M",
      "Hw5_qT2mLkJx": "M 0 30 C 20 0 40 60 60 30 C 80 0 100 60 120 30 C 140 0 160 60 180 30"
    }
  }
}

In this example:

  • Rectangle (aB3x_Qm7kL9p): Blue filled rectangle with rounded corners, custom stroke color
  • Text (Xk2nR8vH_wYq): Text label positioned inside the rectangle, using default stroke color
  • Sticky (m4Jf_L1pZq8w): Yellow sticky note with reminder text
  • Freehand (Hw5_qT2mLkJx): Wavy freehand path with custom stroke width, SVG path data stored in paths map
  • The r array lists objects from back to front – the rectangle is behind everything, and the freehand path is on top
  • All Y.Map entries carry "@T": "M", the z-order array carries "@T:A", and text content uses "@T": "T" with text and delta fields