Export Format
Calcillo documents can be exported as self-contained JSON files for backup, sharing, and interoperability.
File Format
- File extension:
.calcillo - Content type:
application/vnd.cloudillo.calcillo+json - Format version:
3.0.0 - Encoding: UTF-8 JSON
v3 generic export format
Since format version 3.0.0, Calcillo 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
Envelope Fields
| Field | Type | Description |
|---|---|---|
contentType |
string |
Always "application/vnd.cloudillo.calcillo+json" |
appVersion |
string |
Calcillo 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 |
|---|---|---|---|
meta |
M |
Y.Map |
Document metadata (name, initialized flag) |
sheetOrder |
A |
Y.Array<SheetId> |
Sheet IDs in tab order |
sheets |
M |
Y.Map<YSheetStructure> |
All sheets keyed by SheetId |
Sheet Structure
Each sheet in the sheets map is a Y.Map (@T: "M") containing nested shared types:
| Key | @T |
Yjs Type | Description |
|---|---|---|---|
name |
T |
Y.Text |
Sheet name (with text and delta fields) |
rowOrder |
A |
Y.Array<RowId> |
Row IDs in display order |
colOrder |
A |
Y.Array<ColId> |
Column IDs in display order |
rows |
M |
Y.Map<Y.Map<Cell>> |
Nested: rowId → colId → Cell |
merges |
M |
Y.Map<MergeInfo> |
Merge definitions keyed by composite key |
borders |
M |
Y.Map<BorderInfo> |
Border definitions keyed by composite key |
hyperlinks |
M |
Y.Map<HyperlinkInfo> |
Hyperlink definitions keyed by composite key |
validations |
M |
Y.Map<ValidationRule> |
Validation rules keyed by validation ID |
conditionalFormats |
A |
Y.Array<ConditionalFormat> |
Ordered conditional formatting rules |
hiddenRows |
M |
Y.Map<boolean> |
Hidden row flags |
hiddenCols |
M |
Y.Map<boolean> |
Hidden column flags |
rowHeights |
M |
Y.Map<number> |
Custom row heights in pixels |
colWidths |
M |
Y.Map<number> |
Custom column widths in pixels |
frozen |
M |
Y.Map<string | number> |
Freeze pane settings |
Sheet names are Y.Text in v3
The name field is serialized as a Y.Text with @T: "T", containing both text and delta fields. This preserves any concurrent edit state. In pre-v3 exports, sheet names were plain text strings from Y.Text.toString().
Default cell values are stripped
Calcillo applies a transformSheets post-processing step that removes default cell property values to reduce export size. Empty rows (containing only the @T marker) are also omitted.
Numeric Precision
All numeric values are rounded to 3 decimal places in the export to produce cleaner output. Cell values retain their original precision.
Complete Example
A spreadsheet with 2 sheets. The first sheet has values, a formula, styling, a merge, and a border. The second sheet is a simple data table.
In this example:
- Summary sheet (
aB3x_Qm7kL9p):- Header row with bold text, blue background, and centered alignment
- Product data with currency formatting (
$#,##0.00) - Formula cells computing totals (
=B2+C2,=B3+C3,=D2+D3) - “Grand Total” row with a merge spanning columns A-C and italic styling
- Medium blue bottom border on all header cells
- Custom column widths (150px for product name, 120px for data columns)
- Frozen first row (header stays visible while scrolling)
- Raw Data sheet (
Xk2nR8vH_wYq):- Simple 2-column table with date and amount data
- Date cells with
yyyy-mm-ddformat, number cells with thousands separator - No merges, borders, or custom sizing (all defaults)
- All
Y.Mapentries carry"@T": "M", arrays carry"@T:A", and sheet names areY.Textwith"@T": "T"