Features
- check for updates from the menu, and say who wrote this
- offer an update in a native dialog on launch
- update the app in place from a signed GitHub release
- flip UI flags at runtime from a shortcut, so a signed build can be tested
- put rotation behind a build-time flag, off by default
- rotate the vault's secret, with every consequence stated first
- open the highlighted entry from the panel, and separate the disconnect verbs
- fill the browser from the panel
- Enter copies the highlighted result's password
- send the hotkey to the vault window when locked
- search the vault from the panel and pick a result
- make Enter the fill action in the panel
- show the panel's shortcuts under the search field
- offer to carry a vault's entries into the shared one
- connect a browser in one code and one click
- let a browser claim the sync invite over the link
- sync with the desktop app over the link, not the relay
- hold the desktop link open so sync can arrive unprompted
- sync with browsers on this machine over the link, not the relay
- carry sync frames over the browser link
- compare pairing emoji instead of twelve digits
- admit the joiner in the process, not the window
- keep the vault in step with its group after enrollment
- run device-sync enrollment in the webview
- give this device a sync identity
- expose the sync host's crypto, and skip the native WebRTC bridge
- ask the desktop app what it holds
- carry queries over the established session
- index the vault for the browser link
- bundle the proxy so the browser link works from a real app
- link to the Bramble desktop app
- show a pairing code in Settings
- install the native-messaging host manifest
- add the native-messaging proxy
- serve the browser pairing handshake over a local socket
- keep the pairing key in the OS credential store
- pair with a browser extension over an allowlisted static key
- expose the Noise handshake to the native build
- outlive the main window, and leave the Dock with it
- add the spotlight panel shell
- let the single-column screens fill the window
- fix the window at 600x580, and name the scripts by verb
- scaffold the Tauri 2 app on the shared Rust core
Bug Fixes
- hide the desktop link where the browser cannot do it
- make a universal build actually produce a universal app
- make --universal actually release a universal build
- serve a valid update manifest before the first release
- arm nothing when no desktop app is paired
- reconnect the pipe and the relay after either drops
- say whether the vault on screen is the one the desktop app shares
- keep the vault and its metadata owner-only
- say which vault a desktop connect will leave you in
- three faults the first real pairing surfaced
- let the release build reach the sync relay
- let cargo run in this crate without a staged sidecar
- make a broken pairing key visible instead of silent
- read the pairing key once, not per connection
- scan this package for Tailwind classes, and collapse the panel
- give the app icon the macOS shape
Refactors
- drop the link's Test button and site probe
- let a session take its peers from somewhere other than the relay
Documentation
- the bundling gap is closed
- record the browser link, and that pairing needs signing
- design extension unlock delegation as operation delegation
- write out the extension pairing's security model
- bring the port plan up to what was actually built
- plan the Tauri 2 desktop app
Other
- build(desktop): build universal everywhere, not just for a release
- test(desktop): give the desktop tests room for the first import
- build(desktop): release universal by default
- test(desktop): make the update smoke server usable in practice
- build(desktop): skip notarization for the local update test build
- build(desktop): cut releases with
pnpm release desktop <version> - test(desktop): serve a fake update locally to exercise the update path
- build(desktop): notarize with the App Store Connect key iOS already uses
- build(desktop): unlock the updater key with the YubiKey, like every other release key
- chore(i18n): translate the desktop strings and restore catalog ordering
- chore(desktop): take the signing identity from .env.local
- chore(desktop): add run:desktop, and sign build:desktop by default
- test(desktop): cover the reconnect path, and add an extension stand-in
- test(desktop): cover the storage layer, and make it testable
Full Changelog: 1.14.3-chromium...1.15.0-chromium