Use it, then talk it into becoming yours
A project tracker with a Kanban board and due dates. A custom CRM for customers, deals, and follow-ups. A research notebook. Universal App's bet: you should get it by talking, not coding.
First question: is this real, or just a design doc?
2,338 commits over ~6.6 weeks (2026-02-19 → 2026-04-06), built on Svelte 5 + Vite 6 + Tauri 2 with a Rust sidecar.
It exists and it's substantial. So why not just build apps the normal way?
A code editor or low-code builder turns you into a developer. A one-shot generator hands you a disposable artifact. Universal App lists both as explicit Non-Goals.
So the design needs a third path — and it starts with one rule.
The design's first principle deliberately picks the simplest AI-facing representation. No ASTs. No component trees. No type hierarchies.
Everything is measured against one litmus test.
schema_version 1, a flat list of 31 block types, spreadsheet-style = expressions, and behaviors as first-class YAML objects — triggers like page_load and timer, actions like set_state.
That simplicity is what lets you edit it just by talking.
Four complete experiences ship as YAML (productivity-hub, agent-workspace, demo, file-explorer). Chat builds a page-context prompt and sends it to an Amplifier sidecar; a Tauri watcher live-reloads the YAML.
Using edits into building — and the line between them starts to vanish.
"The boundary between using an app and building an app dissolves — no user mode vs developer mode, just a smooth gradient of depth."
— ARCHITECTURE.md, lines 44 and 125–126
Universal App proved it on itself — 121 features completed, driven largely by an autonomous dev machine. When software's representation is simple enough to read and edit in one turn, editing-by-talking replaces building.
The tool you wish existed becomes a conversation away.
Data as of: 2026-04-06 (last commit 7dc778e9) · Feature status: Working framework — not a shipped consumer product
Primary source: ramparte/universal-app, checked out at ~/dev/ANext/universal-app. Every claim re-derived from live command output.
Commands run:
git rev-list --count HEAD (2,338); git log --reverse --format='%h %ci %s' (2026-02-19 → 2026-04-06)cat schema/page.schema.json (schema_version 1, flat blocks, 31 block-type enum)cat workspace/shared/status-monitor/status-behaviors.yaml (status-auto-refresh: timer/interval_ms 60000, set_state actions)grep -n 'sidecar.send\|chat.send' src/lib/chat/submitHandler.tsgrep -n 'from_millis\|yaml' src-tauri/src/watcher.rs (500ms debounce)find src src-tauri \( -name '*.ts' -o -name '*.svelte' -o -name '*.rs' \) | xargs wc -l (32,719); 110 test files; 57 Svelte componentsgrep 'count:' STATE.yaml (121); git log --format='%an' (Sam Schillace 2,194 ≈ 94%)Gaps: The live real-backend "talk → structured edit" loop was not executed (submitHandler notes real tool calls will replace the traced path); npm test / build were not run — LOC and test-file counts are filesystem counts. End-user outcomes are design intent, not measured.