Core editor built on Tauri 2 (Rust backend) + React 19 + CodeMirror 6. Target: a usable daily-driver editor at ~80 MB RAM.
- Multi-tab editor (CodeMirror 6)
- Syntax highlighting — TS, JS, Rust, Python, Go, JSON, Markdown, HTML, CSS, SQL, Java, C++
- Vim mode (normal / insert)
- Relative line numbers
- Markdown preview (split pane)
- Multi-session terminal (PTY, per-session Arc)
- File tree with vscode-style icons (full icon set, no tree-shaking)
- Git panel — branch, status, stage/unstage, commit, checkout, branch list
- Fuzzy file opener (Cmd+P)
- Command palette (Cmd+Shift+P)
- Autosave with debounce
- Settings panel (font, tab size, wrap, vim, autocomplete, bracket match)
- macOS menu bar integration
- New window (Cmd+Shift+N)
- New terminal session (Cmd+T)
- macOS Big Sur squircle app icon (の)
- Rename ted → nova throughout
- File content out of Zustand →
tabContentMap(zero re-renders on keystrokes) - CodeMirror Compartments — settings reconfigure without view rebuild
- PTY per-session Arc — global lock released before I/O
- PTY output batching — 16 KB reads, flush at 32 KB or 8 ms
-
tokio::fs— async file I/O, no worker thread starvation -
git_state— singleopen_repofor branch + status + branches - Per-node
expandedDirssubscription — O(1) re-renders on dir toggle
- LSP integration (language server protocol — completions, go-to-def, hover docs)
- Inline git diff gutter (per-line add/modify/delete markers)
- Split pane editor (horizontal / vertical)
- Find & replace panel (global, regex)
- Workspace search (grep across files)
- File watcher — auto-reload externally changed files
- Minimap
- Lazy-load vscode-icons (reduce JS heap by ~5–8 MB)
Eliminate the WebView entirely. Target: ~45–60 MB RAM, <100 ms startup, CoreText rendering.
| Phase 1 (WebView) | Phase 2 (native) | |
|---|---|---|
| RAM | ~80 MB | ~45–60 MB |
| Startup | ~400 ms | ~80 ms |
| Font rendering | WebKit (good) | CoreText / DirectWrite (excellent) |
| Scroll on large files | CodeMirror virtual (good) | GPU rasterised (excellent) |
| Cross-platform cost | Low (WebView everywhere) | High (per-OS GPU API) |
GPUI (Zed's Apache 2.0 GPU UI framework)
├── Text editor engine — tree-sitter grammars, incremental parse
├── Text shaping — cosmic-text (BiDi, ligatures, font fallback)
├── Terminal renderer — vte (VT escape parsing) + portable-pty (already have it)
├── File tree — GPUI list view
├── Git panel — nova-git crate (already have it)
└── File system — nova-core / tokio::fs (already have it)
- React, Vite, TypeScript frontend
- CodeMirror 6
- xterm.js
- WebView / Tauri
- All npm dependencies
nova-git— git operations (git2)nova-core— file I/Oportable-pty— PTY spawning- Tree-sitter grammars
- GPUI prototype — window opens, text renders, cursor moves
- Basic text editor — insert/delete, undo/redo, syntax highlighting
- File tree + tab bar
- Terminal emulator (vte grid renderer in GPUI)
- Git panel port
- Vim mode (modal input handling)
- Settings / theming
- Feature parity with Phase 1
- macOS release build — measure actual RAM vs target
Solo: 6–18 months. GPUI is the only viable shortcut — building on raw wgpu/Skia from scratch would be 2–3 years.
- AI features / copilot integration
- Plugin system (keep it simple)
- Windows / Linux support before macOS is solid
- Electron (never)