A drop-in replacement for VS Code built with Tauri + Rust + Svelte
-
Core Architecture
- Tauri + Rust backend
- Svelte frontend
- Component-based UI (ActivityBar, Sidebar, Editor, Panel, StatusBar)
-
Extension System Foundation
- Extension host process (Node.js)
- stdio IPC bridge (Rust ↔ Node.js)
- VS Code API stubs (window, commands, workspace)
- Module injection (
require('vscode')) - Extension manager with activation
-
UI Components
- File explorer with tree view
- Command palette (Ctrl+Shift+P)
- Quick open (Ctrl+P)
- Resizable panels
- Resource metrics modal (partial)
-
File System
- Directory tree reading
- File watching (notify crate)
- Basic file operations
- Monaco editor integration
- Resource monitoring
- Git integration (stubs)
Goal: Functional text editor with syntax highlighting
- Replace placeholder editor with Monaco
- File content loading/saving
- Multi-file tab system
- Dirty state tracking
- Save/save-all functionality
- Close tab with unsaved changes prompt
- Monaco built-in syntax highlighting for 15+ languages:
- JavaScript/TypeScript
- Python
- Rust
- Go
- C/C++
- Java
- HTML/CSS
- JSON/YAML
- Markdown
- Shell scripts
- Language detection by file extension
- Find & replace (Ctrl+F, Ctrl+H) - Built into Monaco
- Find in selection - Built into Monaco
- Go to line (Ctrl+G) - Built into Monaco
- Multi-cursor support (Alt+Click) - Built into Monaco
- Code folding - Built into Monaco
- Auto-save with debouncing (1 second delay)
- Minimap
- Breadcrumbs
- Create file/folder
- Delete file/folder
- Rename file/folder
- File context menu (right-click)
- Copy/paste file paths
- Drag & drop files (deferred to future release)
Deliverable: ✅ Usable text editor with syntax highlighting, file operations, and auto-save
Goal: IntelliSense and code navigation
- Monaco TypeScript/JavaScript language service fully enabled
- Autocomplete/IntelliSense for TS/JS
- Hover documentation
- Diagnostics (syntax & semantic errors)
- Parameter hints
- Signature help
- LSP infrastructure created (client, manager modules)
- Language server lifecycle management (start, stop)
- Support registered for:
- TypeScript/JavaScript (Monaco built-in) ✅ WORKING
- Python (pyright) - infrastructure ready
- Rust (rust-analyzer) - infrastructure ready
- Go (gopls) - infrastructure ready
- JSON (vscode-json-language-server) - infrastructure ready
- JSON-RPC stdio communication (TODO for non-TS/JS languages - Phase 3)
- Document synchronization (didOpen, didChange, didSave - Phase 3)
- Go to definition (F12) - Monaco built-in for TS/JS
- Find all references (Shift+F12) - Monaco built-in for TS/JS
- Peek definition (Alt+F12) - Monaco built-in for TS/JS
- Symbol search (Ctrl+Shift+O) - Monaco built-in for TS/JS
- Workspace symbol search (Ctrl+T) - ✅ IMPLEMENTED
- Go to type definition - Deferred to Phase 3
- Go to implementation - Deferred to Phase 3
- Quick fixes (Ctrl+.) - Monaco built-in for TS/JS
- Light bulb UI - Monaco built-in
- Refactoring actions - Deferred to Phase 3
- Source actions - Deferred to Phase 3
- Code lens support - Deferred to Phase 3
- Inline error squiggles - Monaco built-in
- Diagnostics for TS/JS - Monaco built-in
- Error navigation (F8/Shift+F8) - Monaco built-in
- Diagnostic severity icons - Monaco built-in
- Problems panel - ✅ IMPLEMENTED
- Problems panel toggle in status bar - ✅ IMPLEMENTED
Deliverable: ✅ Full IntelliSense for TypeScript/JavaScript with Problems panel, Workspace symbol search, and LSP infrastructure ready for other languages
Goal: Load and run real VS Code extensions
-
Core APIs - ✅ IMPLEMENTED
- TextDocument API (Position, Range, TextLine, text operations)
- TextEditor API (Selection, editing, reveal, snippets)
- TextEdit & WorkspaceEdit
- Commands API (registerCommand, executeCommand)
- Window API (showInformationMessage, showQuickPick, createOutputChannel)
- Workspace API (workspaceFolders, findFiles, openTextDocument, getConfiguration)
-
Languages API (27 Providers) - ✅ IMPLEMENTED
- CompletionItemProvider, HoverProvider, DefinitionProvider
- ReferenceProvider, CodeActionsProvider, DocumentSymbolProvider
- DocumentFormattingProvider, RangeFormattingProvider, OnTypeFormattingProvider
- RenameProvider, SignatureHelpProvider, CodeLensProvider
- DocumentLinkProvider, ColorProvider, FoldingRangeProvider
- SelectionRangeProvider, CallHierarchyProvider, TypeHierarchyProvider
- SemanticTokensProvider, InlineCompletionProvider, WorkspaceSymbolProvider
- DocumentHighlightProvider, Implementation/TypeDefinition/DeclarationProvider
- DiagnosticCollection, LanguageConfiguration
-
UI Components - ✅ IMPLEMENTED
- StatusBarItem, TreeView, TreeDataProvider
- WebviewPanel, Webview with messaging
- QuickPick (advanced multi-select input)
- InputBox (text input with validation)
- OutputChannel
-
Environment & Extensions - ✅ IMPLEMENTED
- Environment API (clipboard, machineId, shell, telemetry)
- Extensions API (getExtension, onDidChange)
- Memento (state storage)
- ExtensionContext (with secrets, extensionUri, storage URIs)
-
Advanced Features - ✅ IMPLEMENTED
- Terminal API (createTerminal, sendText, Pseudoterminal)
- Debug Adapter Protocol (debug sessions, configurations, breakpoints)
- Tasks API (task execution, providers, ProcessExecution, ShellExecution)
- FileSystemWatcher (glob patterns, file events)
- FileSystem API (workspace.fs - stat, read, write, delete, rename, copy)
- TextDocumentContentProvider (virtual documents)
- SCM API (Source Control Management)
- Uri class (file path handling)
-
Progress & Input - ✅ IMPLEMENTED
- Progress API (window.withProgress)
- ProgressLocation (SourceControl, Window, Notification)
-
Authentication & Secrets - ✅ IMPLEMENTED
- Authentication API (OAuth session management)
- AuthenticationProvider registration
- SecretStorage (secure credential storage)
-
Notebooks - ✅ IMPLEMENTED
- NotebookController (Jupyter/interactive notebook execution)
- NotebookContentProvider (custom notebook formats)
- NotebookCell, NotebookCellExecution
- Notebook events (onDidOpenNotebookDocument, onDidSaveNotebookDocument)
-
Comments & Code Review - ✅ IMPLEMENTED
- CommentController, CommentThread
- Comment mode (Editing, Preview)
- CommentingRangeProvider
-
Testing - ✅ IMPLEMENTED
- TestController (test discovery & execution)
- TestRun (test lifecycle management)
- TestRunProfile (Run, Debug, Coverage)
- TestItem hierarchy
-
Events - ✅ IMPLEMENTED
- Workspace events (onDidChangeTextDocument, onDidSaveTextDocument, onDidOpenTextDocument, onDidCloseTextDocument, onDidChangeWorkspaceFolders, onDidChangeConfiguration)
- Window events (onDidChangeActiveTextEditor, onDidChangeVisibleTextEditors, onDidChangeTextEditorSelection, onDidChangeTextEditorVisibleRanges, onDidChangeTextEditorOptions, onDidChangeTextEditorViewColumn, onDidChangeWindowState)
- Terminal events (onDidOpenTerminal, onDidCloseTerminal, onDidChangeActiveTerminal)
- Debug events (onDidStartDebugSession, onDidTerminateDebugSession, onDidChangeBreakpoints)
- Task events (onDidStartTask, onDidEndTask, onDidStartTaskProcess, onDidEndTaskProcess)
-
Utility Classes - ✅ IMPLEMENTED
- MarkdownString (rich text rendering with trust levels)
- ThemeColor, ThemeIcon (theme-aware UI elements)
- CancellationToken, CancellationTokenSource (async cancellation)
- FileSystemError (file operation errors)
- Enums: ConfigurationTarget, ExtensionMode, ProgressLocation, FileType, FilePermission, DiagnosticSeverity, CompletionItemKind, SymbolKind
✅ Achievement: 100% VS Code Extension API Coverage
- 7 new API modules created (common, progress, authentication, notebooks, comments, testing, fileSystem)
- 50+ new types exported
- All namespaces integrated: window, commands, workspace, languages, env, extensions, debug, tasks, scm, authentication, notebooks, comments, tests
- Complete event system with EventEmitter pattern
- Full IPC bridge integration ready
- .vsix file parsing (ZIP extraction)
- Extension manifest validation (package.json schema)
- Extension installation (local & marketplace)
- Extension uninstallation
- Activation events handling (extension host integration)
- Extension dependencies resolution (manifest parsing)
- Extension host IPC communication (40+ handlers)
Implementation Details:
- Created comprehensive VSIX installer with ZIP extraction
- Full manifest validation (semantic versioning, name format, engines)
- Extension manager in TypeScript (loading, activation, deactivation)
- IPC bridge with 40+ handlers (FileSystem, Documents, Window, Clipboard, Auth, Debug, Tasks, Notebooks, Terminal)
- Commands:
install_extension,uninstall_extension,list_extensions
- VS Code Marketplace API integration
- Extension search with pagination & sorting
- Extension details (ratings, install counts, metadata)
- Direct marketplace downloads (.vsix)
- One-click installation from marketplace
- Extension metadata parsing (icons, descriptions, versions)
Implementation Details:
- Full VS Code Marketplace API client (
src-tauri/src/marketplace/mod.rs) - Search endpoint:
https://marketplace.visualstudio.com/_apis/public/gallery/extensionquery - Download endpoint:
https://{publisher}.gallery.vsassets.io/.../extension.vsix - Commands:
search_marketplace,get_marketplace_extension,install_from_marketplace - HTTP client: reqwest with async support
- Returns: extension metadata, install counts, ratings, icons, repository links
- Modal overlay gallery component
- Two-tab interface (Marketplace / Installed)
- Extension search with Enter key support
- Extension cards with metadata display (icons, ratings, install counts)
- Install/uninstall operations with loading states
- Keyboard shortcut (Ctrl+Shift+X / Cmd+Shift+X)
- Activity bar integration
- Error handling and empty states
- Extension host IPC bug fixes (stdout/stderr separation)
Implementation Details:
- Created
ExtensionGallery.sveltecomponent (521 lines) with full UI - Modal overlay pattern with backdrop and click-outside-to-close
- Search integration with
search_marketplaceTauri command - Extension card grid layout with responsive design
- Install button states: Install → Installing... → Installed
- Installed extensions list with uninstall functionality
- Metadata display: ratings (star count), install counts (formatted), version numbers
- Icon support with placeholder fallback (first letter of extension name)
IPC Bridge Bug Fixes:
- Critical Fix: Changed all
console.log()toconsole.error()in extension host- Root cause:
console.log()writes to stdout (IPC channel), causing JSON parse errors - Solution: Use stderr for logging, stdout for IPC messages only
- Root cause:
- Empty line filtering in both TypeScript and Rust sides
- Initialization order fix: connect bridge before creating ExtensionManager
- Added "ready" message handler in Rust backend
- Improved error logging with line content display
Deliverable: ✅ ACHIEVED - Complete extension system end-to-end with marketplace browsing, installation, and management
Next Steps:
- Extension settings integration
- Extension update notifications
- Extension recommendations
- Extension activation status indicators
Goal: Full source control support
- Complete git2 integration
- Stage/unstage files
- Commit with message
- Commit --amend
- Push/pull/fetch
- Branch create/delete/switch
- Merge branches
- Stash changes
- Rebase (basic)
- Source control panel
- Changes view (staged/unstaged)
- Diff viewer (side-by-side & inline)
- Inline diff markers (gutter decorations)
- Merge conflict resolution
- Conflict markers
- Accept incoming/current/both
- Branch visualization
- Commit history view
- Graph rendering
- Blame annotations
- File history
Deliverable: Complete Git workflow support
Goal: Integrated terminal and debugging
- Embed xterm.js (@xterm/xterm with addons)
- PTY support (portable-pty crate)
- Multiple terminal instances
- Terminal tabs with add/close buttons
- Split terminals (deferred)
- Terminal commands (create, write, resize, close, list)
- Shell integration (deferred)
- Links in terminal output (WebLinksAddon)
Implementation Details:
- Backend: TerminalManager with portable-pty for cross-platform PTY
- Frontend: Terminal.svelte component with xterm.js
- IPC: Event-based communication (terminal-data, terminal-closed events)
- Features:
- Multiple terminal tabs in PanelArea
- Auto-focus on tab switch
- FitAddon for responsive sizing
- Handshake protocol to prevent data loss
- Terminal state persistence when switching tabs
Known Issues:
- Initial bash prompt sometimes missing (race condition in handshake)
- Terminal visibility/focus bugs when switching between tabs
- Needs refinement for production use
Commands:
create_terminal- Spawn new terminal with shellwrite_to_terminal- Send input to PTYresize_terminal- Update terminal dimensionsclose_terminal- Terminate terminal instancelist_terminals- Get all active terminalsterminal_ready- Frontend handshake signal
- DAP client implementation
- Debug configuration (launch.json)
- Debug toolbar
- Breakpoints (line, conditional, logpoints)
- Step over/into/out
- Variable inspection
- Watch expressions
- Call stack
- Debug console
- Support 3 debuggers:
- Node.js (vscode-node-debug)
- Python (debugpy)
- Rust (lldb/gdb)
Deliverable: Integrated terminal + debugging support
Goal: Project-wide search and replace
- ripgrep integration
- Search panel UI (Ctrl+Shift+F)
- Search results tree
- Include/exclude patterns
- Regex support
- Case sensitive/whole word
- Search in selection
- Replace preview
- Replace in files UI
- Replace all
- Replace in selected files
- Preview changes before replace
- Undo replace operation
Deliverable: Fast project-wide search and replace
Goal: User personalization
- Settings file (settings.json)
- Settings UI (Ctrl+,)
- User vs workspace settings
- Settings schema
- Settings search
- Settings sync (local)
- Default settings
- Color theme support
- Theme file format
- Theme marketplace
- Icon themes
- Built-in themes:
- Dark+ (default)
- Light+
- Monokai
- Solarized Dark/Light
- Dracula
- Nord
- One Dark Pro
- Theme preview
- Custom theme creation
- Keybindings file (keybindings.json)
- Keybindings editor
- When clauses
- Key recording
- Keybinding conflicts detection
- Platform-specific bindings
Deliverable: Fully customizable editor
Goal: Production-ready quality
- Large file handling (virtual scrolling)
- Fast file search (mmap)
- Memory optimization
- Startup time < 1 second
- Lazy loading extensions
- Web worker for heavy operations
- Debounced file operations
- Unit tests (Rust)
- Unit tests (TypeScript)
- Integration tests
- Extension compatibility tests
- Performance benchmarks
- E2E tests
- User guide
- Extension development guide
- API documentation
- Architecture documentation
- Contributing guidelines
- Troubleshooting guide
- Welcome screen
- Getting started tutorial
- Command history
- Recently opened files
- File auto-detection
- Crash recovery
- Telemetry (opt-in)
Deliverable: Production-ready v1.0
Goal: Production-ready, publishable codebase with reusable Rust libraries on cargo, npm, and pypi.
- A1: Create Cargo workspace
- A2: Extract dscode-core crate (text_buffer, config, shared types)
- A3: Extract dscode-extension-host crate (manager, IPC, sandbox, permissions, rate limiter, secrets)
- A4: Extract dscode-lsp crate (client, manager, pool)
- A5: Extract dscode-dap crate (adapter, manager, pool, types)
- A6: Extract dscode-terminal crate (manager, PTY lifecycle)
- A7: Extract dscode-session crate (manager, IPC, extensions, documents, config, workspace)
- A8: Update binary crate dependencies
- A9: Update imports and module structure
- A10: Write per-crate READMEs
- B1: Define typed error enums for all crates (DscodeCoreError, LspError, DapError, ExtensionHostError, SessionError, TerminalError)
- B2: Replace 614 String errors with typed errors
- B3: Fix 104 .expect() panic-prone calls on Mutex locks
- B4: Add pub(crate) visibility boundaries to library crates
- B5: Remove #![allow(dead_code)] from commands/mod.rs
- C1: Replace 260 println! calls with tracing macros
- C2: Replace 91 eprintln! calls with tracing macros
- C3: Enhanced logging init (file output, rotation, structured fields)
- C4: Add #[tracing::instrument] spans to key async operations
- D1: dscode-core unit tests
- D2: dscode-extension-host unit tests
- D3: dscode-lsp unit tests
- D4: dscode-dap unit tests
- D5: dscode-terminal unit tests
- D6: dscode-session unit tests
- D7: Integration tests (LSP, extension host, terminal)
- D8: Cross-platform CI (ubuntu/macos/windows)
- E1: Windows sandbox (Job Objects API) - replace no-op
- E2: VSIX manifest verification (SHA256 hash, identity validation)
- E3: Secret cache encryption (AES-256-GCM, zeroize, TTL)
- E4: Node.js binary integrity verification
- E5: Stale IPC socket cleanup
- F1: Cross-platform CI matrix
- F2: Release workflow (tag-triggered, multi-platform builds)
- F3: Cargo publishing setup (metadata, dry-run, docs.rs)
- F4: npm extension-host publishing
- F5: npm monaco-wasm publishing
- F6: PyPI publishing (dscode-core Python bindings via PyO3/maturin)
- F7: Tauri build in CI
- G1: Update CONTRIBUTING.md (remove "no comments" rule, add workspace instructions)
- G2: Update SECURITY.md (document security hardening)
- G3: Add rustdoc to all pub APIs in library crates
- G4: Add docs.rs metadata to each crate
- G5: Update root README.md (badges, library section, architecture diagram)
- G6: Add MIT license to monaco-wasm
- H1: Branded loading/splash screen (replace blank skeleton)
- H2: Keyboard navigation audit
- H3: ARIA attributes for accessibility (20 components)
- H4: Focus traps for 8 modal components
- H5: Screen reader announcements
- H6: Svelte component tests
Deliverable: Publishable crates on cargo.io, npm, and PyPI with proper documentation, tests, and security hardening. Target: v1.0.0.
- Monaco editor integration
- Basic syntax highlighting
- File operations
- LSP integration
- IntelliSense support
- Code navigation
- Extension loading
- VS Code API 80% coverage
- Extension marketplace
- Git integration
- Source control UI
- Terminal integration
- Debugging support
- Search & replace
- Performance optimizations
- Settings & themes
- Full documentation
- Production release
- Public Launch (Phase 9):
- Library crates on cargo.io (dscode-core, dscode-lsp, dscode-dap, dscode-extension-host, dscode-session, dscode-terminal)
- npm packages (dscode-extension-host, monaco-wasm)
- PyPI package (dscode-core Python bindings)
- Branded loading screen
- Security hardening (Windows sandbox, VSIX verification, encrypted secrets)
- Cross-platform CI/CD
- Typed error handling, tracing-based logging, comprehensive tests
- Remote development (SSH, containers)
- Live Share
- Notebook support (.ipynb)
- Multi-root workspaces
- Task runner
- Snippets system
- Web version (WASM)
- Mobile support (Tauri mobile)
- Electron compatibility layer
- Copilot-like code completion
- AI chat assistant
- Code explanation
- Test generation
- ✅ Open and edit files
- ✅ Syntax highlighting for 15+ languages
- ✅ IntelliSense (3-5 languages)
- ✅ Load basic VS Code extensions
- ✅ Git commit/push/pull
- ✅ Integrated terminal
- 50%+ VS Code API coverage
- Load 80% of top 100 VS Code extensions
- Startup time < 1 second
- Memory usage < 200MB (idle)
- 5000+ GitHub stars
- 100+ community extensions
- Drop-in replacement for VS Code
- Native performance (faster than Electron)
- Cross-platform (Windows, macOS, Linux, Web)
- Extension ecosystem compatibility
- Active community contributions
This roadmap is a living document. We welcome:
- Feature requests
- Pull requests
- Bug reports
- Documentation improvements
- Extension development
See CONTRIBUTING.md for guidelines.
MIT License - See LICENSE file for details.
Milestone 3.1 – Activation & Commands
- Implement full activation event handling (onLanguage, onCommand, file system events, view/debug triggers).
- Route command registration/execution across Tauri ↔ Node, expose registered commands to the UI, respect enable/disable scopes & workspace trust.
- Deliverable: Marketplace extensions that activate on language/command events run their command implementations inside DSCode.
Milestone 3.2 – UI & Contribution Surface
- Support contributed views (activity bar, tree views, status items), quick pick/input, notifications, output channels, webviews.
- Emit session events for contributed UI so Svelte renders them; provide default containers for tree views and webviews.
- Deliverable: Extensions like GitLens show their explorer panes/menus and react to user interaction.
Milestone 3.3 – Languages & Debug
- Bridge Monaco to extension-provided language configuration/grammar, wire languages API callbacks, connect LSP pool to extension host.
- Integrate Debug Adapter Protocol and Tasks so debug/launch configurations execute via the host.
- Deliverable: language packs and debug adapters from VS Code run with parity.
Milestone 3.4 – Marketplace Lifecycle
- Add version negotiation/update checks, dependency version pinning, signature/hash validation, download caching.
- Expose marketplace metadata (categories, ratings, filters) and implement upgrade/uninstall w/ rollback.
- Deliverable: Marketplace UX mirrors VS Code including updates and safe installs.
Milestone 3.5 – Persistence & Telemetry
- Complete secret/global/workspace storage policies, log routing, telemetry opt-in plumbing.
- Add backups, binary storage support, and log viewers in the UI.
- Deliverable: extensions relying on persistent state and telemetry behave predictably.