Skip to content

Latest commit

 

History

170 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Vertex — the IDE that lives in a browser tab

Clone any GitHub repo, edit it, build it, preview it, ship it — without installing anything.

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.


CI Live License Stars

Angular Bun Tauri Rust TypeScript Vite Cloudflare


🚀 Try it live · ⚡ Quick start · 🧩 Products · 🏗️ Architecture · 📦 Web component · 📚 Docs source · 🤝 Contributing


💡 The idea

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.


🧭 Product surfaces

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.


✨ What you get

🌿 Real git, in the tab

isomorphic-git over a virtual FS. Clone, stage, commit, branch — against any public repo.

💾 Storage that survives

IndexedDB via Lightning FS. Close the tab, come back, your working tree is still there.

⌨️ A real editor

CodeMirror 6 with TS/JS, HTML, CSS, JSON, Markdown, Python and Rust modes, lint and autocomplete.

📟 Terminal

xterm.js with a pluggable backend — WebContainers in the browser, node-pty on the desktop.

📦 Build & preview

esbuild-wasm bundles in-browser; WebContainers boot a Node runtime and serve a live preview.

☁️ Ship from the IDE

Cloudflare Pages and Workers adapters live inside @vertex/runtime — build, then publish.

🖥️ Desktop too

The same Angular app inside Tauri 2, with a Rust bridge for native filesystem access.

🧩 21 IDE components

@vertex/ide-ui — splitters, trees, tabs, toasts, virtual lists — headless logic, CSS-var theming.

⚡ Zoneless Angular 21

Signals everywhere, OnPush everywhere, no Zone.js, no Tailwind, no component framework.


🚀 Try it live

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

⚡ Quick start

Requirements — Bun 1.3.11+, Node.js 22.12+, and a Rust toolchain (desktop only).

git clone https://github.com/Andersseen/vertex.git
cd vertex
bun install
bun web:dev            # → http://localhost:5173
All 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

🏗️ Architecture

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/>&lt;vertex-editor&gt; · 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")]
Loading
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

📦 Embed the editor anywhere

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


🗺️ Status

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.


☁️ Deployment

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]
Loading
bun run deploy    # identical to what CI runs

Full details — secrets, environments, headers, the Workers migration path — in 📄 docs/DEPLOYMENT.md.


🛠️ Under the hood

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.


📚 Documentation

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

🤝 Contributing

Issues, discussions and pull requests are welcome — especially around the browser runtime, the IDE component library, and language tooling.

Contributing Code of Conduct Security Support

Before opening a PR: bun lint && bun check-types && bun test.


⭐ If Vertex is useful to you, a star helps other people find it.

MIT licensed — see LICENSE · Built by Andrii Pap

Vertex

About

⚡ The IDE that lives in a browser tab — clone any GitHub repo, then edit, build, preview and deploy it with zero install. Angular 21 zoneless + Tauri + Bun, with in-browser git, OPFS, esbuild-wasm and WebContainers.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages