ortus, -ūs (m.): a rising, a beginning, a birth — of the sun, of a spring, of a life.
The cosmos you kindled, now yours to keep. ORTUS is a living, persistent world you sow once and then tend over days and weeks. It grows and drifts in real time — even while you are away, it computes the minutes you missed and lives them — it remembers being tended, and it is never the same twice.
Not a game and not a gallery. A living thing.
It is the third and final movement of a trilogy:
| ANIMA | a cabinet of living things | you watch |
| VIGILIA | an interactive fiction at the end of worlds | you end, and choose what is carried |
| ORTUS | the world your spark became | you tend |
VIGILIA ends, literally, with a kindling. ORTUS is what the spark became.
- The Sowing. On your first visit, a single ember. Three soft choices — the ground, the first living thing, the sky — shape the world's seed. Then it kindles, and the first day plays out before you: germination, first blooms, a first creature waking, nightfall's bioluminescence, and a dawn that lands at your real time of day.
- Tending. Gentle verbs, spent in dew that condenses with real time (a reason to return, never a chore): sow a sleeping seed, call the rain, bless a plant, prune one back to the cycle, and name a newly-arisen kind — a name it keeps forever, even through extinction and return.
- Dum aberas — while you were away. Every return opens with a quiet digest of the births, first blooms, new kinds, returns from the seed-bank and weather-wonders you missed; a real absence is replayed as a time-lapse before it folds away.
- The Chronicle. The Keeper's Book remembers the world's whole arc — an illuminated Annals (the sowing, each naming, each named kind's first fall and first return) beside the rolling record.
- Never the same twice. Genomes drift; lineages split into new kinds with generated Latin binomials; extinction is never final — kinds collapse into the seed-bank as spores and return, changed. Growth, decay, return.
- The Constellation. A second lens on the same world: its kinds seen from above as a slowly wheeling star chart, kinship (speciation) drawn as the lines of a constellation. A star's brightness is its number; dormant kinds are hollow rings; the kinds you named burn gold.
- The hillside remembers. A meteor leaves a stone that stands there always; where a kind grew thickest, the soil stays rich (a little lusher, forever). The land becomes a record of its history.
- Spore drift. Release a single kind as a spore-glyph and give it to a friend's world, where it drifts into their seed-bank to wake, changed — life shared between worlds, not replaced.
Keyboard: S snapshot · B book · C the Constellation · N name · R rain · Esc close.
It is a dependency-free static site. Double-click index.html — it runs from file://.
Or serve the folder and open it. No build step, no bundler, no network calls (fonts are
self-hosted for GDPR).
Your world lives in localStorage; carry it to another browser or device with the seed-glyph
(the carry button) — because the engine is deterministic with catch-up, an exported glyph is
the world, reconstructed exactly.
Two layers:
- Macro (persistent, deterministic). An individual-based ecology at 1 tick = 1 real minute.
All state lives here. It runs headless in Node, receives time only through
advance(world, now), and draws all randomness from the world's own PRNG stream —Math.random/Dateare forbidden inside the engine, so the same seed always lives the same life. On load it replays the minutes you were gone (a 92-day catch-up runs in well under half a second). - Micro (ephemeral, 60 fps). The embodiment. Plants and creatures are instantiated from macro state with stable per-individual seeds, so the same plant stands on the same spot with the same silhouette after a reload. Nothing here is saved, and it never touches the engine's PRNG.
The world can wither but never ends: a deterministic revival floor forces life back after a barren spell, by construction rather than by tuning.
index.html · css/ortus.css
js/prng.js sfc32 + hashing
js/genome.js heredity, drift, speciation, Latin binomials
js/engine.js the macro simulation (pure, Node-loadable)
js/save.js key-versioned localStorage, one-Keeper guard, export/import
js/render.js canvas: sky, terrain, landmarks, sprite-cached plants, creatures, event performances
js/chart.js the Constellation — a read-only star chart of the kinds and their kinship
js/audio.js an optional soundscape (off by default)
js/ui.js the Sowing, HUD, chronicle, verbs, naming, Dum aberas, the seed-glyph, spore drift
fonts/ self-hosted Young Serif · Newsreader · IBM Plex Mono
docs/BIBLE.md the full design record
cd tools && npm install # puppeteer for real-browser checks
node validate.js --seeds 27 --days 90 # determinism · stability · liveliness · catch-up
node smoke.js # save/load · export/import · hostile-blob rejection · one-Keeper
node gen-images.js # regenerate icons + og-image
node shots.js # headless-Chromium screenshots of the live app
The validator enforces the hard contracts as a build-time gate: same seed ⇒ identical life, no NaN, populations bounded, the world alive after 90 days across all 27 sowing combinations, the world breathes (not pinned at cap, seasons bite, fauna present), and catch-up stays fast.
Built in the ANIMA/VIGILIA lineage — self-contained, static, made to be kept.
Design record in docs/BIBLE.md. Deployment in DEPLOY.md.