Pick anything.
hjkl-fast.
Vim-modal picker. Rofi replacement.
dmenu over stdin. XDG .desktop launcher.
$PATH runner. Wayland layer-shell incoming. One binary,
no daemon, no phone-home.
why
A launcher shaped like a vim picker.
Vim-modal navigation
Normal/Insert split. j/k move. gg/G snap. Ctrl-d/Ctrl-u half-page. / search. : ex command. Count prefixes work — 5j jumps five rows.
nucleo matcher
The same fuzzy matcher Helix ships. Match positions highlight inline so you can see why a row scored where it did.
dmenu / drun / run
Three modes day one, behind a single Mode trait. Pipe
stdin and consume stdout; or launch a desktop app; or exec from
$PATH. Switch live with :drun.
floem + winit fork
Built on floem (vello GPU render, reactive views). Wayland layer-shell support lands through a winit fork — proper overlay, exclusive zone, keyboard capture. Upstream PR planned.
No daemon. No state.
Cold-start picker, exit on accept. No background service. Config is pure TOML, never auto-written, in-memory defaults when absent.
Native, not wrapped
No GTK, no Qt, no Electron. wlroots-style layer-shell on Wayland; override-redirect window on X11. Same binary, same UX.
Pipe anything
echo "$(ls)" | pikr --dmenu picks a line. Stdout is
clean — wire pikr into shell pipelines the way you'd wire fzf.
Launches don't leak
Spawned processes are detached (setsid + double-fork). pikr's exit doesn't kill the launched app; the launched app doesn't capture pikr's file descriptors.
Zero telemetry
No analytics, no update pings, no usage stats. No network I/O in the core binary. Local config, local defaults.
modes
Three sources of selectable rows, one keymap.
Modes implement a single Mode trait:
entries() -> Vec<Entry> +
select(&Entry). Picker state, key dispatch, matcher,
and UI are mode-agnostic. Plugin host (WASM / dyn) is tracked as a
followup.
keys
The bindings you already know.
Two modes, vim semantics. Normal is the default — typing i enters Insert (free-form text into the query). Esc returns to Normal.
install
Prebuilt binaries on every release; Homebrew tap for macOS; AUR for Arch; Alpine .apk; build from source anywhere else.
v* tag — the
first release will land once Epic 1 (CI/packaging templates) and
Epic 3 (UI + keymap) close. Track progress on
GitHub issues.
Each tagged release will ship x86_64 + aarch64 Linux (glibc 2.28), Alpine .apk, Windows MSVC, and macOS (Intel + Apple Silicon) binaries with SHA-256 sidecars. macOS via Homebrew tap. Arch via AUR.
$ yay -S pikr-bin $ paru -S pikr-bin $ pikr
$ brew install kryptic-sh/tap/pikr $ pikr
$ # download .apk from releases page, then: $ apk add --allow-untrusted pikr-*.apk $ pikr
$ git clone https://github.com/kryptic-sh/pikr $ cd pikr $ cargo build --release # binary in target/release/pikr