skim
A fast, interactive fuzzy finder for the command line, written in Rust — a smarter alternative to grep.
Repository Health
Technical Analysis
skim is a powerful fuzzy finder for the terminal, written in Rust and distributed as a single executable called sk. It lets you interactively filter large streams of text — files, lines, command history, process lists — narrowing results in real time as you type, much like fzf but built on the Rust ecosystem.
Beyond the standalone binary, skim is also published as a Rust crate that you can embed in your own applications to add an interactive fuzzy-selection interface. It works as a filter in shell pipelines, integrates with Vim and shell key bindings, and supports interactive mode where each keystroke can re-run an underlying command.
What You Get
- The
skexecutable — an interactive fuzzy finder usable in any shell pipeline - An embeddable Rust crate exposing skim’s matching engine and terminal UI
- Interactive mode that re-runs a command on each keystroke for live results
- Vim plugin integration and shell key bindings for fuzzy history and file search
Common Use Cases
- Fuzzy-filtering files, lines, or command output interactively from the terminal
- Building fuzzy-selection prompts into a Rust CLI application via the crate
- Fast in-editor and in-shell navigation through Vim and shell key-binding integrations
Under The Hood
Architecture — skim separates its reusable matching/UI engine (the skim library crate) from the sk binary that drives it. Input is read as a stream of items, fed through a fuzzy-matching engine, and rendered in an interactive terminal UI. Recent versions build the interface on Ratatui (as advertised by the project’s badge), and interactive mode wires keystrokes to re-run a configured command so results update live.
Tech Stack — Pure Rust, distributed via crates.io and numerous OS package managers. The project ships a Vim plugin and shell-binding scripts alongside the core crate, and uses GitHub Actions for build, test, and coverage reporting.
Code Quality — The repository is well-tested, with roughly five dozen source files containing unit tests plus a published coverage badge and CI-enforced build-and-test workflow. Development is very active with a consistent release cadence and a large contributor base.
API Design — For end users the CLI is immediately familiar: pipe text into sk and start typing. For developers the crate exposes a composable API to feed items and receive selections, making it straightforward to add a fuzzy picker to a Rust program without reimplementing terminal handling.