Skip to content

Releases: contember/okena

v0.27.0

17 Jun 12:40

Choose a tag to compare

🔐 Encrypted remote control (TLS)

The remote control server now speaks TLS end-to-end, with self-signed certificates and trust-on-first-use (TOFU) pinning:

  • Dual-stack server — HTTP and TLS share a single port (detected by peeking at the ClientHello)
  • TLS enabled by default for fresh installs; existing installs stay on HTTP until upgraded
  • Auto-detect and auto-upgrade to TLS on connect (TLS-first, HTTP fallback)
  • Verify the certificate fingerprint before trusting a pin — shown in the pairing dialog, CLI, and headless mode
  • Sidebar warning + one-click "Upgrade to TLS" for existing non-TLS connections
  • Loud warning when binding to a non-loopback address without encryption
  • End-to-end handshake + pinning test (desktop ↔ desktop)

🤖 Agent-friendly CLI

  • New command surface built on clap
  • run --wait plus a self-installing agent skill
  • Control settings, theme, and the command palette from the CLI
  • Window model in remote state + per-window action targeting

📊 Usage panel

  • Per-hour / per-day grid with current-segment highlighting and an over-pace warning
  • Grid anchored to each user's actual reset time

🗂️ Sidebar & projects

  • Activity-sorted project view with pinning
  • Toggle focus off and pin the header in focused view
  • Project visibility toggle now reflects hidden state correctly

🧹 Terminal soft-close

  • Grace-period soft close with undo
  • Two-line close toast showing the running command + cwd, plus terminal and project

⚡ Performance & memory

  • Lower RSS via jemalloc (Unix), mimalloc, and a gix repo cache
  • Smaller cmd-bus worker pools (4/4/2)
  • Bounded per-turn parse work in the terminal; reuse the reqwest client across remote events

💾 Crash-safe persistence

  • Atomic, fsync-backed writes for settings, named sessions, and export
  • No longer latches saves off on an empty save

✨ Other improvements

  • Markdown: render YAML frontmatter as a metadata card (migrated to serde_yaml_ng)
  • Git: keyboard navigation in the branch switcher
  • Paste clipboard images into remote terminals
  • Discoverability tips on the empty terminal screen
  • Layout fixes (active-tab clamping, double-decrement on close)

📱 Mobile client — in development, not yet released

Note: The mobile client is still under active development and is not part of this release. The items below are work-in-progress.

  • Rebased the iOS work onto main + scaffolded the Flutter → React Native migration
  • TLS + cert pinning plumbed through the connection manager
  • Fixed an unbounded connection leak on reconnect/re-pair

v0.26.0

01 Jun 17:28

Choose a tag to compare

Okena v0.26.0 brings rich file previews, a full terminal notification system, smarter multi-window awareness, and Windows session support.

✨ Highlights

🖼️ File viewer previews

  • Image, SVG, and font previews right in the file viewer
  • Zoom & pan with a background toggle for images
  • Smart wheel controls — Cmd/Ctrl+scroll to zoom, plain scroll to pan, Shift+scroll to pan horizontally
  • Aspect-ratio preserved on zoom; SVGs re-rasterize crisply at higher scales

🔔 Terminal notifications

  • Desktop notifications for background terminals
  • Support for the OSC 99 (kitty) and OSC 777 notification protocols
  • Pane borders highlight on bell / alert so you can spot which terminal needs you

🪟 Layout & multi-window

  • Per-window column/row project grid orientation — great for portrait monitors
  • Transpose pane splits on project layout toggle
  • Project switcher now tracks multi-window open state and lets you jump straight to a terminal

🖥️ Platform

  • New psmux session backend for Windows
  • New GitHub status extension

