Isaac DanielIsaac Daniel
Return to Mission Control
Developer Tooling (Personal)
Open Source (GitHub)

Tux

Barebones terminal IDE with split panes, session sidebar, and git-aware workflow — built because Warp and VSCode buried the features I needed.

Role: Solo Developer & DesignerDuration: 1 Day (Initial + 5 Fixes)Team: Solo

Context & Overview

I live in the terminal. Warp and VSCode promised the workflow I wanted — split panes, a file explorer, a git tree, session monitoring — but every one of those features was either missing, behind a flag, or three menus deep. I wanted a tool that only had what I needed, in the order I needed it, with a native feel and a small footprint. So I built it.

The Challenge

Problem Statement

Modern IDEs and terminals overload on features I don't use, while burying the features I do. Every menu click is a context switch. Every buried feature is friction that compounds over a workday.

Why It Matters

The features that actually matter for my workflow are layout, git visibility, file state, and fast terminal access. If a tool can't surface those in under a second, it's slowing me down — even if it has the feature somewhere.

Constraints

  • Must launch fast — sub-2s cold start target
  • Only the features I actually use, nothing else
  • Native feel, not a web wrapper in disguise
  • Small package size, not a multi-hundred-megabyte bundle

Goals & Metrics

Objectives

  • Split panes (vertical and horizontal)
  • Right-side terminal
  • Left sidebar: file explorer, git tree, terminal sessions
  • Inline git diffs
  • Read, write, and edit files with Prettier syntax highlighting
  • Rust + Tauri for speed and smaller package size

Target KPIs

  • Time from launch to first command
  • Package / binary size
  • Number of features kept (intentionally small)

Research & Discovery

Methodology

Daily driver: Warp + VSCode side-by-side for two weeks before writing any code
PRD written before code (`PRD.md` checked into the repo)
Constraint: every feature must earn its place or get cut

Key Insights

  • Most IDE features are inert for me — extensions marketplace, debugger, plugin system, integrated package manager.
  • The features that actually matter are layout, git state, and file state. Those three cover ~90% of my day.
  • Tauri gives a native UX with webview flexibility, without the 200MB Electron tax.

Approach & Strategy

PRD-first, then a single-day scaffold followed by 5 fix commits. Rust backend handles PTY, git ops, and the editor engine. React frontend handles the layout because that's where webview pays off.

Frameworks

Tauri 2, ghostty-web (terminal rendering), CodeMirror (editor), @pierre/diffs (diff viewer), git2-rs (git operations)

Collaboration

Solo. Daily-driver dogfooding from commit 1 — every feature had to be used the same day it was built.

The Solution

A three-pane desktop app. Sessions and the file tree live on the left. The terminal plus editor/diff sit in the middle. Git state lives on the right. Ghostty powers the terminal, CodeMirror powers the editor with Prettier for JS/TS/JSON/HTML/CSS/MD, and @pierre/diffs renders the diff pane. Session state persists across launches.

Split panes (vertical and horizontal, resizable)
Right-side terminal powered by Ghostty
Left sidebar: file explorer, git tree, terminal session list
Inline git diffs (unified and side-by-side)
Read / write / edit files with Prettier syntax highlighting
Session persistence across launches
Keyboard-first — every major action has a shortcut

App Visuals

Design Rationale

Rust + Tauri for sub-2s cold start and a small binary. React only where layout actually needs it (split panes, drag-resize, sidebar collapse). No LSP, no plugin marketplace, no debugger — explicitly out of scope per the PRD.

Execution

Roadmap

PRD

20-section PRD covering layout, terminal, git, editor, persistence, performance targets

Initial commit

Tauri 2 + React 19 scaffold with all 7 panes wired (App, Sidebar, FileTree, Terminal, GitViewer, Diff, Editor)

5 fix passes

File explorer → CWD reset → GitViewer → shortcuts + git.rs → backspace keystroke

Challenges Overcome

  • File explorer: PTY and sidebar state had to be rewired so the tree and the terminals stayed in sync (`7097843`).
  • CWD reset bug: shell working directory wasn't restoring on session switch, breaking per-session isolation (`de63eac`).
  • GitViewer stability: two passes to get diffs rendering reliably across staged / unstaged / untracked states (`d10a0a4`, `53678a0`).
  • Keyboard shortcut layer + dedicated `git.rs` module landed in the same commit to keep the surface area small (`53678a0`).
  • Backspace keystroke wasn't reaching the shell in the built binary, only in dev. Keymap registration was happening too late (`be3d4d1`).

Outcomes & Impact

Quantifiable Results

  • 1.Terminal, editor, and git state visible at a glance: no menu diving
  • 2.Single binary replaces 2-tool setup (Warp + VSCode) for daily sessions
  • 3.Dogfooded from commit 1: every feature used the same day it was built

Qualitative Feedback

Feels native, not browser-y
No feature I have to ignore or disable
Daily-driver capable for terminal-centric workflows

Learnings & Future

Key Takeaways

  • Build the tool that fits how you actually work — not how a feature list says it should.
  • A PRD prevents scope creep better than any framework. It also makes the 'what we cut' conversation easy.
  • Fix commits tell you where the real work was. The initial scaffold is the easy part.

Next Steps

  • LSP for syntax-only lint hints (no autocomplete — out of scope by design)
  • Hunk staging directly in the diff viewer
  • Fuzzy file search (Cmd+P)
  • Workspace JSON snapshots for cross-machine restore
  • UI improvements tailored for terminal-based coding agents (Claude Code, Codex, Aider) — clearer diffs, in-place prompts, agent run state
  • Better shortcut detection — context-aware keybindings that don't fight with the shell or the agent

Project Actions

Tech Stack

Rust
Tauri
IDE
Terminal
Dev Tool