flash

How Flash compares, and FAQ

This is the one-screen summary. The alternatives pages take each tool in turn, with where it is stronger than Flash, where Flash is stronger, and how to move a setup over.

  License Hints from Also has Flash adds
Neru MIT Accessibility, optional OCR and contour detection Grid, bisect, scroll mode, Linux and Windows Accessibility only, normal mode with per-app actions, search, status bar, widgets, popups, plugins
Homerow Paid, closed Accessibility Scroll, search Free, configured in a file, everything past clicking
Shortcat Closed Accessibility, by typing visible text   mouse_target --search does that, next to labels
Scoot BSD-3 Accessibility Grid Normal mode, terminal hints, search, plugins
Vimac GPL, unmaintained Accessibility Scroll Homerow’s open-source predecessor; Flash is maintained
Wooshy, Mouseless, Superkey Paid Accessibility or text seek   Superkey’s text seek needs Screen Recording; Flash does not
Vimium, Surfingkeys MIT The DOM, in the browser   Every app, no extension
Neverclick Free, closed, Windows only A screen capture Path and sticky hints, word targets, target snapping The same hints from Accessibility, never a capture: path, sticky, words and adjust ship, with drag and text selection; see the migration guide
mousemaster MIT, Windows and macOS as root Accessibility, screen grids, a screen capture Combos and remapping, continuous movement, position history, zoom Pointer mode, display labels, warps and saved positions without root or a capture; remapping stays with Karabiner or kanata; see the migration guide
Hammerspoon MIT   Lua automation of everything A ready-made keyboard layer in TOML; see the migration guide. Hammerspoon can drive Flash with flash <verb>
SketchyBar GPL   Scriptable bar tmux formats, and one plugin feeds the bar, hints, search and widgets
Übersicht, conky GPL   Web-view widgets; conky needs XQuartz Native text widgets fed by the bar’s collectors
Raycast, Alfred Closed   Launchers flashlight covers apps, tabs, emoji and quick math; Flash’s focus is acting on what is on screen, and it runs fine next to them

Window managers are not on the list on purpose: Flash moves and focuses windows but does not tile. It runs next to AeroSpace, yabai or Rectangle.

Flash only sees what an app exposes to Accessibility. Canvas-drawn interfaces and some games show no hints; use the grid there.

Performance

Flash prepares each focused window’s targets in the background as it changes, so most activations draw hints without walking the app. Every activation logs its latency from the keypress to the frame that shows the hints; performance has the method, the benchmark script, and measurements.

FAQ

Is it Vim? No. NORMAL, INSERT and COMMAND are borrowed from Vim because they are a good way to make one keyboard do two jobs; the bindings are Vimium’s and your own, not an editor’s.

Does it work in Electron apps and Chrome? Yes, through the Accessibility tree Chromium exposes once an assistive client asks for it. Flash prepares a window’s targets in the background as it changes; a prepared window shows hints in a fraction of a millisecond, and a cold walk of a small page takes 10 to 25 ms on an M4 Pro. A canvas, a game or a remote desktop exposes nothing; use the grid.

Is the key tap a keylogger? It runs only while Flash owns input, decides swallow or pass for each key, and never stores anything. The tap lives in one file, KeyboardCaptureTap.swift, and a guardrail rejects any other tap or global key monitor.

What does it cost at idle? Hints follow Accessibility events and tmux follows its control client, so nothing polls for them. Whatever must poll (CPU, battery, a feed) ticks on the one scheduler in the process, which coalesces wake-ups and pauses when the display sleeps. The budget and the script that measures it are in performance.

Why not Hammerspoon, Karabiner, SketchyBar and a tiler? You can keep them. Flash is the part that wants a single modal layer and a single file: hints, modes and the bar sharing one set of plugins. It does not tile, remap hardware keys or run Lua.

Non-QWERTY keyboard? Labels, grid keys and mappings are read by key position, so AZERTY, Dvorak and non-Latin input sources work without configuration ([app] keyboard_layout).

Several displays? Hints cover the focused window; --scope=screen labels every app on the screen. Tab moves the grid to the next display. The bar sits on the display you choose, and each widget can sit on one display or all of them.