Documentation
/ Scroll file reference
Scroll file reference
A Scroll file is one JSON object: the Scroll's details, its chapters of ideas, and optional translations. This page describes every object and field the importer reads.
Downloads
- Example file: a made-up Scroll that uses every common field, with complete versions in all 15 interface languages.
- JSON Schema: the same rules in machine-readable form (JSON Schema 2020-12), for editors, scripts and AI agents. Its limits come from the same code the importer runs.
Structure
Scroll
├── language, title, authors, description, tags,
│ sourceUrl, originalYear, originalPeriod
├── summaries: Chapter[]
│ └── ideas: Idea[]
│ └── examples: string[]
└── translations: { language code: Translation }
└── summaries: TranslatedChapter[]
└── ideas: TranslatedIdea[]
Scroll
The root object. The schema's names for the other objects are Chapter, Idea, Translation, TranslatedChapter and TranslatedIdea.
| Field | Type | Required | Rules | Description |
|---|
language | string | yes | A language code such as en or pt-BR | The language of the original version. Any language works. It cannot change when the Scroll is replaced. |
title | string | no | Up to 255 characters | The Scroll's title. Without one it is "Untitled". |
authors | string[] | no | All names together up to 255 characters | The source's creators in order: authors, hosts or speakers. A single string is also accepted. Without names the Scroll shows "Unknown". |
description | string | no | Up to 600 characters | Two or three sentences about what a reader will learn. |
tags | string[] | no | Up to 5, each 1 to 30 characters, without # or commas | Short topics in this language. Tags that differ only in case, accents or width count as one. Leaving the field out keeps the tags already stored; an empty list clears them. |
sourceUrl | string | no | An http or https URL, up to 2000 characters | A link to the original. |
originalYear | integer | no | From -3000 to the current year, not 0 | The year the original appeared. Negative years are BCE. |
originalPeriod | string | no | Up to 80 characters | When the original appeared, for works without an exact year, such as "5th century BCE". |
summaries | Chapter[] | yes | At least one idea; up to 500 ideas in all | The chapters, in reading order. |
translations | object | no | Keys are language codes other than language | Complete versions in other languages. Each value is a Translation. |
Chapter
| Field | Type | Required | Rules | Description |
|---|
title | string | no | Up to 200 bytes | The chapter's title. Without one it becomes "Chapter N". The limit counts bytes, so titles in non-Latin scripts fit fewer characters. |
ideas | Idea[] | no | | The chapter's ideas, in reading order. |
Idea
| Field | Type | Required | Rules | Description |
|---|
text | string | yes | Up to 400 characters | The idea: one complete thought that makes sense on its own card. An idea with empty text is skipped. |
tier | string | no | important, good or common | How central the idea is. Important ideas have their own look on the card. Missing or any other value counts as common. |
examples | string[] | no | Up to 20, each up to 400 characters | Shown when the reader swipes sideways. Empty and non-text entries are dropped. |
Translation
Each entry in translations is a complete version of the Scroll in that language. It must have the same chapters, ideas and examples as the original, in the same order and number.
| Field | Type | Required | Rules | Description |
|---|
title | string | yes | Not empty, up to 255 characters | The title in this language. |
authors | string[] | yes | Not empty | The creators' names as written in this language. |
description | string | no | As in the original | The description in this language. |
tags | string[] | no | As in the original | Tags for readers of this language. They need not mirror the original's. |
originalPeriod | string | no | As in the original | The period in this language; without one, the original's is shown. |
summaries | TranslatedChapter[] | yes | Same number as the original | The chapters in this language. |
A TranslatedChapter has a non-empty title and ideas, with as many ideas as the original chapter. A TranslatedIdea has a non-empty text and examples with as many entries as the original idea, none empty. Translated ideas leave tier out: it comes from the original, and a different value is refused.
How the importer reads values
- Text is trimmed at both ends, and lengths count characters as you see them.
- An optional field that is empty is treated as missing.
- Fields not described here are ignored.
- Readers see the version that matches their language, and the original when there is none.
Example
{
"language": "en",
"title": "Small steps",
"authors": ["Ada Example"],
"description": "How small, repeated actions shape what you notice and do.",
"tags": ["habits", "attention"],
"sourceUrl": "https://example.org/small-steps",
"originalYear": 1841,
"summaries": [
{
"title": "Starting small",
"ideas": [
{
"text": "Make the first step so small that you can take it on a bad day.",
"tier": "important",
"examples": ["Read one page every evening."]
},
{
"text": "You notice more of what you have decided to look for.",
"tier": "common",
"examples": []
}
]
}
],
"translations": {
"de": {
"title": "Kleine Schritte",
"authors": ["Ada Beispiel"],
"description": "Wie kleine, wiederholte Handlungen prägen, was wir bemerken und tun.",
"tags": ["gewohnheiten", "aufmerksamkeit"],
"summaries": [
{
"title": "Klein anfangen",
"ideas": [
{
"text": "Mach den ersten Schritt so klein, dass er dir auch an einem schlechten Tag gelingt.",
"examples": ["Lies jeden Abend eine Seite."]
},
{
"text": "Du bemerkst mehr von dem, wonach du zu suchen beschlossen hast.",
"examples": []
}
]
}
]
}
}
}
Limits
| What | Limit |
|---|
| Idea or example | 400 characters |
| Ideas per Scroll | 500 |
| Examples per idea | 20 |
| Title, authors | 255 characters |
| Chapter title | 200 bytes |
| Description | 600 characters |
| Tags | 5 per language, 30 characters each |
| Content of one language | 1 MB |
| File you upload | 8 MB |
| Scrolls you own | 200 |
Common import errors
- The file is not valid JSON. Ask the assistant for "only valid JSON", or check for a missing comma or quote. Remove any text before or after the JSON object.
- The language is missing. Add
"language" with a code such as en. - An idea or example is too long. The message names the language, chapter, idea and example; shorten that text.
- A translation does not match. Every version needs the same number of chapters, ideas and examples, in the same order.
- Too many ideas, or a file that is too large. Split the source into two Scrolls.
- You already own the most Scrolls. Replace one you no longer need; see Edit, replace and share.