Vertex is an open-source code editor with IDE capabilities across several surfaces. The browser
workbench combines Git, a virtual filesystem, build, and a Node-compatible
runtime client-side. The Tauri app adds installed-platform adapters, while the
drop-in <vertex-editor> remains a focused editor with no IDE/runtime
dependency.
🚀 Try it live · ⚡ Quick start · 🧩 Products · 🏗️ Architecture · 📦 Web component · 📚 Docs source · 🤝 Contributing
Cloud IDEs put your code on someone else's machine. Local IDEs need an install, a runtime, a toolchain. Vertex takes the third path: the browser is the machine.
paste a repo URL → git clone (in-browser) → edit → bundle → preview → deploy
isomorphic-git CodeMirror 6 esbuild-wasm WebContainers Cloudflare
The hosted browser workbench does not require a Vertex application backend. It is static output on Cloudflare Pages; repositories are cloned into browser storage rather than uploaded to a Vertex server. Optional local sidecars exist for installed/native development workflows.
Vertex is not one application stretched across every environment:
| Surface | Job | Owns |
|---|---|---|
apps/web |
Complete browser workbench | Browser storage, Git, build, WebContainer preview, deploy |
apps/desktop |
Installed Tauri workbench | Native filesystem/process/terminal adapters and lifecycle |
<vertex-editor> |
Editor embedded in another product | Editing API, language loading, themes, events |
<vertex-editor-lite> |
Read-only code display | Small native custom element and syntax highlighting |
The custom elements do not include filesystems, Git, terminals, preview, or deployment. Preview is a workbench capability, not an editor capability.
|
|
IndexedDB via Lightning FS. Close the tab, come back, your working tree is still there. |
CodeMirror 6 with TS/JS, HTML, CSS, JSON, Markdown, Python and Rust modes, lint and autocomplete. |
|
xterm.js with a pluggable backend — WebContainers in the browser, |
|
Cloudflare Pages and Workers adapters live inside |
|
The same Angular app inside Tauri 2, with a Rust bridge for native filesystem access. |
|
Signals everywhere, |
vertex.andersseen.dev — paste a repo URL, hit Clone & Edit.
1. Open https://vertex.andersseen.dev
2. Paste https://github.com/andersseen/palette-forge (or any public repo)
3. Clone & Edit — the repo is cloned into your browser, not onto a server
Requirements — Bun
1.3.11+, Node.js22.12+, and a Rust toolchain (desktop only).
git clone https://github.com/Andersseen/vertex.git
cd vertex
bun install
bun web:dev # → http://localhost:5173All the commands you'll actually need
| Command | What it does | |
|---|---|---|
| 🌐 | bun web:dev |
Vite dev server for the web IDE → localhost:5173 |
| 🖥️ | bun desktop:dev |
Tauri desktop app (needs Rust) |
| 🔗 | bun dev:all |
Web app + terminal sidecar + filesystem sidecar in parallel |
| 🧱 | bun run build |
Full monorepo build through Turborepo |
| 🧹 | bun lint · bun lint:fix |
ESLint across every workspace |
| 🔍 | bun check-types |
tsc --noEmit across every workspace |
| 🧪 | bun test |
Unit tests (Bun test runner) |
| 🎭 | bun test:e2e |
Playwright end-to-end suite |
| 📦 | bun web-editor:build |
Bundle the <vertex-editor> web component |
| 🎬 | bun web-editor-demo:start |
Build the component and serve its demo app |
| 📚 | bun docs:dev · bun docs:build · bun docs:deploy |
Develop, build, or publish the Starlight documentation |
| ☁️ | bun run deploy |
Build + publish to Cloudflare Pages |
flowchart TB
subgraph SURFACES["🖼️ Products — shared editor, separate responsibilities"]
direction LR
W["🌐 apps/web<br/>Angular 21 · Analog.js"]
D["🖥️ apps/desktop<br/>Tauri 2 · Rust"]
E["🧩 @vertex/web-editor<br/><vertex-editor> · editor only"]
end
EDITOR["@vertex/editor-core<br/>CodeMirror engine · language profiles"]
subgraph ANGULAR["🅰️ Workbench layer"]
direction LR
UI["@vertex/ui<br/>layouts · editor · sidebar"]
IDEUI["@vertex/ide-ui<br/>21 headless components"]
CORE["@vertex/core<br/>services · Dexie · terminal DI"]
end
subgraph RUNTIME["⚙️ @vertex/runtime — browser-native, zero Angular"]
direction LR
FS["fs/<br/>IndexedDB · MemoryFS"] --> GIT["git/<br/>isomorphic-git"] --> BUILD["build/<br/>esbuild-wasm"] --> PREVIEW["preview/<br/>WebContainers"] --> DEPLOY["deploy/<br/>Cloudflare"]
end
W --> ANGULAR
D --> ANGULAR
E --> EDITOR
UI --> EDITOR
ANGULAR --> RUNTIME
RUNTIME --> STORE[("💾 Browser storage<br/>local working copies")]
Monorepo layout
apps/
web/ 🌐 Angular 21 + Analog.js + Vite — the main IDE
desktop/ 🖥️ Tauri 2 shell around the same app
web-editor-demo/ 🎬 Playground for the standalone web component
docs/ 📚 Starlight documentation for every product surface
packages/
frontend/
core/ 🧠 Angular services, Dexie DB, terminal adapter token
editor-core/ ✏️ Framework-free CodeMirror engine and language profiles
ide-ui/ 🧩 @vertex/ide-ui — headless IDE components (CSS custom props)
runtime/ ⚙️ VirtualFS · GitClient · Bundler · Preview · Deploy
types/ 📐 Shared TypeScript contracts
ui/ 🎨 Layouts, CodeMirror editor, sidebar
web-editor/ 📦 Publishable <vertex-editor> Angular Element
backend/
sidecar/ 🦀 Bun/Hono filesystem sidecar
terminal/ 📟 Node.js + node-pty terminal sidecar
core/ 🧪 Experimental shared terminal types
scripts/ 🔧 Install & release helpers
docs/ 🧭 Repository architecture, deployment, and design notes
The products intentionally have different scopes. See
docs/ARCHITECTURE.md for dependency rules and product
boundaries, and docs/EDITOR_FOUNDATION.md for the
stability checklist.
Where state lives
| Layer | Stores | Why |
|---|---|---|
localStorage |
Splitter positions | Synchronous read, no layout flash on boot |
sessionStorage |
Open tabs (vertex:editor) |
Intentionally volatile |
Dexie v4 (vertex-ide) |
Active session, preferences | Structured and extensible |
| IndexedDB (Lightning FS) | Cloned repository files | Browser-native filesystem, survives reloads |
Vertex ships its editor as a framework-agnostic custom element. Drop one script tag into any page — React, Vue, Rails, plain HTML — and you have a CodeMirror-powered editor.
curl -fsSL https://raw.githubusercontent.com/Andersseen/vertex/main/scripts/install.mjs | node - ./public<script src="web-editor.min.js"></script>
<vertex-editor value="const x = 1;" language="typescript" theme="dark"></vertex-editor>| Bundle | Element | Size | Use case |
|---|---|---|---|
web-editor.min.js |
<vertex-editor> |
~1.1 MB | Full editing, autocomplete, lint |
web-editor-lite.min.js |
<vertex-editor-lite> |
~450 KB | Read-only syntax-highlighted display |
📥 Always-fresh builds: web-editor-latest release ·
📖 component docs
Vertex is in active development. The current target is a dependable editor and browser/tablet MVP, not VS Code feature parity.
| Priority | Current state |
|---|---|
| Shared editor core, language profiles, package boundaries | ✅ Established |
| Full and lite custom elements with enforced bundle budgets | ✅ Established |
| Public docs and canonical custom-element API | 🔄 In progress |
| Capability fallback, recovery UX, blocking persistence E2E | 🧭 Next |
| Project search, command palette, Git status/diff | 🧭 MVP |
| Physical tablet keyboard/touch/lifecycle validation | 🧭 MVP |
| Broad VS Code extension compatibility | 🔭 Later research |
The version 1.0 execution roadmap defines 16 minor milestones for a usable JS/TS IDE on macOS, in the browser, and on iPad. It includes bounded implementation tasks, shared contracts, validation gates, and model handoffs. These are planned milestones, not completed releases. VS Code extension compatibility belongs to the version 2 investigation.
See also the foundation checklist and the public roadmap source.
One platform, one pipeline, one command. Cloudflare is the only deploy target — no Vercel, no Netlify, no split brain between local and CI.
flowchart LR
A[push to main] --> B[quality<br/>lint · types · unit]
B --> C[e2e · Playwright]
B --> D[deploy<br/>Cloudflare Pages]
D --> E[🌍 vertex.andersseen.dev]
bun run deploy # identical to what CI runsFull details — secrets, environments, headers, the Workers migration path — in 📄 docs/DEPLOYMENT.md.
| Area | Choice |
|---|---|
| Framework | Angular 21, zoneless (provideZonelessChangeDetection), signals-first, OnPush everywhere |
| Meta-framework | Analog.js — file-based routing in apps/web/src/app/routes/ |
| Build | Vite 8 · Turborepo · Bun workspaces |
| Editor / terminal | CodeMirror 6 · xterm.js |
| In-browser runtime | Lightning FS (IndexedDB) · isomorphic-git · esbuild-wasm · WebContainers |
| Desktop | Tauri 2 + Rust sidecar |
| Styling | Pure CSS custom properties (--ide-*). No Tailwind, no PrimeNG, no CSS-in-JS |
| Headless logic | quartz-headless · @andersseen/headless-components |
Conventions for contributors (and coding agents) live in AGENTS.md, with Angular and Analog specifics in ANGULAR_USAGE.md and ANALOGJS_USAGE.md.
| Doc | About |
|---|---|
| AGENTS.md | Architecture, conventions, commands — the authoritative guide |
| apps/docs | Public Starlight documentation application |
| docs/ARCHITECTURE.md | Product ownership and package boundaries |
| docs/ROADMAP.md | Version 1.0 scope, minor milestones, and implementation tasks |
| docs/EDITOR_FOUNDATION.md | Stability checklist and MVP gaps |
| docs/DEPLOYMENT.md | Cloudflare pipeline, secrets, environments |
| apps/web/README.md | Web application |
| apps/desktop/README.md | Tauri desktop application |
| packages/frontend/runtime/README.md | Browser-native runtime |
| packages/frontend/web-editor/README.md | <vertex-editor> web component |
| docs/preview-wc/README.md | WebContainer preview design notes |
Issues, discussions and pull requests are welcome — especially around the browser runtime, the IDE component library, and language tooling.
Before opening a PR: bun lint && bun check-types && bun test.
MIT licensed — see LICENSE · Built by Andrii Pap