Skip to content

tracker: add Linux support #18

@wey-gu

Description

@wey-gu

Linux support — status tracker

Rolling tracker for the Linux port. Live design plan: docs/impl/linux-port.md. Related Windows tracker: #34.

TL;DR

  • Linux preview has shipped beyond the original placeholder plan: Unix PTY + shared libghostty-vt + GPUI-owned per-row StyledText renderer.
  • The preview renderer supports SGR colors, bold, italic, underline, strikethrough, inverse, block cursor, theme palette sync, IoskeleyMono font normalization, client-side decorations, transparent rounded windows, and KWin Wayland blur where the compositor exposes it.
  • PR linux: cache styled rows in preview renderer #65 landed row-level StyledText caching so the current preview path only rebuilds changed rows/cursor rows instead of the whole grid.
  • PR perf: reduce non-macOS terminal command latency #68 landed direct PTY output wake and shared VT profiling, removing the old intended 8 ms idle-poll wake floor for terminal output.
  • PR [codex] Add Windows and Linux CJK IME input #99 landed CJK IME commit/preedit input for the Linux preview via GPUI InputHandler; remaining Linux IME work is real-desktop validation across Wayland/X11 and IME engines.
  • PR Fix:Linux WSL illegal-instruction startup && inline LaTex #100 hardened Linux release portability by building libghostty-vt with an explicit generic Zig target derived from Cargo's target triple, fixing/mitigating the WSL Ubuntu 22.04 illegal-instruction startup report in crash on WSL ubuntu 22.04.5 #97 and reducing host-CPU feature leakage risk.
  • The post-perf: reduce non-macOS terminal command latency #68 Linux stale-screen regression after quitting htop / vim was fixed before merge: visible rows are refreshed on each VT generation update and row containers clear across full width. User-side testing confirmed the stale-screen issue was fixed on the branch before merge.
  • Release v0 exists for Linux: tarball, one-line installer, desktop entry, icon install, appcast, and notify-only updater. Native package formats (.deb, AppImage, Flatpak, etc.) are still undecided.
  • The long-term Linux performance direction remains a GPUI-owned glyph-atlas grid renderer so Linux stops paying layout-time text shaping cost for terminal frames.

Done

Phase 0 — groundwork

  • Portable crates build on Linux.
  • con UI binary builds on Linux.
  • Unix-domain control socket at /tmp/con.sock.
  • Linux CI smoke coverage in .github/workflows/ci-portable.yml.
  • GPUI Linux runtime dependencies wired in CI.

Phase 1/2 — architecture decision

  • Design plan in docs/impl/linux-port.md.
  • Feasibility and interop studies in docs/study/.
  • Architecture frozen to a local backend rather than waiting for upstream Ghostty/GPUI embedding hooks.
  • Shared libghostty-vt layer reused with Windows.

Phase 3/4 — preview backend and renderer

  • con-ghostty/src/linux/ facade, Unix PTY spawn, resize, exit, transcript/search plumbing, VT feed path.
  • con-app/src/linux_view.rs owns the Linux terminal view path.
  • Live local shell through Unix PTY.
  • PTY output feeds libghostty-vt and snapshots drive visible rows.
  • Per-row styled-cell renderer with SGR colors and common text attributes.
  • Cursor rendering and inverse/cursor interaction correctness.
  • Theme palette sync from settings.
  • IoskeleyMono font-family normalization.
  • Client-side decorations and Linux caption controls.
  • Transparent rounded window; KWin Wayland blur where supported.
  • Alt-screen placeholder flash fixed.

Phase 5 — near-term performance and correctness follow-ups

Phase 6 v0 — release path

  • Linux tarball release path.
  • install.sh Unix dispatcher and Linux install flow.
  • Desktop entry and icon install.
  • Sparkle-shaped appcast for notify-only updater.
  • Settings update card can surface Linux update availability.
  • Generic non-macOS libghostty-vt Zig target selection landed in PR Fix:Linux WSL illegal-instruction startup && inline LaTex #100 for WSL / older-CPU release portability.

Remaining work

Renderer and performance

  • Replace the preview per-row StyledText paint path with a GPUI-owned glyph-atlas grid renderer.
  • Avoid layout-time shaping for steady terminal frames.
  • Run native hardware performance smoke on real Linux desktops for ls, htop, nvim, alt-screen enter/exit, prompt redraws, and bursty command output.

Input, selection, and terminal UX

  • Mouse reporting: button, drag, wheel, and xterm/SGR semantics.
  • Selection: drag, copy, scrollback interaction, clipboard integration.
  • Bracketed paste / DECCKM regression matrix across shells and TUIs.
  • CJK IME validation matrix across native Wayland/X11 desktops and common IME engines.
  • Scrollback UX and search polish.
  • Focus/click behavior across X11, Wayland, GNOME, KDE, and non-KWin compositors.

Desktop integration and packaging

  • Decide native artifact strategy: .deb, AppImage, Flatpak, or another distribution-native path.
  • Validate installer/update behavior on real GNOME/KDE desktops, not only cloud VM / Crostini / llvmpipe environments.
  • Clarify blur/transparency expectations per compositor: KWin Wayland supports app-requested blur; X11/mutter/sway generally do not expose the same app-driven blur protocol.

Verification notes

References

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions