Skip to content

Changelog

Release notes for each published version of Cleat, newest first. This page regenerates from GitHub Releases on every docs build.

v0.28 — 2026-08-12

  • feat(#260): preview images and non-text files in the SFTP viewer
  • feat(#385): multiple SFTP tabs, retire the File Transfer side pane
  • feat(#386): transfers panel, close-confirm, SFTP picker + docs
  • fix(#395): one shared password prompt; terminal connections can save again
  • fix(#394): tab strips clip and scroll instead of overflowing
  • refactor(#387): per-leaf remount for split-tree leaves
  • feat(#387): SFTP as a split-pane leaf
  • fix(#401): make an SFTP split pane focusable and closable
  • fix(#403): repoint crash uploads to cleat.tools and add the v2 identity block

  • chore: ignore build-bundle/ and .idea/codeStyles/

  • refactor(#382): extract SftpSession from SftpView (+ per-session temp dir)
  • refactor(#383): app-wide TransferQueue with lazy workers + per-job connection chains
  • refactor(#384): ITabContent abstraction + generalized Tab model
  • refactor(#387): IPaneContent — polymorphic split-tree leaves
  • fix(tests): give the TransferQueue cap test a Windows-sized budget

v0.27 — 2026-07-30

  • fix: macOS in-app update — bundle detection + DMG support

  • ci(release): make universal-OpenSSL step idempotent on self-hosted runners

v0.26 — 2026-07-29

  • feat(#329): power instrumentation — frame/wakeup counters + Power Stats overlay by @zimventures
  • feat(#330): SSH transport wakeup-fd poll + keepalive-derived timeout by @zimventures
  • feat(#331): plugin scheduler — deadline CV wait instead of fixed 500ms tick by @zimventures
  • feat(#332): throttle occluded / hidden / unfocused windows by @zimventures
  • feat(#333): coalesced background→main-thread wake events by @zimventures
  • feat(#334): consume Spry animations-active query (spry#58) by @zimventures
  • feat(#335): event-driven render loop by @zimventures
  • feat(#336): power settings — fps cap, reduce animations, background throttle by @zimventures
  • feat(#337): battery-aware adaptive profile via SDL_GetPowerInfo by @zimventures
  • docs(#338): re-baseline power usage + document results by @zimventures

  • feat(#329): power instrumentation — frame/wakeup counters + Power Stats overlay

  • feat(#330): SSH transport wakeup-fd poll + keepalive-derived timeout
  • feat(#331): plugin scheduler — deadline CV wait instead of fixed 500ms tick
  • feat(#332): throttle occluded / hidden / unfocused windows
  • feat(#333): coalesced background→main-thread wake events
  • feat(#334): consume Spry animations-active query (spry#58)
  • feat(#335): event-driven render loop
  • feat(#336): power settings — fps cap, reduce animations, background throttle
  • feat(#337): battery-aware adaptive profile via SDL_GetPowerInfo
  • docs(#338): re-baseline power usage + document results

v0.25 — 2026-07-20

UI Overhaul

This build is a complete overhaul of the UI. We moved off of the (still awesome!) Dear Im GUI to a custom retained mode library: spry. Spry is maintained by yours truly. I'll be using it in all Zimventures tools going forward.

  • docs: point install flow at cleat.tools signup
  • Spry: custom UI toolkit + first in-app integration (epic #205)
  • Spry: input, focus & keyboard nav + accessibility hooks
  • Spry: text input / editing widget
  • Spry: widget set I — core controls + overlays
  • Spry: widget set II — data/container widgets
  • Spry: migration harness — host the toolkit behind IView
  • Spry: port the terminal renderer onto the toolkit backend
  • Spry: retarget the plugin WidgetDesc renderer to the toolkit
  • Spry: migrate CreditsView onto the toolkit
  • Spry: bridge text input into hosted views (#220 harness)
  • Spry: modal-mode hosting in SpryHost; Credits back to a modal
  • Spry: add a Combo (dropdown) widget
  • Spry: add a colour picker widget
  • Spry: migrate SettingsView onto the toolkit (staged)
  • Spry: Settings follow-up — screensaver preview + per-saver settings + licensing
  • Spry: migrate the Connections sidebar onto the toolkit (staged)
  • Spry: migrate QuickConnectView onto the toolkit
  • Spry: migrate the Tunnels sidebar onto the toolkit (staged)
  • Spry: migrate the SSH Keys sidebar onto the toolkit (staged)
  • Spry: unified sidebar with a TabBar — retire dock tabs + interim switcher
  • Spry: migrate import dialogs to a shared preview modal
  • Spry: migrate the SFTP file browser onto the toolkit (staged)
  • Spry: migrate the ConnectionEditor onto the toolkit
  • Spry: multi-line TextArea + restore multi-line Notes
  • Spry: migrate the TunnelEditor onto the toolkit
  • Spry: migrate the CommandPalette onto the toolkit
  • Spry: migrate the KeybindingsView onto the toolkit
  • Spry: migrate the license modals onto the toolkit
  • Spry: migrate ActivityLogView + CrashReportView onto the toolkit
  • Spry: migrate the SFTP operation modals onto the toolkit
  • SFTP password authentication (saved + prompt + retry)
  • Spry: migrate the SSH Keys form modals onto the toolkit
  • Spry: migrate the update banner + check dialog onto the toolkit
  • Spry: migrate notification toasts + tooltip tour onto the toolkit
  • Spry: migrate the PuTTY/MobaXterm PPK passphrase prompts
  • Spry: migrate the FirstRunWizard onto the toolkit
  • Spry: migrate PluginManagerView onto the toolkit — shell + both tabs
  • Spry: port the Plugin Manager confirm dialogs to overlays
  • Spry: port the authoring/install dialogs — PluginManagerView fully off ImGui
  • Native menu bar — macOS NSMenu + Win32 HMENU
  • feat(#219): render gauge + heatmap via the Spry widget backend
  • feat(#219): make Spry the default plugin widget renderer
  • feat(#222): full-window Spry overlay layer for floating chrome
  • feat(#222): route PaneStatusBar tooltips through the Spry overlay layer
  • feat(#222): interactive Spry popover mode + migrate TunnelPopover
  • feat(#222): Spry context menu — tab menu + Views dropdown
  • feat(#222): migrate the plugin export dialog to a Spry modal
  • feat(#222): shell migration plan + SplitLayout widget (A1)
  • feat(#222): present the Spry overlay directly, off the ImGui bridge (A2)
  • feat(#222): headless UI test harness (dev-only)
  • feat(#222): Spry app shell behind CLEAT_SHELL=spry (Phase B1)
  • feat(#222): mount the real Sidebar into the Spry shell (Phase B1)
  • feat(#222): mount the Activity Log into the Spry shell (Phase B2)
  • feat(#222): mount the terminal tab bar into the Spry shell (Phase B3a)
  • feat(#222): render the focused terminal in the Spry shell (Phase B3b)
  • feat(#222): terminal input in the Spry shell — keyboard/text/wheel (Phase B3c)
  • feat(#222): Spry password prompt modal (password auth in shell mode)
  • feat(#222): render the split-pane tree in the Spry shell (B3d)
  • feat(#222): bottom status bar in the Spry shell (B4)
  • feat(#222): composite the remaining modal overlays in shell mode
  • feat(#222): render the screensaver as a Spry surface in shell mode (B4)
  • feat(#222): terminal text selection + Copy/Paste menu + copy toast
  • feat(#222): Ctrl/Cmd-click to open a URL in the shell terminal
  • feat(#222): reach the SFTP File Transfer window in shell mode
  • feat(#222): shell tooltips — sidebar connections + per-segment status bar
  • test(#278): fix stale MobaXterm non-Windows test
  • feat(#246): follow SSH config Include directives
  • fix(#278): restore spdlog default logger after ActivityLog test shutdown
  • feat(#222): native shell hosting for command palette + Settings (Phase C)
  • feat(#222): native shell hosting for the Connections modals, wizard & celebration (Phase C)
  • feat(#301): SFTP as a native integrated shell pane (Phase C)
  • feat(#222): host Tunnel editor + Keys form modals natively (Phase C)
  • feat(#222): native shell versions of the TabManager confirm modals (Phase C)
  • feat(#222): native shell versions of the app-level confirm modals (Phase C)
  • feat(#222): C1 input cutover — single SDL input path, delete ImGui DockSpace
  • refactor(#222): C2 — retire the SpryHost ImGui FBO bridge
  • refactor(#222): C2b — delete orphaned ImGui rendering (wrappers, TabManager, dev mirrors) + fix reactive modals
  • refactor(#222): C3 (part 1) — delete the dead #219 ImGui plugin widget renderers
  • fix: full-screen apps (top/vim/less) restore correctly on exit
  • feat(#310): measure terminal cell metrics via FreeType, not the ImGui font atlas
  • refactor(#311): remove ImGui rendering — backend, context, and live calls
  • refactor(#312): migrate ImGui types off headers and unlink imgui — closes #222
  • docs: correct stale ImGui references to the Spry toolkit
  • docs(#207): ADR for Spry's public API + minimal "hello toolkit" example
  • fix(#318): unbreak Windows build — replace POSIX setenv in main.cpp
  • docs(#223): Spry getting-started tutorial + examples index
  • docs(#224): make Spry extraction-ready — license/attribution, CONTRIBUTING, CI, split tooling
  • feat(#320): add spry/sdl_host.h — SDL event pump + clipboard/IME wiring
  • feat(#321): formalize the theme-token vocabulary in spry/theme_tokens.h
  • build(#224): consume Spry as an external dependency; remove libs/spry

v0.24 — 2026-06-11

  • fix(windows): bundle OpenSSL DLL matching linked soname

  • fix(windows): bundle OpenSSL DLL matching linked soname + self-hosted runner

v0.23 — 2026-06-07

  • bug fix ssh: respect explicit authMethod + fix stuck reconnectReady flag
  • ui: remove the 9-slice demo menu item + window

  • ssh: respect explicit authMethod + fix stuck reconnectReady flag

v0.22 — 2026-06-07

  • license: fixing a bug where activation not catching license validation failures.

  • license: plumb signing key into CI + gate activation success on engine acceptance

v0.21 — 2026-06-07

  • ci: macOS codesign identity

  • ci: fix macOS codesign identity + ignore signing material

v0.20 — 2026-06-05

  • ui: replace Changelog modal with Credits modal
  • terminal: dynamic per-pane font sizing
  • build: fix Apple clang 21 build break and clean warnings (72 -> 0)
  • fix: crash reporter aborts startup on non-UTF8 log bytes
  • ssh: implement SSH agent auth via libssh2_agent (Phase 1)
  • ui: auto-focus terminal when a new tab is opened
  • ssh: agent socket auto-detection + identity cache (Phase 2)
  • editor: Connection Editor agent picker + identity dropdown (Phase 3)
  • keys: KeysView Agents section with Copy + Deploy (Phase 4)
  • wizard: SSH-agent discoverability surface
  • ssh-agent: error UX, diagnostics scrubbing, pipe validation
  • licensing: foundation — fingerprint, key parser, token storage
  • licensing: transport + Ed25519 verify + endpoint clients
  • licensing: state machine + local validation + refresh loop
  • licensing: activation UI + seat-limit dialog + Settings + wizard step
  • licensing: trial mode — 14-day file + keychain backed
  • licensing: grace banner + must-upgrade modal + log scrub
  • license: animated checkmark + confetti burst on activation

v0.19 — 2026-05-22

v0.19

This release was focused on wrapping up the plugin architecture, screensavers, a new port forwarding feature, and online documentation.

Plugins

Plugins are now hosted on GitHub (https://github.com/zimventures/cleat-plugins/) and include both UI plugins as well as a fun addition - screensavers! Plugins are quite flexible in how they're installed, deployed, updated, and applicable. I still owe a detailed API reference for what's available in Lua, but the cleat-plugins repo should serve as a good example for the time being.

Screensavers

Screensavers are just a different plugin type. You can write Lua and have your own plugin. Have fun with this!

Port Forwarding

Port forwarding is a handy feature for piping network traffic between a remote host and the local environment. In addition to setting up reusable port forwarding (on a per-connection basis), there is also a port browser to allow users to see which ports are open on the remote host for tunneling.

Online Docs

Online documentation was plumbed into the build framework and is available at now available at: https://zimventures.github.io/cleat/

  • Plugin host API: cleat:notify() — toast notifications by
  • StoreAPI: install methods via metatable __index, warn on collision
  • Plugin: cleat_min_version + api_version compat gates by
  • Plugin install-from-URL with capability-scan preview
  • Plugin update checking for URL-installed plugins
  • Plugin marketplace browse + install
  • Drop stock-plugin code path; first-run install + source.json
  • Port Forwarding Phase 1: Local forward (-L) foundation
  • Port forwarding Phase 2: remote (-R) and dynamic (-D) forwards
  • Port forwarding Phase 3: detail popover, auto-start, profile editor, status bar by
  • Port discovery in the New Tunnel dialog (closes #117)
  • Screensaver Phase A: engine + cell grid render pipeline
  • Screensaver Phase B: Lua + term: API + Aquarium
  • Screensaver Phase C-1: utility globals + 5 stocks + UI polish
  • Screensaver marketplace integration
  • Screensaver update checking + Installed-tab section
  • Settings modal: category sidebar + search + rese
  • Modal Escape-dismiss helper, applied across all popups
  • Screensaver cleanup: sandbox caps, per-screensaver settings, live preview
  • Docs: public site at docs.cleat.zimventures.com
  • docs: post-launch cleanup of public docs site
  • docs: auto-generate changelog page from GitHub Releases

  • Plugin host API: cleat:notify() — toast notifications

  • Plugin: cleat_min_version + api_version compat gates
  • Port forwarding Phase 3: detail popover, auto-start, profile editor, status bar
  • Screensaver marketplace integration (closes #127)
  • Screensaver update checking + Installed-tab section (closes #130)
  • Settings modal: category sidebar + search + reset (closes #126)
  • Modal Escape-dismiss helper, applied across all popups (closes #131)
  • Screensaver cleanup: sandbox caps, per-screensaver settings, live preview (issue #48)
  • docs: auto-generate changelog page from GitHub Releases (closes #142)
  • tests: fix Windows test failures from v0.19 release run

v0.18 — 2026-05-08

This release adds some bug fixes and lays the foundation for more robust plugins - including additional stock plugins

  • Fix Windows Add/Remove Programs version stuck after upgrade
  • Plugin: rich status bar tooltips
  • Propagate stock plugin updates to unmodified user copies
  • Plugin: log monitoring
  • Plugin: tabular monitoring
  • Plugin: statusbar-network + dual-surface render() upgrades
  • Plugin: per-connection plugin overrides
  • Plugin: extended Host API — read_file / stat / env
  • Plugin: ssh:stream() persistent log-following channel
  • Plugin Manager: authoring workflow (Edit/Duplicate/Open Folder, Creator wizard, .zip Import)
  • Plugin resilience: exponential backoff, success-rate UI, graceful pool degradation
  • Plugin: data export (CSV/JSON) from view panel
  • Plugin: network-traffic stock plugin
  • Plugin widget: ctx:heatmap()
  • Plugin host API: ssh:meta() — connection metadata
  • Plugin host API: cleat.kv — cross-plugin shared key-value store

  • Phase D slice 1: log monitoring

  • Phase D slice 2: tabular monitoring
  • Phase D slice 6: statusbar-network + dual-surface render() upgrades
  • Phase D slice 5: per-connection plugin overrides
  • Phase D slice 3: extended Host API — read_file / stat / env
  • ssh:stream() persistent log-following channel
  • Fix Windows release build: ASCII test name in heatmap defaults case

v0.1.17 — 2026-03-09

  • Fix terminal pane focus border rendering in inactive views
  • Implement Plugin System: Phase A — Lua engine, SSH exec, stock plugin

v0.1.16 — 2026-02-27

  • Activity log improvements, layout reset, and Windows self-update fixes
  • Fix Windows self-update failing due to missing admin privileges
  • Add VPN status monitoring and per-connection enforcement

  • Fix MSVC test build: winsock.h/winsock2.h conflict in test_main.cpp

v0.1.15 — 2026-02-26

  • Activity log improvements, layout reset, and Windows self-update fixes
  • Fix Windows self-update failing due to missing admin privileges
  • Add VPN status monitoring and per-connection enforcement

v0.1.14 — 2026-02-25

Overview

  • End-user testing feedback and some miscellaneous cleanup.

Features

  • Add SFTP-only menu option and rename Connect to SSH
  • Add terminal copy/paste context menu and mouse operation support

Code Cleanup

  • Add linting infrastructure with exemption list and CI enforcement
  • New CI/CD build system options

Fixes

  • Fix Quick Connect UX, password auth, and clipboard shortcuts

v0.1.13 — 2026-02-24

Overview

End-user testing feedback and some miscellaneous cleanup.

Features

  • Add SFTP-only menu option and rename Connect to SSH
  • Add terminal copy/paste context menu and mouse operation support

Code Cleanup

  • Add linting infrastructure with exemption list and CI enforcement

Fixes

  • Fix Quick Connect UX, password auth, and clipboard shortcuts

v0.1.12 — 2026-02-23

Overview

A weekend of updates. Hat-tip to wmarauder for the feature request on password-based auth. Neglected to implement that in the first version.

Features

  • Add password-based SSH authentication with encrypted credential storage
  • Add configurable focus border highlight for active pane
  • Option to hide cursor in unfocused terminal panes

Fixes

  • Fix console window opening alongside GUI on Windows
  • Fix update banner showing too much info
  • Fix connection cursor color not updating existing sessions
  • Fix text selection bleeding across panes and drifting on resize
  • Fix selection updates during divider drag

v0.1.9 — 2026-02-20

  • Fix release notes using git tags to find previous version

v0.1.8 — 2026-02-20

  • Add license agreement to CPack installers
  • Add in-app changelog viewer and auto-populate release notes

v0.1.7 — 2026-02-20

  • Add CLion run configs for local release packaging

v0.1.6 — 2026-02-19

  • Bundle OpenSSL DLLs in Windows installer

v0.1.4 — 2026-02-19

  • Make update manifest URL configurable

v0.1.3 — 2026-02-19

Maintenance release.

v0.1.2 — 2026-02-18

Maintenance release.

v0.1.1 — 2026-02-18

  • Fix macOS and Windows release build failures

v0.1.0 — 2026-02-18

  • Switch libssh2 to OpenSSL backend, add PPK converter, and Windows har…
  • Auto-detect Homebrew OpenSSL on macOS
  • Remove Licensing and setup Continual Deployment

v0.0.1 — 2026-02-16

Maintenance release.