Non-goals¶
Audience. Developer — anyone considering a change to condash.
Things condash will deliberately not do. Each entry has a why — read it before opening a "while we're at it" PR.
No code editing in condash¶
condash is a Markdown reader/editor and a project dashboard. Source files (.ts, .py, .tsx, etc.) open in the user's IDE via the open_with slots. The CodeMirror editor inside the renderer is for Markdown content only — project READMEs, knowledge notes, and the JSON config file .condash/settings.json (which uses CodeMirror's JSON mode for syntax highlighting in the gear modal).
Why: an IDE is a different product. Trying to be one would mean LSP integration, language servers, multi-file refactoring, debugger UI — none of which serve the dashboard's role. Users already have a real IDE configured via open_with.main_ide.
No general-purpose terminal¶
The xterm pane has two roles, and only two:
- Log view for dev apps started by the Run button — see the output of
make devwithout context-switching. - Project-scoped shell so the user can interact with Claude / scripts in the right cwd without leaving condash.
Features that would push it toward "competing with your real terminal" — nested splits (beyond the 2-column dock), advanced multiplexing, shell-history text search, theme picker, GPU-acceleration tuning — are out of scope. The user already has Konsole / iTerm / Wezterm / etc. configured via open_with.terminal.
What is in scope, even though one could argue it edges toward "real terminal":
- A 2-column dock with cross-column tab drag-and-drop. The user often works two projects at once and wants to see both shells side-by-side without launching out. No further nesting — at most two columns.
- Output search inside the live session (Ctrl+F via
addon-search). The searchable buffer is the visible session output, not a multi-session history database. - Prompt-jump navigation (Ctrl+↑/↓ on OSC 133 marks). Moves between prompts within the current session — a navigation aid for long output, not a history grep.
- Programming-font ligatures as a single on/off toggle in the settings modal. One binary preference, not a configuration surface; ligatures off by default.
Why: terminal emulators are a mature product category. Reinventing one inside an Electron renderer is a poor trade. The pane exists because embedding unlocks the live runner badge, the per-repo Stop button, and the bottom-of-window status board — none of which a launched-out terminal can provide. The four in-scope items above are the ones that make the embedded dock usable for its two roles; everything beyond them is the user's real terminal's job.
No JSON-format migration¶
.condash/settings.json stays JSON. Migrating to YAML, TOML, or a fenced Markdown block is a non-goal.
Why: see Config files — stdlib parsing, strict schema validation, reliable in-app editing. A Markdown-first tree can comfortably contain one structured-data file.
No LSP / code intelligence¶
No language server integration, no go-to-definition, no diagnostics. Even for Markdown — the editor is plain CM6 with Markdown syntax highlighting and wikilink decoration, nothing more.
Why: same reason as "no code editing." The IDE owns this surface.
No log search index¶
The Markdown sources are indexed in RAM (src/main/search/index-cache.ts), so a Markdown query is served without touching disk. Logs, though, are still scanned on disk every query — they're the bulk of the corpus bytes and rarely searched, so caching them would cost a lot of resident memory for little gain. See Internals — The search index.
Why: index where it pays. Markdown is small and frequently searched; logs are large and rarely. If log search ever feels slow, a deferred / lazy log index (built on first Logs-scope use) is the next step.
No multi-window UI¶
A single BrowserWindow. Modals (note, PDF, help) are in-renderer overlays. The terminal pane is a bottom strip in the same window.
Why: window state is hard. Multi-window means restoring layouts, focus tracking, drag-between-windows. The dashboard's job is "one place to see what's going on" — multiple windows fight that goal.
No code signing / OS-store distribution (yet)¶
condash ships unsigned .deb, .AppImage, .dmg, and .exe builds. Code-signing certificates and the App Store / Microsoft Store funnels are out of scope until there's a clear request from a user blocked by signature requirements.
Why: cost (certs, store fees, review cycles) without a current audience. Re-evaluate when someone hits a blocker that the SmartScreen / Gatekeeper bypass doesn't solve.
No telemetry / usage reporting¶
condash collects nothing and phones home for nothing.
Why: it's a personal-tool category. Telemetry would buy us nothing the user can't tell us directly.
No HTTP API or browser frontend¶
The Electron build talks IPC end-to-end. There is no embedded HTTP server, no condash-serve headless mode (the Tauri lineage shipped one), and no 127.0.0.1:<port> to drive Playwright at. End-to-end tests run inside Electron itself.
Why: a dual front door (HTTP + IPC) is twice the surface to keep coherent. The Tauri build needed HTTP because Tauri is an HTTP server wrapped in a webview; Electron has direct IPC, so the cost-benefit collapses.
Revision log¶
2026-04-30 — terminal pane scope revision¶
The "No general-purpose terminal" entry was rewritten. The four post-v2.0.0 features that the original prose forbade — 2-column dock, cross-column tab DnD, in-pane output search (Ctrl+F), and the ligature toggle — were not silent drift. They each serve the dock's two roles (log view + project-scoped shell) inside the embedded constraint, and the user explicitly wants them. The revised entry lists them as in-scope with the constraint that any further expansion (nested splits, multi-session search, theme picker, etc.) remains out.
OSC 133 prompt-jump (Ctrl+↑/↓) was added at the same time as the revamp; it navigates landmarks inside the current session and is therefore on-pillar with "log view", not a history grep.
The "no shell-history search" bullet was sharpened to "no shell-history text search" so that prompt-jump and live-output Ctrl+F aren't ambiguous.
How to update this document¶
This file is append-only in spirit: don't soften an existing non-goal silently. If you think one needs revisiting, open an issue with a concrete user story, get sign-off, then edit the entry and add a dated paragraph to the Revision log explaining what changed and why. Removing a non-goal is a deliberate scope expansion, not a cleanup.