Skip to content

Releases: hermes-webui/hermes-desktop-rust

Hermes WebUI Desktop v0.3.8

16 Jun 22:45

Choose a tag to compare

Fixed

  • macOS: multiple tabs on different profiles bled into each other (the
    v0.3.7 fix only covered the Windows/Linux tab strip). macOS uses native
    window tabs, which shared one cookie store, so switching profile in one tab
    switched the others too. Each tab opened from an existing one now gets its own
    isolated (ephemeral) cookie store, seeded with the opener tab's profile +
    login so it still opens on your current profile and only diverges when you
    switch it — the same behavior the Windows/Linux fix gives. The first window
    keeps the persistent store, so a single-window setup still remembers your
    profile and login across restarts. (#3, reported by the maintainer on macOS.)
  • A new tab now reliably inherits the current tab's profile. The seed copied
    the opener's cookies via a URL-filtered lookup, but that lookup drops
    host-only cookies on macOS — and the WebUI sets the profile cookie host-only —
    so a new tab fell back to the default profile instead of the one you were on.
    Seeding now copies the opener's whole cookie store (a tab only ever loads one
    origin), so the profile cookie transfers on every platform.

Hermes WebUI Desktop v0.3.7

16 Jun 21:28

Choose a tag to compare

Fixed

  • Windows/Linux: multiple tabs on different profiles no longer bleed into
    each other.
    The WebUI scopes the active profile to a per-client HttpOnly
    hermes_profile cookie, but every tab shared one cookie jar — so switching
    profile in one tab flipped it for all of them: the sidebar stuck to the
    last-loaded profile, other profiles' active chats went missing, and the
    default workspace intermittently failed to apply. Each tab now gets its own
    isolated data partition (its own cookie jar), so profile selection is
    genuinely per-tab — the same isolation you get from separate browser windows.
    A new tab is seeded with the opener tab's profile + login cookies, so it still
    opens on your current profile (and stays logged in) and only diverges when you
    switch it. Partitions are session-scoped and cleared on tab close and at
    startup. (#3, reported by b3nw and Lemz.)

Hermes WebUI Desktop v0.3.6

15 Jun 00:41

Choose a tag to compare

Added

  • Windows/Linux: tabs now badge when a session is waiting on you. When a
    background tab raises a tool-approval or clarify/question popup, you used to
    see only a momentary flash and had to click through every tab to find the
    blocked one. Such tabs now show an amber attention dot (and a subtle tint) in
    the tab strip, so the session waiting for input is obvious at a glance. The
    signal is the WebUI's existing pending-prompt title marker, read per-tab
    through the native title hook — no extra polling. (#14, reported by b3nw.)

Hermes WebUI Desktop v0.3.5

15 Jun 00:00

Choose a tag to compare

Fixed

  • Windows/Linux: tabs were stuck on "New Tab" and never showed the active
    session (and titles could "reset" to Hermes WebUI ● <host>).
    The custom
    tab strip derived each tab's title from an injected script that posted the
    page's document.title back over the JS event IPC (window.__TAURI__). That
    IPC isn't reliably available in remote-origin content webviews, so the title
    report silently no-op'd and the tab kept its placeholder. Titles are now read
    from the webview engine directly via a native title-changed hook
    (WebView2/WebKitGTK/WKWebView), independent of page JS, the IPC global, and
    the page's CSP — the same "don't depend on the remote webview's IPC" approach
    the link-opening fix used. (#15, reported by Deor and b3nw.)
  • A transient blank title no longer wipes a good tab title. While a tab is
    mid-load (or briefly reports a separator-only title), the strip used to fall
    back to the Hermes WebUI ● <host> placeholder. A known-good title (or the
    initial "New Tab" seed) is now kept until a real title arrives.
  • Tab titles now strip the trailing name suffix for custom bot names and
    non-default profiles.
    The WebUI appends a " — name" suffix where the name is
    the configured bot name or the profile name — not always "Hermes". The suffix
    is now removed generically (only the last separator-delimited segment, so an
    em-dash inside the session title itself is preserved) instead of matching the
    literal "Hermes".
  • Direct-mode connections to a non-localhost HTTP server now get the bridge
    again.
    The content-webview capability listed https://* but no plain
    http://*, so for a Direct connection to e.g. http://192.168.x.x:8787
    every bridge emit (theme sync, the "response is ready" notification) was
    silently dropped. Plain-HTTP remote origins are now covered (still
    event-emit-only — no command access).

Hermes WebUI Desktop v0.3.4

12 Jun 23:52

Choose a tag to compare

Fixed

  • Clicking a link in chat did nothing instead of opening the browser.
    The WebUI renders chat links with target="_blank", and our injected script
    forwarded those clicks to native by emitting an open-external IPC event.
    That emit posts to ipc.localhost, which the remote page's own CSP
    connect-src blocks (the WebUI server governs the page's CSP, not the shell),
    so the event never reached Rust and the click was a no-op. External links
    (and window.open) now navigate the top frame instead: the native
    on_navigation hook — which is not subject to the page CSP — opens external
    hosts in the system browser and cancels the navigation so the page stays put,
    exactly as plain links already did. No server-side change required.
    (#12, reported by Deor; cross-ref hermes-webui#4040.)
  • White flash when opening a new tab (Windows/Linux). A new tab is a child
    webview added to an already-visible window, so it painted white until its
    first paint — the window-level anti-flash (build hidden, reveal on load)
    couldn't cover it. New tab webviews now get an opaque native background in the
    cached theme color, so they come up theme-colored instead of white. (#4,
    reported by Rod.)

Hermes WebUI Desktop v0.3.3

11 Jun 03:21

Choose a tag to compare

Fixed

  • macOS: app froze ("crashed") every time a new tab was opened. Cmd+T
    built the window fine, but the native tab attach (addTabbedWindow) ran
    inside the event loop's dispatch, where AppKit may force the other tab's
    window to redraw synchronously — and that redraw re-enters the windowing
    layer's non-reentrant lock, deadlocking the main thread on itself. The app
    froze instantly and forever (no crash report — it never crashes, it hangs;
    confirmed by macOS hang diagnostics on v0.3.1 and v0.3.2). The freeze only
    triggers when the two windows' sizes differ, which is why default-size dev
    windows masked it and real resized windows hit it 100% of the time. Tab
    attach (and the Cmd+N tabbing-mode dance) now runs via the GCD main queue —
    outside the event dispatch — and Cmd+T/Cmd+N window creation runs inline on
    the main thread on macOS, like the original prototype. Verified live: tab
    attach plus continued main-thread heartbeats on the previously-freezing
    setup.

Hermes WebUI Desktop v0.3.2

11 Jun 02:13

Choose a tag to compare

Fixed

  • Linux: intermittent crash at launch. WebKitGTK's internal threads talk
    X11 directly; without Xlib's thread-safe mode they race the GTK main loop
    and the app could abort during startup ([xcb] Unknown sequence number while awaiting reply) or die silently with no window — roughly two out of
    three launches in the CI smoke harness, timing-dependent on real desktops.
    The app now calls XInitThreads before anything else on Linux. Wayland-only
    systems without libX11 are unaffected (the call is skipped). Found by the
    Linux smoke harness flaking on identical builds.

Hermes WebUI Desktop v0.3.1

11 Jun 01:20

Choose a tag to compare

The first release that arrives as an in-app update for v0.3.0 users — and the
first signed and notarized macOS build (Developer ID + hardened runtime +
stapled notarization: no more right-click-to-open ritual; microphone and network
entitlements mirror hermes-swift-mac so voice input keeps working under the
hardened runtime).

Added

  • Platform-labeled release artifacts (tester request: "label the binaries to
    be clear about platform"): every asset now states its platform —
    …_win_x64-setup.exe, …_lin_x86_64.AppImage, …_macos_universal.dmg,
    and the formerly ambiguous universal.app.tar.gz is now
    …_macos_universal.app.tar.gz. The update manifest's URLs are rewritten to
    match automatically, while the release is still a draft.
  • Portable Windows build (tester request: "be nice to have a non-installer
    .exe"): …_win_x64_portable.zip — unzip anywhere and run, no installer, no
    admin rights. The bundled portable.txt marker keeps the app in portable mode:
    self-update is disabled there (it would silently convert the portable copy into
    an installed app) and points at Releases instead. Requires the WebView2 runtime
    (preinstalled on Windows 11).
  • SSH tunnel auto-recovery (Swift app NWPathMonitor parity): while the tunnel
    is down — laptop slept, Wi-Fi dropped, VPN flapped — the app probes the SSH
    host's port every 10 s and reconnects the moment it answers, with a blind retry
    every 60 s for ssh_config-mapped ports. No more manually clicking Reconnect
    after every sleep/wake.
  • Downloads on macOS and Linux: session exports and other in-app downloads
    (which WKWebView/WebKitGTK silently drop) are intercepted, saved into
    ~/Downloads with collision-safe names, and announced with a notification.
    Windows keeps WebView2's native Save As dialog.
  • Reveal Log File in the macOS app menu and the tab bar's ⋯ menu — opens the
    live log in Finder/Explorer/Files for bug reports.

Fixed

  • The update-check failure dialog now gives actionable guidance instead of a raw
    plugin error string.
  • Linux stability hardening from the new CI smoke harness (which launches the
    real app on Ubuntu under Xvfb and screenshots it): window centering no longer
    relies on GTK's no-op center() for hidden windows, the tab strip's buttons
    use font-safe glyphs, and tab operations avoid re-fitting GTK child webview
    geometry — which crashes natively in Tauri's multi-webview on Linux. Known
    cosmetic limits on Linux for now: extra strip padding, and window resizes
    don't re-fit webview bounds (upstream wry/GTK work, tracked).

Hermes WebUI Desktop v0.3.0

11 Jun 00:53

Choose a tag to compare

Added

  • Auto-update (the Sparkle-parity feature). The app now checks GitHub Releases
    about ten seconds after launch — silently unless an update actually exists — and
    on demand via Check for Updates… (app menu on macOS, the tab bar's ⋯ menu on
    Windows/Linux). When a new version is found you get a native "Install and
    Relaunch / Later" prompt; the download is verified against a signing key pinned
    in the app before anything is installed. Coverage: Windows installer builds
    (the installer runs and relaunches), Linux AppImage (replaced in place),
    and macOS (.app replaced in place). .deb installs can't self-update by design —
    the interactive check tells those users to grab the new package from Releases.
    Release builds now ship signed updater artifacts and a latest.json manifest;
    because releases are published from drafts, installed apps only ever see
    smoke-tested builds. This release is the first carrying the manifest, so
    v0.3.0 is the last manual download — every release after this arrives
    in-app.

Hermes WebUI Desktop v0.2.0

10 Jun 23:08

Choose a tag to compare

Pre-release

Added

  • Tabs on Windows and Linux (tester report: "there's no indicator that there is
    a functionality for new tabs or windows"). Every window now has a browser-style
    tab bar: or Ctrl+T opens a tab, click to switch, hover × /
    middle-click / Ctrl+W closes, Ctrl+Tab / Ctrl+Shift+Tab cycle, and tab
    titles follow the active conversation (same "— Hermes"-stripping pipeline as the
    macOS native tabs). Each tab is its own live webview — switching tabs never
    reloads the page or interrupts a streaming response, matching what macOS gets
    from one-WKWebView-per-native-tab. Built on Tauri's multi-webview support: the
    window hosts a 38px shell strip plus one content webview per tab; the strip is a
    bundled page with full IPC while tab content keeps the event-emit-only
    capability. The connection status (tunnel state with Reconnect, or the direct
    health dot) moved from the injected page footer into the strip's status area.
  • A native ⋯ menu in the tab bar (Windows/Linux) — the discoverability surface
    the first build lacked: New Tab, New Window, Reload, Find in Page, Zoom,
    Preferences, Open in Browser and Quit, each listed with its keyboard shortcut, as
    a real OS context menu.
  • prefs.json is seeded with the full default settings schema on first launch
    (it previously showed {} until something was saved — Swift
    seedDefaultsIfNeeded parity).

Fixed

  • Windows/Linux: Ctrl+T previously opened the new window at the OS default
    position instead of cascading from the current one (superseded by real tabs, but
    the cascade also applies to Ctrl+N windows).