Releases: contember/okena
v0.27.0
🔐 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 --waitplus 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
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_DIRhandling 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
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-processgixlibrary instead of shelling out togit, cutting subprocess overhead. - Snappier Git/CI polling —
ghPR/CI polling is scoped to projects actually visible in a window, made robust against hangs, and no longer blocksgit status. - Docker / services — Docker status is derived from a single shared
docker pssnapshot 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 & terminal —
SyntaxSetis shared viaArcinstead of cloned per viewer, file-freshness checks and path-autocompleteread_dirmoved off the render/main thread, dtach socket holders are resolved via/procinstead oflsof, 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
Dropbackstop onPtyHandle. - 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
flockresult, settings recovery is generic rather than field-by-field, save errors are surfaced instead of discarded, andstash_popfailures 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_urland 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
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
v0.22.0
What's Changed
- fix: bind cmd-q / ctrl-q to quit action by @JakubKontra in #113
New Contributors
- @JakubKontra made their first contribution in #113
Full Changelog: v0.21.0...v0.22.0
v0.21.0
What's Changed
Full Changelog: v0.20.0...v0.21.0
v0.20.0
What's Changed
Full Changelog: v0.19.1...v0.20.0
v0.19.1
Full Changelog: v0.19.0...v0.19.1
v0.19.0
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