Repository navigation
Home
The full-stack framework where the primary developer is an AI agent. Rails' philosophy on Bun + Postgres + SolidJS: everything is one of eight primitives, and one action declaration projects into an HTTP route, an OpenAPI operation, a typed client, a job handle, an MCP tool and a test, all behind one policy. x verify is the contract: green means shippable.
bunx create-ultimate myapp && cd myapp && bun run setup && bun run devNo Docker and no service: embedded Postgres, in-process NATS, local storage, a seeded database and a dev dashboard at /_x. bun run setup is not optional: x new installs nothing, so x dev straight after cd stops on X_BUILD_FAILED naming bun install → Getting started · Bare VM.
Look first: the live demo, a social network deployed from main on every green push. Fabricated data, every row decided by a policy. Source: dummy/social-media-clone/.
| Pick it when | Do not pick it when |
|---|---|
an agent writes most of your code: one way per task, --json everywhere, every error a code, a cause and a fix: command |
you need Node.js or Deno: Bun only |
you want authz written once: one policy guards HTTP, live queries, jobs, MCP and admin |
your database is not Postgres, or your UI is not SolidJS |
| you want jobs, realtime, auth, mail, storage, i18n, SEO, admin and MCP decided and gated | you deploy to Vercel functions, Lambda or Workers: containers only |
| the app may grow: the same code from one PaaS process to Kubernetes | you want a plugin API (an app wraps a primitive instead), or multi-node realtime proven today (Known gaps) |
Yes at both ends, and that is the design. A homework assignment or a weekend idea gets a running app in four commands with nothing to install and nothing to choose; a very large product gets the scale ladder, the tier boundaries and the same 21-step gate the beginner's app already ran — the list is VERIFY_STEP_NAMES in packages/cli/src/verify-step.ts, whole or not at all. One framework, no lite mode — axiom 1 forbids the second path a lite mode would be.
The measured version of that claim, with the command behind every number: docs/idea/21-the-range.md.
Proof, each with a command: what npm serves is npm view @ultimat3/core version; that every package is published and attested, bun run scripts/registry-audit.ts --json in the repository; the rolling-restart proof is ci.yml's deploy-proof job; realtime recovery on one node is measured in scripts/bench/results/ → Realtime. How each release was published, attestations included: PUBLISHING.md. This wiki is the only public documentation surface.
Those facts are repeated on several pages because the wiki is plain markdown with no build step. Change them at the source first, then here: docs/idea/14-roadmap.md owns milestone status, CHANGELOG.md owns the version, scripts/bench/results/ owns the benchmark, and VERIFY_STEP_NAMES in packages/cli/src/verify-step.ts owns the x verify step list.
| If you are | Read, in order |
|---|---|
| Evaluating it | Getting started → Bare VM → The eight primitives → FAQ |
| Moving a production app off another stack | Migrating an existing app → Known gaps → Entities and migrations |
| Building an app | Installation → Project layout → Actions → Testing |
| An agent driving the framework |
x docs "<question>" first, offline from the install → CLI reference → Error codes → MCP and AI → Agents
|
| Operating it | Configuration → Deployment → Observability → Troubleshooting |
| Deciding whether to trust it | Known gaps → FAQ → Stability → Upgrading |
| Contributing | Contributing → Project layout → Testing |
| Page | What it covers |
|---|---|
| Getting started | zero to a running app, one action, one green x verify
|
| Installation | prerequisites, x new, typed env, editor and MCP client setup |
| Bare VM | the four commands a fresh Ubuntu box with bun and git runs, and why no Docker and no service is needed |
| Project layout | the generated monorepo, the four surfaces, feature slices, the hard boundaries |
| Migrating an existing app | strangler fig off Rails/Node/Django, adopting a live schema, identity during cutover, and what does not work yet |
| Compared | each stack this gets compared to: when to pick it instead, what you give up here, and the measured figures with the commands that reproduce them |
| Shapes |
x new --shape api, blog and dashboard: what each writes and what it leaves out |
Follow in order. Each page states what it was executed against in its own first line — tutorial 1 its own measurement. As of 2026-11-03, 2–4 were re-run by hand, whole, in the app tutorial 1 leaves, and 5 with Docker up to the point a real host is needed. scripts/tutorial-run.ts (workflow tutorial-run.yml, on main) runs 1–4 in order and never 5; it has not yet run green. A workaround for a gap fixed since has been removed rather than left to mislead.
| Page | You end with |
|---|---|
| 1 · First app | a scaffolded app running on x dev, green gate, no Docker |
| 2 · First feature | one action projected into five surfaces, with tests |
| 3 · Auth and admin | roles, policies, a real login flow, and the admin's detail pages, actions and batches |
| 4 · Jobs and realtime | a durable job, a cron task, a live query |
| 5 · Deploy free | the image running on a free PaaS tier, migrations on release |
| 6 · Growing up | the rung you should be on, and the signal to climb |
| Page | What it covers |
|---|---|
| The eight primitives |
entity, policy, action, mutator, query, job, route, task — the whole vocabulary |
| Building your own base | wrap a primitive in your own factory: tenantEntity, auditedMutator, the two caveats, and why nothing downstream notices |
| Actions | every field, the six generated artifacts, the mutator twin, contract tests |
| Entities and migrations | tables, invariants, tenancy, the typed-handle repo, .sealed() columns, x db gen, the schema dump, drift, branch databases |
| Policies and authz |
can(), where a policy is evaluated, denials, tenancy scoping |
| Queries and live queries | reads, live: true, per-row policy, bounded SQL |
| Jobs and workflows | transactional outbox, durable steps, idempotency, keyed concurrency, onSettled, operating a queue, webhook(), drivers |
| Scheduled tasks | cron with an explicit tz, leader election, next-run introspection |
| Routes and render modes | five render modes, hydration timing, budgets, enforced SEO |
| Page | What it covers |
|---|---|
| Realtime | channels → live queries → local-first, the pipeline, the reconnect problem |
| Caching and invalidation | four tiers, one tag graph, one-hop fanout |
| Batching and preloading | JIT preload, .preload(), insertAll/upsertAll/updateWhere, inBatches, the tenancy guarantee |
| N+1 detection | the two codes, expectedQueryLoop, four surfaces, why prod pays nothing |
| PWA and offline | generated sw.js, precache budgets, version skew |
| Client data | the one browser transport (browserClient, useQuery), the record store, and the gate that refuses a raw fetch(
|
| Client navigation | soft navigation over server-rendered pages: one config line per surface, swap, prefetch, history, focus |
| MCP and AI | the dev MCP server, every action as a tool, the llm() gateway, evals |
| Agents |
agent() as an action factory, tools as real actions, hive(), agentJob(), and the at-least-once trap |
| Admin dashboard |
defineAdmin() serving list, detail and form per entity with no host code; filters, scopes, sections, related rows, actions with when and batch, the audit log, the jobs dashboard; zero JavaScript; its MCP surface |
| Scraping |
scrape() as a job factory, the driver-blind page vocabulary, robots and host gates, per-run egress, a rented CDP browser, usage, sealed sessions, mid-run prompts |
| Auth | sessions, OAuth, MFA, API keys and service tokens — the output is an Actor
|
| one template renders HTML and text, every string a key, sending is a job | |
| Notify |
notifier() as a job factory: fan-out, preference gate, digest window, ledger, inbox |
| Storage and uploads | named disks, safe keys, the three-call signed upload, quarantine, orphans |
| Feature flags | permanent switches and temporary ones that cannot be forgotten |
| SEO | enforced meta, typed JSON-LD, sitemaps, fail-closed robots, feeds, responsive images |
| Page | What it covers |
|---|---|
| I18n | flat catalogs, loud misses, locale routing, hreflang
|
| Theming | 24 semantic colour roles as RGB channels, every token scale, breakpoint and layout mixins, defineTheme(), what contrast is gated |
| Interface rules | how a screen must behave, and which of the app's guards/ refuses each rule |
| UI components | the four page composites, and the generated UI component catalog |
| Timezones and dates | store UTC, format with an explicit IANA zone, frozen clocks in tests |
| Money |
Money = { minor, currency }, never a float |
| Outbound HTTP |
outbound(): one vendor call with a whole-call deadline, the caller's signal, safe-only retry, idle and byte bounds, dial: 'public' pinning, and breaker()
|
| Resource management |
Disposable db resources, using/await using, idempotent release, compile-time pins |
| Migrations and backfills | one migration engine and ledger, concurrent index builds and drops outside a transaction, the destructive-migration rail, backfill() as a job factory |
| Testing | six test types, cloned databases, sealed network, the coverage floor, silent runs, x verify
|
| Page | What it covers |
|---|---|
| CLI reference | every x command and flag, with --json examples |
| Error codes | every X_* code: meaning, cause, exact fix |
| Configuration | every app.config.ts field and every env var |
| Deployment | one image, six roles, ROLE/PORT, drain, compose, Helm, targets, the prebuilt island store, docs/ops/
|
| Deploy recipes | per host — Compose, the chart, Fly.io, Render, Railway, Heroku, bare VM — the build source, port, health path, release command and services, each marked executed or not |
| Observability | counters, gauges, histograms, process and pool gauges, MetricExporter, the Prometheus body, /metrics on its own port, and what the chart still cannot reach |
| Known gaps | every defect and unfinished seam in the published release, named |
| Upgrading | one section per major with every manual edit, the in-flight major as a checklist under [Unreleased], version skew — and how x upgrade walks them, one major per run |
| Stability | what semver covers and what it does not, one major per 90 days from v30, the support window, deprecation, the security exception |
| Troubleshooting | symptom → cause → fix |
| FAQ | why Bun only, why no GraphQL, is it production ready |
| Contributing | a pointer: CONTRIBUTING.md is the one contributor guide |
| Axiom | Consequence |
|---|---|
| One way to do each thing | no adapter zoo, no mode: escape hatches. Removing an alternative is a feature |
| Define once, project everywhere | one action → HTTP route + OpenAPI + typed client + job handle + MCP tool + tests |
| Enforced, not documented | a convention that isn't a build error doesn't exist |
| Errors are instructions | stable X_* code + cause + exact fix command + --json
|
| One command means shippable |
x verify green = deployable |
| The static path never pays for the app path |
site/ cannot import app/; 0kb JS is structural |
| Deploy anywhere = containers only | zero platform primitives |
| Ultimate ships mechanism; your app ships convention | mechanisms and structural conventions ship; business conventions never do. Tenancy ships, an org model does not — primitives are functions returning values, so an app wraps one → Building your own base |
| Useful, then efficient | working function first, bytes second. A budget is a measurement, not a ceiling to game: raise it by the measured amount, with the reason, rather than cut a feature. The static path still pays nothing for the app path |
| Where | What it is |
|---|---|
docs/idea/ |
why — the design spec |
docs/architecture/ |
how — the internals |
docs/ops/ |
running an app for real: the PaaS → Compose → Kubernetes ladder, secrets, observability, datastore sizing, disaster recovery, runbooks. Recommendations only — the framework depends on none of it |
docs/idea/16-app-targets.md |
three targets, one backend, two view layers — design only, not shipped behaviour |
docs/idea/17-scale-ladder.md |
why the app code is identical at rung 0 and rung 4 — shipped, not design only: 24 of its 26 seam rows are marked shipped, rungs 0–2 are real, and the places the invariant breaks today are named |
packages/ui/CATALOG.md |
the full component catalog with every prop, generated from source and drift-tested |
framework.manifest.json |
every package, tier, and X_* code with its owner — generated |
| llms.txt | the machine-readable repo map for agents |
Ultimate — v30.6.0 As of 2026-10. The full-stack framework where the primary developer is an AI agent: bunx create-ultimate myapp → Getting started · live demo. MIT licensed. What npm serves is npm view @ultimat3/core version, never this line, and this footer is the only page that stamps a version.
Repository · Issues · Changelog · llms.txt
Edits to these pages are synced from wiki/ in the repository — change the file there, not the wiki, or the next sync overwrites it.
Start
- Getting started
- Installation
- Shapes
- Bare VM
- Project layout
- Migrating an existing app
- Compared to other stacks
Tutorials
- 1 · First app
- 2 · First feature
- 3 · Auth and admin
- 4 · Jobs and realtime
- 5 · Deploy free
- 6 · Growing up
Primitives
- The eight primitives
- Building your own base
- Actions
- Entities and migrations
- Policies and authz
- Queries and live queries
- Client data
- Jobs and workflows
- Scheduled tasks
- Routes and render modes
Capabilities
- Realtime
- Caching and invalidation
- Batching and preloading
- N+1 detection
- PWA and offline
- Client navigation
- MCP and AI
- Agents
- Admin dashboard
- Scraping
- Auth
- Notify
- Storage and uploads
- Feature flags
- SEO
- Static assets
Cross-cutting
- I18n
- Theming
- UI components
- Interface rules
- Timezones and dates
- Money
- Outbound HTTP
- Resource management
- Migrations and backfills
- Testing
- CI: the gate across parallel jobs
Reference