Skip to content

Introduction

unextension lets you build IDE extensions as web apps and deploy them to both VS Code and JetBrains with a single codebase.

Think of it like Capacitor for mobile — but for IDE extensions.

┌─────────────────────────────────────────────┐
│ Your Plugin (Web App) │
│ React / Vue / Svelte SPA / etc. │
└──────────────────┬──────────────────────────┘
│ @unextension/bridge
┌─────────────────────────────────────────────┐
│ Universal Bridge API │
│ unextension.editor.* │
│ unextension.workspace.* │
│ unextension.ui.* │
└───┬──────────────────────────┬──────────────┘
│ │
▼ ▼
┌──────────────┐ ┌────────────────┐
│ VS Code │ │ JetBrains │
│ Extension │ │ Plugin (JCEF) │
└──────────────┘ └────────────────┘

IDE extension webviews are embedded iframes — there is no server, no routing layer, and no SSR. A pure SPA (e.g. Vite + React, Vite + Vue, Vite + Svelte) is the natural fit:

  • Zero server requirements — the built dist/ is served directly by the IDE
  • Fast cold start — no hydration overhead
  • Simple build output — a single index.html + assets that unextension sync can embed as-is

Server-side frameworks like Next.js or TanStack Start are not recommended because their SSR/file-based routing adds complexity that provides no benefit inside a webview.

PackageDescription
unextensionCLI — npx unextension sync / build
@unextension/bridgeRuntime bridge API for your web app