🐛 Fixes

  • Closed several memory leaks, OOM, and GPU-memory issues in image / SVG / font previews
  • File tabs now evict the oldest tab at the limit (cap raised to 50)
  • Auto-scroll mouse selection past the top/bottom edge
  • Serialized workspace saves to avoid a tmp-file rename race
  • Repaint sidebar on incoming remote server output (#128)
  • Share status/usage pollers across windows
  • Claude: correct CLAUDE_CONFIG_DIR handling for the default config dir
  • Brighter critical red for better dark-theme contrast
  • Dropped WOFF2 preview to avoid a heavy dependency tree

Full Changelog: v0.25.0...v0.26.0

v0.25.0

25 May 12:34

Choose a tag to compare

Okena v0.25.0

A maintenance- and performance-focused release: Git, Docker/services, and Markdown rendering are all noticeably leaner, remote sessions gained PR/CI awareness, and there's a new in-app log console for diagnostics.

✨ Highlights

  • PR/CI status over remote — remote clients now receive live pull-request and CI status forwarded across the remote git wire, so a detached/remote window shows the same branch health as the host.
  • In-app log console — a built-in log console with a runtime-reloadable capture filter; tweak what's logged without restarting. Command audit entries now include the full argument list and a one-click copy button.
  • Global HTTP & command bus — all outbound HTTP and one-shot subprocesses are now routed through a central bus with auditing and a rate-limit floor, giving consistent observability and control over what the app runs and calls.

⚡ Performance

  • Git via gix — ahead/behind counts, diff stats, file-content reads, and worktree reads now go through the in-process gix library instead of shelling out to git, cutting subprocess overhead.
  • Snappier Git/CI pollinggh PR/CI polling is scoped to projects actually visible in a window, made robust against hangs, and no longer blocks git status.
  • Docker / services — Docker status is derived from a single shared docker ps snapshot with single-flight refresh and caching (availability checks, compose version/config), and port polling backs off from 3s to 5s — fewer redundant subprocesses overall.
  • Markdown rendering — the preview is now list-virtualized, table widths are precomputed, a per-node render API was added, and per-frame offset re-walks / per-pixel re-layout were eliminated.
  • Files & terminalSyntaxSet is shared via Arc instead of cloned per viewer, file-freshness checks and path-autocomplete read_dir moved off the render/main thread, dtach socket holders are resolved via /proc instead of lsof, and PTY teardown uses a shared bounded worker pool.

🐛 Fixes

  • Remote — eager parsing of remote output so bell/idle flags are no longer stale; WS tasks abort and reconnect cleanly on client drop; Subscribe/Unsubscribe messages are no longer dropped on a full channel.
  • Terminal — PTY children are reaped on shutdown (no more zombies) with a non-blocking Drop backstop on PtyHandle.
  • Git — diff parser and numstat handle renames correctly; branch CI is checked against the pushed commit rather than local HEAD; diff scrollbar geometry uses measured character width.
  • Settings & worktrees — settings.json locking checks the flock result, settings recovery is generic rather than field-by-field, save errors are surfaced instead of discarded, and stash_pop failures during worktree-close recovery are now reported.
  • Robustness — command stdout/stderr are drained concurrently to avoid pipe deadlocks; completed jobs are pruned from the command-bus scope registry; cached file viewers are evicted when a project is removed; open_url and remote-serve failures are logged instead of silently dropped.

🧹 Under the hood

Substantial internal cleanup: the repository.rs and execute_action god-modules were split into focused submodules, worktree lifecycle and remote reconciliation were extracted out of the view layer, ShellType moved into okena-core, and Clippy is now clean and gated in CI.


Note: iOS builds are temporarily excluded from this release while codesigning on the updated CI image is sorted out. Desktop (Linux, macOS arm64/Intel, Windows) and Android artifacts are unaffected.

v0.24.0

20 May 15:20
3be0693

Choose a tag to compare

What's Changed

  • feat(multi-window): per-window viewports with shared workspace state by @neumie in #121
  • feat: Send to Terminal — selection, file, and commit refs by @jonasnobile in #114

Full Changelog: v0.23.0...v0.24.0

v0.23.0

18 May 15:58

Choose a tag to compare

What's Changed

  • fix: re-scan file finder when toggling ignored/hidden filters by @neumie in #118
  • feat: persist file finder filter toggles in settings.json by @neumie in #119
  • fix(codex): match renamed status-page component by @neumie in #122

Full Changelog: v0.22.0...v0.23.0

v0.22.0

03 May 18:12

Choose a tag to compare

What's Changed

New Contributors

Full Changelog: v0.21.0...v0.22.0

v0.21.0

30 Apr 17:39

Choose a tag to compare

What's Changed

  • fix: kill orphaned terminals when deleting a project by @neumie in #111

Full Changelog: v0.20.0...v0.21.0

v0.20.0

10 Apr 19:20

Choose a tag to compare

What's Changed

  • fix: use native Windows drag instead of custom timer polling by @matej21 in #102

Full Changelog: v0.19.1...v0.20.0

v0.19.1

08 Apr 09:17

Choose a tag to compare

Full Changelog: v0.19.0...v0.19.1

v0.19.0

07 Apr 12:30

Choose a tag to compare

What's Changed

  • fix: fall back to macOS Keychain when credentials file lacks OAuth token by @neumie in #90
  • fix: reduce token TTL to 14 days with 3-day refresh threshold by @matej21 in #89
  • feat: add CreateWorktree API action by @neumie in #92
  • feat: return spawned terminal IDs from spawn action by @neumie in #93
  • fix: refresh file tree when reopening cached file viewer by @matej21 in #95
  • fix: split above tab group instead of inside active tab by @matej21 in #96
  • fix: load services for worktree projects after directory is created by @matej21 in #94
  • feat: dedicated hook panel by @neumie in #97
  • fix: prevent hook panel from auto-closing when manually opened by @neumie in #98
  • fix: always return terminal_ids from spawn_uninitialized_terminals by @neumie in #100

Full Changelog: v0.18.0...v0.19.0