Skip to content

warden 0.1.0

Choose a tag to compare

@Lockyc Lockyc released this 29 Jun 03:25

First public release of warden — a config-driven terminal multiplexer for macOS. One TOML file defines your windows and the project tabs inside them; warden materializes itself from that config and hot-reloads on save.

Config core — warden-config crate + warden CLI

  • TOML schema → parse / validate / resolve: defaults, ~ expansion, and a shell / cmd / probe cascade (global → window → tab).
  • Hot-reload diffing (reconcile) and a notify-based file watcher.
  • House-style TOML formatter (embedded taplo) exposed as warden fmt (with --check) and an optional format_on_save.
  • warden validate prints the resolved window/tab tree + warnings.

macOS app — warden-app (Tauri + libghostty)

  • A native window per [[window]] with a colour + title banner; curator-style draggable sidebar under an overlay titlebar.
  • Embedded libghostty terminal surfaces behind a TerminalSurface seam; tabs lazy-spawn on first focus (load_on_open spawns eagerly and stays running).
  • Grouped tabs (cosmetic sidebar sections), a live/cold dot with hover-✕ unload, terminal notifications (OSC 9 / OSC 777 desktop banners + bell badges), and a cyan session-presence probe dot.
  • Live hot-reload (open / close / recolour / re-section), a diagnostic window for a missing/invalid config, an error banner that keeps last-good windows up on a bad edit, and per-window size/position persistence.
  • Tab navigation via the app menu: ⌘⇧[ / ⌘⇧] cycle loaded tabs, ⌘1–⌘9 jump (or ⌘1/⌘2 cycle via tab_digit_keys = "cycle"); ⌘W unloads, ⌘⇧W closes the window.

Platform & packaging

macOS only. Local builds via just build / just deploy (code-signed with a local Apple Development identity if present, otherwise unsigned; not notarized for distribution to other machines).

Notes

The vendored libghostty is a throwaway prebuilt; a controlled upstream source build is deferred (blocked on a Zig 0.15.2 / macOS 26 SDK mismatch). See docs/FOLLOWUPS.md for tracked deferrals.