export format

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

File Format

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

Since format version 3.0.0, Prezillo 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.prezillo+json",
  "appVersion": "0.5.0",
  "formatVersion": "3.0.0",
  "exportedAt": "2026-01-15T14:30:00.000Z",
  "data": {
    "m": { "@T": "M", ... },
    "o": { "@T": "M", ... },
    "c": { "@T": "M", ... },
    "r": [ "@T:A", ... ],
    "ch": { "@T": "M", ... },
    "v": { "@T": "M", ... },
    "vo": [ "@T:A", ... ],
    "rt": { "@T": "M", ... },
    "st": { "@T": "M", ... },
    "tpl": { "@T": "M", ... },
    "tpo": { "@T": "M", ... },
    "pl": { "@T": "M", ... }
  }
}

Envelope Fields

Field Type Description
contentType string Always "application/vnd.cloudillo.prezillo+json"
appVersion string Prezillo 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, default dimensions, grid settings)
o M Y.Map<StoredObject> All objects keyed by ObjectId
c M Y.Map<StoredContainer> All containers keyed by ContainerId
r A Y.Array<ChildRef> Root-level children in order
ch M Y.Map<Y.Array<ChildRef>> Children per container, keyed by ContainerId
v M Y.Map<StoredView> All views keyed by ViewId
vo A Y.Array<string> ViewId strings in presentation order
rt M Y.Map<Y.Text> Rich text content keyed by ObjectId
st M Y.Map<StoredStyle> All styles keyed by StyleId
tpl M Y.Map<StoredTemplate> All templates keyed by TemplateId
tpo M Y.Map<Y.Array<string>> Prototype object arrays keyed by TemplateId
pl M Y.Map<StoredPalette> The document palette (single entry keyed by 'default')

Rich Text Serialization

Rich text entries in the rt map are Y.Text instances, serialized with the @T: "T" marker containing both the plain text and the full Quill Delta operations:

{
  "@T": "M",
  "aB3x_Qm7kL9p": {
    "@T": "T",
    "text": "Hello, world!",
    "delta": [
      { "insert": "Hello, " },
      { "insert": "world!", "attributes": { "bold": true } }
    ]
  }
}
Field Type Description
@T "T" Type marker indicating a Y.Text instance
text string Plain text content (for search/indexing)
delta object[] Quill Delta operations (for restoring formatting)

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 presentation with 2 slides, one text box, and one rectangle:

{
  "contentType": "application/vnd.cloudillo.prezillo+json",
  "appVersion": "0.5.0",
  "formatVersion": "3.0.0",
  "exportedAt": "2026-01-15T14:30:00.000Z",
  "data": {
    "m": {
      "@T": "M",
      "name": "My Presentation",
      "defaultViewWidth": 1920,
      "defaultViewHeight": 1080
    },
    "o": {
      "@T": "M",
      "aB3x_Qm7kL9p": {
        "@T": "M",
        "t": "T",
        "vi": "m4Jf_L1pZq8w",
        "p": "Xk2nR8vH_wYq",
        "xy": [560, 440],
        "wh": [800, 200],
        "si": "Tz8_kLmNqR2v",
        "mh": 200
      },
      "Hw5_qT2mLkJx": {
        "@T": "M",
        "t": "R",
        "vi": "nP7r_S3wKxUe",
        "p": "Xk2nR8vH_wYq",
        "xy": [460, 290],
        "wh": [1000, 500],
        "si": "Qp4_rW9xJdLm",
        "s": { "@T": "M", "f": "#4a90d9", "sw": 2 },
        "cr": 12
      }
    },
    "c": {
      "@T": "M",
      "Xk2nR8vH_wYq": {
        "@T": "M",
        "t": "L",
        "n": "Layer 1",
        "xy": [0, 0],
        "x": true
      }
    },
    "r": [
      "@T:A",
      ["@T:A", 1, "Xk2nR8vH_wYq"]
    ],
    "ch": {
      "@T": "M",
      "Xk2nR8vH_wYq": [
        "@T:A",
        ["@T:A", 0, "aB3x_Qm7kL9p"],
        ["@T:A", 0, "Hw5_qT2mLkJx"]
      ]
    },
    "v": {
      "@T": "M",
      "m4Jf_L1pZq8w": {
        "@T": "M",
        "name": "Title Slide",
        "x": 0,
        "y": 0,
        "width": 1920,
        "height": 1080,
        "backgroundColor": "#ffffff",
        "showBorder": true
      },
      "nP7r_S3wKxUe": {
        "@T": "M",
        "name": "Content",
        "x": 2020,
        "y": 0,
        "width": 1920,
        "height": 1080,
        "backgroundColor": "#f5f5f5",
        "showBorder": true
      }
    },
    "vo": ["@T:A", "m4Jf_L1pZq8w", "nP7r_S3wKxUe"],
    "rt": {
      "@T": "M",
      "aB3x_Qm7kL9p": {
        "@T": "T",
        "text": "Welcome to My Presentation",
        "delta": [
          { "insert": "Welcome to " },
          { "insert": "My Presentation", "attributes": { "bold": true } },
          { "insert": "\n" }
        ]
      }
    },
    "st": {
      "@T": "M",
      "Tz8_kLmNqR2v": {
        "@T": "M",
        "n": "Heading",
        "t": "T",
        "ff": "Inter, system-ui",
        "fs": 48,
        "fw": "bold",
        "fc": "#1a1a2e"
      },
      "Qp4_rW9xJdLm": {
        "@T": "M",
        "n": "Primary",
        "t": "S",
        "f": "#4a90d9",
        "s": "#2d5a87",
        "sw": 2,
        "cr": 8
      }
    },
    "tpl": { "@T": "M" },
    "tpo": { "@T": "M" },
    "pl": {
      "@T": "M",
      "default": {
        "@T": "M",
        "n": "Default",
        "bg": { "@T": "M", "c": "#ffffff" },
        "tx": { "@T": "M", "c": "#333333" },
        "a1": { "@T": "M", "c": "#4a90d9" },
        "a2": { "@T": "M", "c": "#5cb85c" },
        "a3": { "@T": "M", "c": "#f0ad4e" },
        "a4": { "@T": "M", "c": "#d9534f" },
        "a5": { "@T": "M", "c": "#9b59b6" },
        "a6": { "@T": "M", "c": "#1abc9c" }
      }
    }
  }
}