Releases: archdex-art/SuperSearch
Release list
SuperSearch v0.1.17
Fixes the actual root cause behind the "hotkey doesn't work" reports: the
capture UI itself could persist a corrupted shortcut.
Fixed
- Rebinding the hotkey to an Option/Alt combo could silently corrupt it.
Live log evidence:Global shortcut registration failed ... error=Found empty token while parsing hotkey: Alt+\u{a0}. The General pane's capture
UI built the accelerator fromKeyboardEvent.key— the composed
character — but macOS recomposes many keys under Option into a different
Unicode character than what's printed on the keycap: Option+Space'skey
is a non-breaking space (U+00A0), not a plain" ", and Option+letters
compose accented characters (Option+C → "ç"). The capture UI showed
"Alt+Space" (the display used the physical key label) but silently
persisted"Alt+<NBSP>"(built from the composed character) to
settings.json— invisible until the next boot's registration attempt
rejected it outright. The 0.1.15/0.1.16 self-heal recovered the hotkey
back to the default afterward, but the underlying capture bug meant
rebinding to any Option combo reproduced it every time.
toAcceleratornow resolves letters/digits/Space from
KeyboardEvent.code(the physical key, unaffected by modifier
composition) instead ofkey. Verified live: simulated the exact
Option+Space event macOS actually sends (code: "Space", key: "\u00A0")
and confirmed it now captures asAlt+Space; same for Option+C
(key: "ç") capturing asAlt+C.
SuperSearch v0.1.16
Fixes the hotkey going completely silent instead of just "unreliable."
Fixed
- The hotkey could register zero times instead of falling back. The
0.1.15 self-heal only ever retried with the default shortcut, and only
when the configured shortcut already differed from it — so a transient
registration failure while the configured shortcut was already the
default (the common case) left the app with no working hotkey at all
until the next restart, no retry, no fallback. This is exactly what
happens when an old build is still squatting on the same combo: confirmed
live viaps auxfinding a pre-0.1.15/Applications/SuperSearch.app
process still running (started well before the fix was pulled) still
holdingAlt+Space, which the newly-started process's own registration
attempt then silently lost to. Registration now retries the same
shortcut up to 3 times with a 200ms backoff before giving up on it —
covers the OS taking a moment to release a hotkey a just-exited duplicate
process (an old build, or asingle_instance/dev-restart handoff) was
still holding.
SuperSearch v0.1.15
Three fixes for "the hotkey doesn't reliably summon the palette," found while
chasing a settings-persistence report back to its actual root cause.
Fixed
- Two competing processes could run at once, each with its own cached
settings. A second launch (a stray/Applicationsinstall left running
alongside acargo tauri devsession, or an overlapping dev restart)
started a fully independent process — its ownSettingsStoreloaded once
from disk at its own boot time, its own attempt at registering the same
global hotkey. Two processes racing for one hotkey meant summoning "the
palette" could nondeterministically show either one's window, and each had
its own stale view of settings (therevguard added in 0.1.14 only
covers races within one process — it can't help across two with no
shared memory). Addedtauri-plugin-single-instance, registered first per
Tauri's requirement: a second launch now just re-summons the one running
instance's palette instead of starting a competing process. Verified live
— launched the binary twice and confirmed viapsthat the second
process exits (defunct, status 0) instead of staying alive. - The hotkey could show the window without it ever actually taking
keyboard focus. The palette runs underActivationPolicy::Accessory(no
Dock icon) — the one case whereWebviewWindow::set_focus()alone is
unreliable on macOS.set_focus()callsmakeKeyAndOrderFront:on the
window; it doesn't activate the process. Summoned from a background
global hotkey while a different app holds focus, an accessory app's window
can end up visually shown but not actually key, so it silently never
receives keyboard input — indistinguishable from "the hotkey did nothing."
show_palettenow also callsactivateIgnoringOtherApps:on
NSApplication, whichset_focus()never did. - A hotkey press during the close animation could get silently dropped.
closingRef(read by the toggle-hotkey listener to tell "genuinely idle"
apart from "still animating closed") was mirrored from React state via a
useEffect, which only runs after React commits the next render. A
hotkey re-summon landing in that gap — e.g. right afterhide_on_blur
starts a close — read the previous value ofclosingRef.currentand hit
the wrong branch: it calledhide()again (a no-op, already closing)
instead of cancelling the close and reopening.closingRefis now updated
synchronously at the same call site assetClosing, closing that window
entirely rather than narrowing it.
SuperSearch v0.1.14
Fixes an accent-color persistence race: a color chosen in Settings could
silently revert to the default on the next launch.
Fixed
- A picked accent color could get clobbered back to the default.
update_settingsfires on every step of the Appearance accent picker
(eachHexColorPickerdrag frame, and rapid preset clicks), so several
update_settingsIPC calls can be in flight at once. Tauri dispatches
each command invocation to its own task and does not guarantee they
complete in the order they were issued — an earlier, slower write
(e.g. an early drag frame, or an accidental "Amber" click quickly followed
by the intended color) could finish after the final color and silently
overwritesettings.jsonback to a stale value. The running session kept
showing the correct color (already applied locally), so nothing looked
wrong until the next full quit-and-relaunch read the stale value back off
disk.SettingsStore::setnow takes a strictly-increasingrevthe
frontend bumps once per issued patch, and discards any write whoserev
isn't newer than the last one actually applied — the newest issued
change always wins on disk, regardless of which IPC call happens to land
first. Covered bysettings::tests::stale_out_of_order_write_is_discarded.
SuperSearch v0.1.13
Extends the base theme to the main palette window (it only ever reached the
Settings window before), surfaces failed open/launch actions instead of
silently closing, and removes a rendering artifact around the palette.
Fixed
- Theme choice didn't apply to the palette. Each Tauri window is its own
webview with an independentdocument; picking Light in Settings only
ever setdata-themeon the Settings window's own document; the main
palette never calledapplyTheme()at all, so it always rendered the dark
default no matter what was chosen — looking like the setting kept
resetting on every summon. The palette now applies the persisted theme on
boot and live on everysettings-changedbroadcast, the same way it
already did for accent color. Converted the palette's own hardcoded
white/*andhsla(32,14%,6%,…)tokens (App.tsx,CommandItem.tsx,
DetailPane.tsx,categories.ts) to theink/canvassemantic colors
introduced in 0.1.12 so Light actually repaints it, not just Settings. - Failed file/app opens closed the palette with zero feedback.
execute_actionalways reportedacknowledged: trueeven when the
underlyingopen/xdg-opencall failed (bad or stale path, no default
handler, a permission gate, …), and the frontend never inspected the
response before closing — a failed open and a successful one looked
identical to the user. Added an explicitsuccessfield to
ExecuteActionResponse; the palette now only closes on success and
otherwise keeps the panel open with an inline error banner naming the
actual OS-level failure. - Translucent rectangle around the palette. The panel's ambient
box-shadow (blur-90px/spread--20px) reached far past the 12px padding
around it, but the window itself is transparent with no native shadow —
so the shadow's soft gradient got hard-clipped at the window's true
rectangular bounds instead of fading out, showing as a faint rectangular
edge floating around the rounded card. Shrunk the shadow to fit inside
the existing padding so it now fades to nothing before it ever reaches
the window edge.
SuperSearch v0.1.12
Fixes two settings-window bugs found during a UI pass, and adds a real
light/dark base theme alongside the existing accent picker.
Fixed
- Behavior toggle switch overflowed its track. The switch thumb had no
base horizontal anchor (left), so the browser fell back to a
static-position heuristic that rendered it flush against — and partly
outside — the track's right edge in the checked state. Anchored with
left-0sotranslate-x-*offsets are relative to a known origin. - Global hotkey capture looked stuck on "Listening…". The bound toggle
shortcut stays registered as an OS-level global hotkey the entire time the
settings window is open, so pressing that combo (or anything already
intercepted) while recording a new one never reached the capture
keydownlistener — the OS grabbed it first. The settings window now
suspends the active global hotkey for the duration of a capture session
(suspend_toggle_shortcut) and re-arms it on cancel, failure, or unmount
(resume_toggle_shortcut); a successful capture re-registers the new
combo instead, via the existingupdate_settings→rebind_togglepath.
Added
- Base theme selector. Appearance now has a Dark/Light theme picker
alongside Accent Color, independent of it. Every settings-window surface
reads its ink/canvas colors from CSS variables (--ink-rgb,
--canvas-rgb) flipped bytheme.ts:applyTheme(), so switching themes
repaints the whole window instantly — no reload.
SuperSearch v0.1.10
Add Settings window: accent color, extension folder install (v0.1.10) New decorated preferences window (open_settings_window), separate from the frameless palette overlay — toggles macOS Dock/activation policy while open, hides (not destroys) on close to preserve state. - accent_color setting overrides the built-in amber identity; applied via theme.ts:applyAccent() and live-repainted through settings-changed events. - Native folder picker for installing an extension from a directory. - Bump crate/bundle version to 0.1.10 (tauri.conf.json + Cargo.toml).
SuperSearch v0.1.6
Static aurora rim
Follow-up polish on 0.1.5: the panel's gradient border no longer rotates —
it's a fixed diagonal sweep (violet top-left → amber bottom-right) plus a
matching static glow under the panel shadow. Calmer for a tool opened
dozens of times a day.
See CHANGELOG.md for details.
Note: unsigned builds (no signing credentials configured) — expect
Gatekeeper/SmartScreen warnings on first launch.
SuperSearch v0.1.5
Command palette redesign
Master-detail layout, category color coding, and a new violet/amber
"aurora" visual identity — structurally inspired by list+detail launchers
(type filter, context-aware action bar) without reusing any specific
product's theme.
See CHANGELOG.md for details.
Note: these builds are unsigned (no Apple/Windows signing credentials
configured — see RELEASING.md). Expect Gatekeeper/SmartScreen warnings on
first launch.
SuperSearch v0.1.4
v0.1.4: UI responsiveness (typing jitter + action freezes), full-scre…