All Projects

devshell

Active

A terminal-inspired browser-based IDE with a plugin system, persistent sessions, and real-time file diffing.

TypeScriptWebSocketsIndexedDBBrowser APIs
View on GitHub

devshell started as a weekend experiment in building a browser-based terminal that felt genuinely native. It grew into a full IDE framework with a plugin architecture, real-time collaborative cursors via WebSockets, and an in-memory virtual filesystem backed by IndexedDB.

Features

  • Virtual filesystem — Full POSIX-like path resolution with symlink support
  • Plugin system — Drop-in .dsp bundles that extend the shell with new commands and UI panels
  • Real-time diffing — Live side-by-side diffs on any file using a custom LCS algorithm
  • Persistent sessions — Full state serialization to IndexedDB; reload and pick up exactly where you left off
  • Collaborative mode — WebSocket-backed cursor sharing and shared clipboard

Architecture

The core is a small event bus that all subsystems (filesystem, renderer, plugin loader) attach to. This keeps coupling minimal and makes the plugin API clean — a plugin just emits and listens to events.

const shell = createShell({
  plugins: [markdownPlugin, gitPlugin],
  persistence: 'indexeddb',
})

shell.run('ls -la /home')

Status

Currently at v0.8. The plugin sandbox (running plugins in a Worker) is the last major piece before v1.0.