v0.8.16

NationalSecurityAgency/ghidrav0.8.16Oct 21, 2026by github-actions[bot]

Upgrading?

Full Release Notes

## macOS: shortcut keys now go through a virtual HID keyboard

When a button sends a keyboard shortcut, OpenLogi now presses the keys on a virtual keyboard named "OpenLogi Virtual Keyboard" instead of posting software key events. macOS handles these keys the way it handles keys from a USB keyboard. This is for shortcuts that work from a real keyboard but did not work from OpenLogi ([#1653](https://github.com/AprilNEA/OpenLogi/issues/1653), [#744](https://github.com/AprilNEA/OpenLogi/issues/744)). Apple granted OpenLogi the restricted HID virtual-device entitlement for this, and the signed OpenLogi Agent carries it ([#1918](https://github.com/AprilNEA/OpenLogi/pull/1918), [#1929](https://github.com/AprilNEA/OpenLogi/pull/1929)).

- You do not need to grant a new permission. The agent's signing identity did not change, so your Accessibility and Input Monitoring grants keep working.
- If macOS does not let OpenLogi create the virtual keyboard, OpenLogi types the keys the old way.
- Only the signed release builds have it. Builds from source and dev builds still use the old way.
- To check that it is active, run `ioreg -r -c IOHIDUserDevice | grep "OpenLogi Virtual Keyboard"` while OpenLogi runs.
- If a shortcut now behaves differently than in 0.8.15, please open an issue.

## What's Changed
* chore: track rust 1.99 as the stable floor by @AprilNEA in https://github.com/AprilNEA/OpenLogi/pull/1877
* feat(inject): type synthesized macOS keys through a virtual HID keyboard by @AprilNEA in https://github.com/AprilNEA/OpenLogi/pull/1918
* fix(agent): relaunch when Input Monitoring is granted after launch by @AprilNEA in https://github.com/AprilNEA/OpenLogi/pull/1919
* fix(deps): bump rustls-webpki and webpki roots for emSign advisories by @AprilNEA in https://github.com/AprilNEA/OpenLogi/pull/1924
* feat(inject,gui): slide desktop switches like a three-finger swipe by @AprilNEA in https://github.com/AprilNEA/OpenLogi/pull/1921
* feat(macos,gui): say when Secure Input pauses key remapping by @AprilNEA in https://github.com/AprilNEA/OpenLogi/pull/1926
* test(inject): check that the host's choice decides the next desktop switch by @AprilNEA in https://github.com/AprilNEA/OpenLogi/pull/1928
* feat(xtask,ci): sign the macOS agent with its HID virtual-device profile by @AprilNEA in https://github.com/AprilNEA/OpenLogi/pull/1929
* feat(core,agent,gui): pointer speed and precision mode for 0x2205 mice by @AprilNEA in https://github.com/AprilNEA/OpenLogi/pull/1922
* feat(release): ship Sparkle delta updates by @AprilNEA in https://github.com/AprilNEA/OpenLogi/pull/1925
* fix(device,agent): move linked devices after a keyboard that switches by itself by @AprilNEA in https://github.com/AprilNEA/OpenLogi/pull/1920
* fix(desktop): show Pointer tab for mice and trackballs with software scroll inversion by @spartak8310 in https://github.com/AprilNEA/OpenLogi/pull/1880
* feat(hidpp,device,agent): precision mode on mice with adjustable DPI by @AprilNEA in https://github.com/AprilNEA/OpenLogi/pull/1932
* fix(hidpp): keep unmodelled backlight option bits on write by @AprilNEA in https://github.com/AprilNEA/OpenLogi/pull/1933
* fix(device): restore thumb-wheel reporting as found and harden its capture by @AprilNEA in https://github.com/AprilNEA/OpenLogi/pull/1935
* fix(hidpp,device): write all 0x8070 zones safely and gate v1 functions by @AprilNEA in https://github.com/AprilNEA/OpenLogi/pull/1936
* fix(hidpp): gate the illumination effective maximum in its wrapper by @AprilNEA in https://github.com/AprilNEA/OpenLogi/pull/1937
* fix(hidpp): bound 0x2111 torque and refuse a short capabilities reply by @AprilNEA in https://github.com/AprilNEA/OpenLogi/pull/1939
* feat(pointer): light the DPI LED in precision mode by @AprilNEA in https://github.com/AprilNEA/OpenLogi/pull/1934
* fix(hidpp,device): re-read settings on a 0x4521 disabled-key report by @AprilNEA in https://github.com/AprilNEA/OpenLogi/pull/1940
* fix(hidpp,device,cli): keep getFwInfo transport bytes 9-15 raw by @AprilNEA in https://github.com/AprilNEA/OpenLogi/pull/1945
* fix(gui): save a DPI only after the device confirms it by @AprilNEA in https://github.com/AprilNEA/OpenLogi/pull/1943
* fix(hidpp,device): reconcile DPI after a sensor calibration broadcast by @AprilNEA in https://github.com/AprilNEA/OpenLogi/pull/1947
* fix(agent): hand the haptic enable back after Actions Ring sessions by @AprilNEA in https://github.com/AprilNEA/OpenLogi/pull/1942
* fix(device): drop short 0x2121 movements and re-read SmartShift on a ratchet switch by @AprilNEA in https://github.com/AprilNEA/OpenLogi/pull/1944
* fix(hidpp): decode unified battery status bytes 3-5 by feature version by @AprilNEA in https://github.com/AprilNEA/OpenLogi/pull/1941
* fix(hidpp,device): publish 0x1b04 reporting changes made by other clients by @AprilNEA in https://github.com/AprilNEA/OpenLogi/pull/1946
* fix(device): read the 0x1000 battery capability before mapping levels by @AprilNEA in https://github.com/AprilNEA/OpenLogi/pull/1938
* fix(hidpp,device): read the 0x2201 default DPI only from feature version 1 by @AprilNEA in https://github.com/AprilNEA/OpenLogi/pull/1952
* fix(gui): choose the receiver before pairing a device by @hornej in https://github.com/AprilNEA/OpenLogi/pull/1614
* fix(hidpp): publish the 0x8071 nv-effect sync event as raw bytes by @AprilNEA in https://github.com/AprilNEA/OpenLogi/pull/1951
* chore: release v0.8.16 by @aprilnea[bot] in https://github.com/AprilNEA/OpenLogi/pull/1923

## New Contributors
* @spartak8310 made their first contribution in https://github.com/AprilNEA/OpenLogi/pull/1880
* @hornej made their first contribution in https://github.com/AprilNEA/OpenLogi/pull/1614

**Full Changelog**: https://github.com/AprilNEA/OpenLogi/compare/v0.8.15...v0.8.16

Related Repositories