Skip to content

Platform Notes

Hermes aims to provide consistent behavior across platforms, but some features work differently due to platform constraints.

Windows

WebView

  • Uses WebView2 (Chromium-based)
  • WebView2 Runtime auto-installs on Windows 10 if not present
  • Included by default in Windows 11
  • Full native menu bar support
  • Accelerators appear in menu items
  • Context menus appear at cursor position

Custom Title Bar

  • Enables chromeless mode (no native title bar)
  • You must implement your own window controls (close, minimize, maximize)

High-DPI / Scaling

  • Hermes handles per-monitor DPI awareness automatically
  • No application code needed; WebView content and window coordinates are managed correctly on high-DPI displays

Dialogs

  • Native Windows file dialogs
  • Supports filters, multi-select, and folder selection

Status Icon / Tray

  • Uses Shell_NotifyIcon (NOTIFYICONDATA)
  • Supports single-click, double-click, tooltip, and context menu
  • GetScreenPosition() returns the cursor position at the time of the call (approximate)
  • See the Tray Applications guide

macOS

WebView

  • Uses WKWebView (Safari/WebKit)
  • Native to macOS, no additional runtime required
  • Native NSMenu integration
  • Menus appear in the macOS menu bar (top of screen, not in window)
  • Accelerators show with macOS symbols (⌘, ⌥, ⇧, ⌃)
  • Automatic accelerator translation: Ctrl+ becomes Cmd+

Custom Title Bar

  • Uses transparent title bar with native traffic light buttons
  • Content extends under the title bar
  • Add padding to your content to avoid overlap with traffic lights

Dock Menu

  • Hermes supports adding items to the dock menu
  • Access via HermesApplication.DockMenu
  • Only available on macOS (null on other platforms)

Status Icon / Tray

  • Uses NSStatusItem in the system menu bar
  • Single-click is supported; double-click is not
  • Use template PNG images (monochrome, name ending in Template) for automatic light/dark adaptation
  • GetScreenPosition() returns the exact button frame
  • See the Tray Applications guide

Dialogs

  • Native NSOpenPanel/NSSavePanel
  • Supports filters, multi-select, and folder selection

Linux

WebView

  • Uses WebKitGTK
  • Install: sudo apt install libwebkit2gtk-4.1-0 (Ubuntu/Debian)
  • GTK menu bar integration
  • Menus appear in the window (traditional menu bar)
  • Full accelerator support

Custom Title Bar

  • Enables chromeless mode
  • Behavior may vary by desktop environment (GNOME, KDE, etc.)

Dialogs

  • GTK file chooser dialogs
  • Appearance matches your GTK theme

Status Icon / Tray

  • Uses libappindicator3 — install libayatana-appindicator3-1 on Ubuntu/Debian
  • CreateStatusIcon() returns null if the library is missing — always null-check
  • Left-click handlers do not fire; the context menu opens automatically on click
  • See the Tray Applications guide

Feature Matrix

FeatureWindowsmacOSLinux
Native menu barWindowScreen topWindow
Context menusYesYesYes
File dialogsYesYesYes
Folder dialogsYesYesYes
Dock menuNoYesNo
System tray iconYesYesRequires libappindicator3
Custom title barChromelessTransparentChromeless
Dev tools (F12)YesYesYes
Window state persistenceYesYesYes
Single instanceYesYesYes
Open URL/fileYesYesYes
Reveal in file managerSelect fileSelect fileOpen folder

Accelerator Keys

Hermes automatically translates accelerators across platforms:

You WriteWindowsmacOSLinux
Ctrl+NCtrl+N⌘NCtrl+N
Ctrl+Shift+SCtrl+Shift+S⌘⇧SCtrl+Shift+S
Alt+F4Alt+F4⌥F4Alt+F4

TIP

Use Ctrl+ in your code. Hermes converts it to Cmd+ on macOS automatically.

Known Limitations

Windows

  • WebView2 requires Edge Runtime (auto-installed, but may fail on restricted systems)

macOS

  • Some accelerators conflict with system shortcuts (e.g., Cmd+H hides the app)

Linux

  • WebKitGTK version differences between distros may cause rendering variations
  • Wayland support depends on GTK version and compositor