devshell
ActiveA terminal-inspired browser-based IDE with a plugin system, persistent sessions, and real-time file diffing.
TypeScriptWebSocketsIndexedDBBrowser APIs
View on GitHubdevshell 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
.dspbundles 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.