Take one choice. Play it forward as several alternate realities β each a small living world of people who move, stress out, break rules, burn out, form friendships and rivalries, and tell you how it felt.
AltiVerse forks a single decision β a school phone ban, a 4-day week, 8- vs 12-hour hospital shifts β into 2β4 alternate realities and runs each one forward as a small, living simulation. Up to ~1,000 people with personalities, moods, and relationships move through rooms, react to the policy, and slowly pull the worlds apart. You watch when and why the realities diverge, click any person to compare how they fare across timelines, and export a full report with a recommendation.
It is a thinking tool, not a predictor. Every number and quote comes from a deterministic engine (same seed β same world, every time), with an optional local or online LLM layer to write the prose: in-character thoughts, Q&A, headlines, and reports. Use it to reason about the second-order effects of a decision β the stuff that doesn't show up in a spreadsheet.
π
Local-first & private.No backend. No telemetry. Nothing is uploaded. Runs, presets, and any API key live only in your browser'slocalStorage
. It works100% offlineout of the box.
Quick startUsing a model (optional)How to use itFeaturesScreenshotsThe simulation, explainedKeyboard shortcutsTech & architecturePrivacyFAQLicense
You need Node.js 18 or newer. Then run one line β it downloads AltiVerse, installs it, boots the app, and pops open your browser:
npx github:LeoTheAIDev/Altiverse
That's the whole install. No clone, no cd
, no account, no key, no server β it just opens at ** http://localhost:5173** (or the next free port). Nothing to run is built ahead of time.
Prefer to clone it? (keeps the repo so you can hack on it)
git clone https://github.com/LeoTheAIDev/Altiverse.git altiverse
cd altiverse
npm install
npm start # boots the app and opens your browser at http://localhost:5173
npm run dev # dev server (without auto-opening the browser)
npm run build # type-check + production build into dist/
npm run preview # serve the production build locally
node bin/altiverse.mjs # the same one-shot launcher the `altiverse` bin uses
π‘ If you
npm link
(or install globally), thecommand launches the app from anywhere.altiverse
AltiVerse runs fully offline with deterministic content. Turn on a model to get AI-written scenarios, in-character thoughts, character Q&A, daily headlines, and the final report. It speaks to any OpenAI-compatible /chat/completions endpoint β open
Settings and point it wherever you like:
| Mode | Examples | Key needed? |
|---|---|---|
| Local (nothing leaves your machine) | ||
http://localhost:11434/v1 ), LM Studio, llama.cpp |
Online*(bring your own key)*
ollama pull llama3.2 # or qwen2.5, mistral, gemma3 β¦
OLLAMA_ORIGINS=* ollama serve # OLLAMA_ORIGINS=* lets the browser reach it
One-click provider presets, a Model picker, and a Test connection button are built into Settings. Your API key is stored only in localStorage
and sent straight to the provider you chose β never to us (there is no us; there's no backend).
A run goes Setup β Studio β Report, and every run is saved to History so you can replay it.
Pick whichever entry point fits how much you want to specify:
One-click presetsβPhones at school Β· School start time Β· Office remote work Β· Hospital shifts Β· Prison food Β· Grading. Loads a complete scenario; just press play.Describe it in a sentence*(needs a model)β e.g."A hospital deciding between 8- and 12-hour nursing shifts β who burns out, who stays sharp, and how patient care changes."*The model fills in the environment, cast, metrics, and realities.Build it field by fieldβ full control over environment, the question, each reality's policy, the groups of people, named/pinned characters, metrics, number of days, and the random seed.
Press play and watch the worlds run forward day by day on their own living maps. People move between rooms, get stressed, break rules, burn out, bond, and clash. Scrub the timeline, change speed, and click anyone to open their cross-reality card. Live metrics, trends, the divergence tree, the wellbeing histogram, causal chains, and a per-day newspaper headline all update as you go.
Open the Report for an executive summary, in-character interviews, per-metric explanations, and a recommendation for which reality to pick β then export it to Markdown or PDF.
-
Fork 2β4 realities from one shared baseline and run them on asingle synchronized timeline. - Each reality gets its own living mapβ a pannable 2-D world of rooms (classrooms, hallway, cafeteria, playground, officesβ¦) with agents drifting around via smooth, physics-based motion. - A per-day Daily Fork newspaper headline for each reality (deterministic, or AI-rewritten on demand).
-
Up to ~1,000 people with archetypes (theanxious overachiever,jokester,rule-bender,weary veteranβ¦), emoji, roles, and personalitytraits(stress-prone, rule-prone, burnout-prone). - The same person exists in every realityβ so you can see howthis exact individualfares under each policy. - Emergent relationships, rivalries, popularity, and rumours that spread day to day β none of it scripted. Click anyone for a card: their mood strip across all days, a wellbeing score, friends & rivals, AI-written thoughts, and a Q&A box toask them questions in character.
Live metrics(0β100) compared across realities β use the** 8 defaults**(Focus, Grades, Trust, Stress, Burnout, Rule-breaking, Conflict, Corner-cutting) or define** your own**(up to 10); direction (βhigher is betterβ vs βlower is betterβ) is auto-detected.** Metric trends**β sparklines per metric, every reality on one chart.** Divergence tree**β an SVG fan from the shared baseline showing exactly which day the worlds split.** Wellbeing histogram**β thedistributionof how people are doing, not just the average.Causal chainsβ arule β consequence β second-order effectbreakdown for each reality.
- Works with any OpenAI-compatible endpointβ local (Ollama, LM Studio, llama.cpp) or online (OpenAI, OpenRouter, Groq, Together). - Powers AI scenario generation, in-character thoughts & Q&A, daily headlines, per-metric explanations, interviews, and the recommendation.
- Robust to small-model quirks: malformed JSON is auto-repaired with
.
jsonrepair
Deterministic engineβ a seeded Mulberry32 PRNG means the same seed always produces the same world.** Reseedto explore variations without re-calling the model.- Full timeline controlsβ , step day-by-day, scrub, and 0.5Γ / 1Γ / 2Γ / 4Γ**speeds. Historyβ every run is saved (up to 24), replayable, and resumable.- Export the report to Markdown / PDF.
No backend, no telemetry, nothing uploaded. Runs, presets, and keys live only in your browser. Fully usable offline.
| Concept | What it means |
|---|---|
| Reality / branch | |
| One alternate world forked from the baseline, defined by a policy (e.g. βConfiscate phones at the doorβ). 2β4 per run. | |
| Persona | |
| A person who exists across all realities β fixed identity, name, archetype, emoji, and traits. | |
| Agent | |
| That persona on a given day in a given reality β with state (stressed / rule-breaking / burned-out) and a position in a room. | |
| Metric | |
| A 0β100 measure (Focus, Stress, Trust, β¦). Default set of 8, or define up to 10 of your own. | |
| Event | |
| Something that happened that day β policy, organic (state-driven), or social (a bond, a clash, a rumour). | |
| Divergence | |
| The metric-distance between realities over time, the day they first split, and the top metrics driving the gap. | |
| Causal chain | |
| A rule β consequence β second-order effect narrative explaining a reality's movement. | |
| Seed | |
| The integer that makes a run reproducible. Same seed β identical world. Reseed bumps it to explore variations. |
Environments ship as presets β School, Office, Startup, Hospital, Prison, Summer Camp β each with its own roles (student/teacher, employee/manager, nurse/patientβ¦) and rooms. Type anything else and it builds a custom environment around your text.
Defaults at a glance: seed 20260607
Β· 30 days Β· 18 members + 4 staff Β· 2 realities Β· 8 metrics Β· speed 1Γ Β· model llama3.2
@ http://localhost:11434/v1
.
(in the Studio)
| Key | Action |
|---|---|
Space |
|
| Play / | |
β / β |
|
| Step one day back / forward | |
Home / End |
|
| Jump to the first / last day | |
Esc |
|
| Close the open character card | |
| click a person | |
| Open their cross-reality card |
Vite + React + TypeScript. No backend, no build step required to run (npm start
).Deterministic coreβ a Mulberry32 PRNG drives every world; each branch runs on a derived seed so realities stay independent yet reproducible.LLM layerβ a thin, dependency-light client (plainfetch
) against any OpenAI-compatible/chat/completions
endpoint, with JSON repair for small models. Disable it and everything still works deterministically.Smooth motionβ agents move with spring physics + damping, written straight to the DOM so hundreds render without per-frame React re-renders.Persistenceβ runs, presets, and config live inlocalStorage
(history capped at 24 entries).
src/
βββ sim/ # deterministic engine: types, scenario builder, engine, RNG
βββ llm/ # OpenAI-compatible client + scenario / thoughts / explain / report
βββ components/ # the studio, maps, panels, cards, report, setup, pages
βββ hooks/ # simulation clock + agent motion
βββ app/ # run history & persistence
AltiVerse has no backend and collects nothing.
- Runs, saved presets, and any API key live only in your browser's
localStorage
. - With a local model (Ollama / LM Studio / llama.cpp),nothing leaves your machine. - With an online model, requests godirectly from your browser to the provider you chose β your key is never sent anywhere else. - Works fully offline with deterministic content and no model at all.
Does it predict the future? No. It's a structured thinking tool for second-order effects β a way to feel out the trade-offs of a decision, not a forecast.
Do I need an API key or internet? No. It runs fully offline and deterministically. A model is optional and only adds the written prose (thoughts, headlines, reports).
Will my API key leak? It's stored only in your browser and sent only to the provider you pick. There's no backend to leak it to.
Why do two runs look identical? Because they're deterministic β same seed, same world. Hit Reseed to explore a variation.
Can I add my own metrics / people / environment? Yes β define custom metrics (up to 10), pin named characters with their own personalities, and type any environment you like.
MIT β open source. Fork it, change it, ship it.
Built with Vite Β· React Β· TypeScript β and a deterministic little universe.