Story Design
How to structure and package a story for the Reast platform — whether you write it in the built-in editor or with your own tools.
Two ways to build a story
- The platform editor (recommended for most authors) — write Rea with a live preview, manage metadata and media through forms, and publish with one click. The editor assembles the
.reastpackage for you; see For Authors for the authoring workflow itself. - Any text editor — write
.reafiles directly, then assemble them into a.reastpackage yourself: a ZIP archive with your story files understory/, media underassets/, and amanifest.jsondescribing the title, author, parts, and other metadata at the archive root. Upload the finished.reastfile to publish it. The full archive layout and every manifest field are documented in the engine's.reastpackage format reference — that page is the canonical source for what a valid package must contain.
Both paths produce the same kind of package; which one you use is a workflow preference, not a platform requirement.
A story can also turn a physical space into part of the puzzle — see Real-World Exploration Menus for building a scene the reader searches with a QR sticker, a drawn mark, and their own words.
Principles
A story that leans on Reast's platform-specific capabilities — real-world interactions, cooperative reading, multi-part structure — benefits from planning those elements before writing prose:
- Start with structure. Decide whether your story is single-part or multi-part before you write; multi-part stories use gates and cross-part links (see the spec's Narrative & Interaction section) and are harder to restructure after the fact than to plan up front.
- Treat variables as your story's memory. Domain-prefixed variables (
player.*,quest.*) are what lets later chapters react to earlier choices — decide your variable domains early so naming stays consistent across parts. - Reach for platform features deliberately. GPS, cooperative reading, and sensors are opt-in — use them where they serve the story, not as a checklist. A story that declares
sensorsorreaders > 1in its manifest is asking the reader's device or group for a real capability; only ask for what you use.
External access, custom functions, and security
A story can declare allowed_urls in its manifest to call a small, explicit set of external endpoints, and can extend its own logic with .rext extension modules (see Extending the Engine and When rules differ in .rext files). Both are deliberately narrow:
allowed_urlsis a whitelist, not a general network gateway. Only the endpoints an author lists are reachable; everything else is blocked. Treat every listed URL as something the reader's device will actually contact, and avoid endpoints that return anything you wouldn't want rendered as story text..rextextensions are sandboxed Rea, not arbitrary code. They cannot access the filesystem, the network beyond what the engine's built-ins allow, or any API outside the Rea language — see Sandbox constraints. A story cannot embed JavaScript or any other language.- Anything meant to be genuinely unforgeable — a competition answer, a paid unlock — must be verified server-side. Encrypting a
.reachapter deters casual peeking but the decryption key necessarily reaches the reader's device to render it, so it is not a security boundary; see Content Protection.