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: 2.0.0
  • Encoding: UTF-8 JSON
Same compact field names

The export format uses the same compact CRDT field names as the live document (t, xy, wh, sc, etc.). No field name translation occurs – the export is a direct serialization of the CRDT state.

Envelope Structure

{
  "contentType": "application/vnd.cloudillo.ideallo+json",
  "appVersion": "0.5.0",
  "formatVersion": "2.0.0",
  "exportedAt": "2026-01-15T14:30:00.000Z",
  "data": {
    "meta": { ... },
    "objects": { ... },
    "order": [ ... ],
    "texts": { ... },
    "geometry": { ... },
    "paths": { ... }
  }
}

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 "2.0.0")
exportedAt string ISO 8601 timestamp of export

Data Fields

Field Type Description
meta StoredMeta Document metadata (name, background color, grid settings)
objects Record<string, StoredObject> All objects keyed by ObjectId, using compact field names
order string[] Z-order array of ObjectId values (index 0 = backmost)
texts Record<string, string> Text content keyed by ObjectId – plain text from Y.Text.toJSON()
geometry Record<string, number[]> Polygon vertices keyed by ObjectId – flat [x, y, x, y, ...] arrays
paths Record<string, string> SVG path strings keyed by ObjectId
Text content is plain text in exports

The texts field contains plain text strings from Y.Text.toJSON(), not Quill Delta operations. Rich text formatting (bold, italic, etc.) is not preserved in the export. For full-fidelity backup, use the Yjs binary encoding instead.

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": "2.0.0",
  "exportedAt": "2026-02-20T10:00:00.000Z",
  "data": {
    "meta": {
      "initialized": true,
      "name": "Project Planning",
      "backgroundColor": "#f8f9fa"
    },
    "order": [
      "aB3x_Qm7kL9p",
      "Xk2nR8vH_wYq",
      "m4Jf_L1pZq8w",
      "Hw5_qT2mLkJx"
    ],
    "objects": {
      "aB3x_Qm7kL9p": {
        "t": "R",
        "xy": [200, 150],
        "wh": [300, 200],
        "fc": "#4a90d9",
        "sc": "#2d5a87",
        "cr": 8
      },
      "Xk2nR8vH_wYq": {
        "t": "T",
        "xy": [250, 180],
        "wh": [200, 40],
        "sc": "n0"
      },
      "m4Jf_L1pZq8w": {
        "t": "S",
        "xy": [550, 150],
        "wh": [200, 200],
        "fc": "#fff3cd"
      },
      "Hw5_qT2mLkJx": {
        "t": "F",
        "xy": [100, 400],
        "wh": [180, 60],
        "sw": 3
      }
    },
    "texts": {
      "Xk2nR8vH_wYq": "Project Title",
      "m4Jf_L1pZq8w": "Remember to update the timeline"
    },
    "geometry": {},
    "paths": {
      "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 order array lists objects from back to front – the rectangle is behind everything, and the freehand path is on top