● 0.1.0 pre-release MIT Rust + floem Wayland + X11

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.

pikr — drun
fir 3 / 412
Firefox web browser
Fire Studio scene graph editor
Firmware Finder device tools
NORMAL j/k move · / search · <CR> launch · : ex · <Esc> quit

why

A launcher shaped like a vim picker.

01 — KEYS

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.

02 — FUZZY

nucleo matcher

The same fuzzy matcher Helix ships. Match positions highlight inline so you can see why a row scored where it did.

03 — MODES

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.

04 — RENDER

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.

05 — SINGLE BIN

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.

06 — WAYLAND + X11

Native, not wrapped

No GTK, no Qt, no Electron. wlroots-style layer-shell on Wayland; override-redirect window on X11. Same binary, same UX.

07 — STDIN

Pipe anything

echo "$(ls)" | pikr --dmenu picks a line. Stdout is clean — wire pikr into shell pipelines the way you'd wire fzf.

08 — DETACHED

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.

09 — PRIVACY

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.

--dmenu / -d
dmenu
Read newline-separated entries from stdin, print the accepted selection to stdout. Drop-in for shell pipelines. Compatible with rofi's -dmenu flag.
--show drun
drun
Scan $XDG_DATA_DIRS/applications/*.desktop, honor Hidden / NoDisplay, parse Exec= per the freedesktop spec. Launch detached.
--show run
run
Walk $PATH, dedupe executable names, exec the selection in a fresh process group. No shell interpolation of untrusted input.

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.

normal mode · navigation
j / k move down / up
gg / G top / bottom
Ctrl-d / Ctrl-u half-page down / up
5j count prefix · jump 5 rows
normal mode · action
i enter insert mode
/ start search
: ex command line
Enter accept selection
Esc cancel
ex commands
:dmenu switch to dmenu mode
:drun switch to drun mode
:run switch to run mode
:q quit

install

Prebuilt binaries on every release; Homebrew tap for macOS; AUR for Arch; Alpine .apk; build from source anywhere else.

STATUS · pikr is pre-1.0 and v0.1.0 has not shipped yet. CI builds the matrix below on every 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.

pikr — Arch Linux (AUR)
$ yay -S pikr-bin
$ paru -S pikr-bin
$ pikr
pikr — macOS (Homebrew)
$ brew install kryptic-sh/tap/pikr
$ pikr
pikr — Alpine Linux
$ # download .apk from releases page, then:
$ apk add --allow-untrusted pikr-*.apk
$ pikr
pikr — from source
$ git clone https://github.com/kryptic-sh/pikr
$ cd pikr
$ cargo build --release

# binary in target/release/pikr