Releases: skim-rs/skim
4.0.0 - 2026-03-10
Release Notes
Changes
sk is now beating fzf in interactive matching for time, peak memory usage and CPU usage ! See the benchmarks below for details, including a brief explanation of the benchmark itself.
This release brings multiple breaking changes, please read the following if you have doubts about the update.
Default to the Arinae matcher
The biggest change of them all is that the default algorithm is now Arinae, skim's latest and most performant algorithm, featuring typo-resistance. If you want to keep using SkimV2, pass --algo skim_v2 and please take the time to open an issue explaining why if possible.
This also makes the --scheme option available to the default matcher, allowing for more refined matching scenarii.
Default to non-typo resistant
Typo-resistant behavior is now disable by default, add --typos to your skim invocation or SKIM_DEFAULT_OPTIONS to get it back. Unless you were using the frizbee, fzy or arinae matcher, this should not impact you.
Removal of the skim_v1 algorithm
The SkimV1 algorithm, skim's initial algorithm, has been deprecated for years now, and it has now been removed.
SkimItem index (library only)
SkimItem::get_index and SkimItem::set_index are gone, and all index handling is now done internally.
Benchmarks
This benchmarks runs the interactive interface in a tmux session, and waits for the UI to stabilize.
It uses a 10 million path-like ASCII items input file, and the query test.
=== Results: sk v4.0.0 [baseline] ===
Completed runs: 50 / 50
Average items matched: 2895782 / 10000000 (min: 2895782, max: 2895782)
Average time: 3.827s (min: 3.576s, max: 4.090s)
Average items/second: 2615767 (min: 2445033, max: 2796365)
Average peak memory usage: 1589.2 MB (min: 1518.6 MB, max: 1661.2 MB)
Average peak CPU usage: 528.9% (min: 457.0%, max: 740.0%)
=== Results: sk v3.7.0 ===
Completed runs: 50 / 50
Average items matched: 2895782 / 10000000 (min: 2895782, max: 2895782) +0.0%
Average time: 3.930s (min: 3.565s, max: 4.226s) +2.7%
Average items/second: 2548674 (min: 2366263, max: 2804816) -2.6%
Average peak memory usage: 1618.8 MB (min: 1539.1 MB, max: 1680.6 MB) +1.9%
Average peak CPU usage: 696.8% (min: 608.0%, max: 875.0%) +31.7%
=== Results: fzf 0.70.0 ===
Completed runs: 50 / 50
Average items matched: 2895782 / 10000000 (min: 2895782, max: 2895782) +0.0%
Average time: 5.421s (min: 4.814s, max: 6.111s) +41.7%
Average items/second: 1848269 (min: 1636444, max: 2077385) -29.3%
Average peak memory usage: 2015.3 MB (min: 1860.7 MB, max: 2173.9 MB) +26.8%
Average peak CPU usage: 1301.1% (min: 1229.0%, max: 1431.0%) +146.0%
=== Comparison Summary (vs baseline: sk v4.0.0) ===
Binary Avg time Ξ time Avg rate Ξ rate
------------------------------------------------------------------------------
sk v4.0.0 3.827s baseline 2615767 baseline
sk v3.7.0 3.930s +2.7% 2548674 -2.6%
fzf 0.70.0 5.421s +41.7% 1848269 -29.3%
π Features
- [breaking] Internally compute indexes at match time (removes get/set_index) (#1001)
- [breaking] Use Arinae as default algorithm
βοΈ Miscellaneous Tasks
- [breaking] Default to disabled typos
- Use python for bench script for comparison
Install skim 4.0.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/skim-rs/skim/releases/download/v4.0.0/skim-installer.sh | shDownload skim 4.0.0
| File | Platform | Checksum |
|---|---|---|
| skim-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| skim-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| skim-aarch64-unknown-linux-gnu.tar.xz | ARM64 Linux | checksum |
| skim-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |
| skim-x86_64-unknown-linux-musl.tar.xz | x64 MUSL Linux | checksum |
3.7.0 - 2026-03-08
Release Notes
This adds a new library API: Skim::run_items. Using this, you don't need to send the items, the library handles it for you.
Instead of writing this:
use skim::prelude::*;
let (rx, tx) = unbounded();
// We need MySkimItem to override the set_index/get_index methods
struct MySkimItem {
value: String,
index: usize
}
impl SkimItem for MySkimItem {
// Implement the default members
}
tx.send(vec![Arc::new(MySkimItem { value: String::from("foo"), index: 0 }) as Arc<dyn SkimItem>, Arc::new(MySkimItem { value: String::from("bar"), index: 1 }) as Arc<dyn SkimItem>]);
let res = Skim::run_with(options, Some(rx));You can simply write this:
use skim::prelude::*;
let res = Skim::run_with(options, ["foo", "bar"]);It will automatically convert any iterator of by adding an index field and then send it, before running skim.
π Features
- Add
schemefor better filepath matching in Arinae - Add Skim::run_items API
π Bug Fixes
- Use sum of scores in And engine
- Correctly init rank for and engine
βοΈ Miscellaneous Tasks
- Add gungraun benchmark
- Review snapshots
Install skim 3.7.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/skim-rs/skim/releases/download/v3.7.0/skim-installer.sh | shDownload skim 3.7.0
| File | Platform | Checksum |
|---|---|---|
| skim-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| skim-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| skim-aarch64-unknown-linux-gnu.tar.xz | ARM64 Linux | checksum |
| skim-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |
| skim-x86_64-unknown-linux-musl.tar.xz | x64 MUSL Linux | checksum |
3.6.2 - 2026-03-04
Release Notes
βοΈ Miscellaneous Tasks
- Refactor app layout computations to take them out of the hot loop (#996)
- Allow using flag or env vars for both log level and file
Install skim 3.6.2
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/skim-rs/skim/releases/download/v3.6.2/skim-installer.sh | shDownload skim 3.6.2
| File | Platform | Checksum |
|---|---|---|
| skim-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| skim-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| skim-aarch64-unknown-linux-gnu.tar.xz | ARM64 Linux | checksum |
| skim-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |
| skim-x86_64-unknown-linux-musl.tar.xz | x64 MUSL Linux | checksum |
3.6.1 - 2026-03-03
Release Notes
βοΈ Miscellaneous Tasks
- Switch allocator to mimalloc for ~20% perf in some cases
- Add bench plot scripts
Install skim 3.6.1
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/skim-rs/skim/releases/download/v3.6.1/skim-installer.sh | shDownload skim 3.6.1
| File | Platform | Checksum |
|---|---|---|
| skim-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| skim-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| skim-aarch64-unknown-linux-gnu.tar.xz | ARM64 Linux | checksum |
| skim-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |
| skim-x86_64-unknown-linux-musl.tar.xz | x64 MUSL Linux | checksum |
3.6.0 - 2026-03-02
Release Notes
This version adds the Arinae algorithm as an option, run sk --algo arinae to use it !
Arinae is designed to become skim's default algorithm in the future.
Technically, it uses Smith-Waterman and a modified Levenshtein distance with affine gaps for scoring, as well as multiple optimizations (the main ones being a loose prefilter and checks for early dismissal of paths that cannot lead to the best match). It also forbids typos on the first char of the query.
In practice, it should feel close to FZY's scoring with typos disabled, but with a more natural behavior regarding typos as Frizbee or other algorithms.
These other algorithms usually work by allowing a set number of typos using 3D matrices for computations, the max-typos value being set based on the length of the query. In practice, that meant that tes will match exactly, but test will allow one typo, meaning that typing a single character will change the filtered items completely. This algorithm will instead penalize typos, not block them completely.
This algorithm does not aim to revolution anything, but it aims at making typo-resistant fuzzy matching feel more like an actual alternative to the current options (namely FZF and FZY), while maintaining per-item performance at least as good as the current algorithms.
π Features
- Merge ranks in AndOr engine matcher
- Add Arinae algorithm (#990)
- (shell) Colored history widgets & remove perl completely (#994)
π Bug Fixes
- Make sure we drop Skim before returning the output
πΌ Other
- Drop flake-utils, add formatter (#992)
New Contributors
Install skim 3.6.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/skim-rs/skim/releases/download/v3.6.0/skim-installer.sh | shDownload skim 3.6.0
| File | Platform | Checksum |
|---|---|---|
| skim-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| skim-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| skim-aarch64-unknown-linux-gnu.tar.xz | ARM64 Linux | checksum |
| skim-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |
| skim-x86_64-unknown-linux-musl.tar.xz | x64 MUSL Linux | checksum |
3.5.0 - 2026-02-22
Release Notes
π Features
- Add fzy matcher and
--typos/--no-typosflag (#987)
π Bug Fixes
- Correctly bind uppercase keys
- More precision on AndOr matches (closes #526)
- Respect the and & or priority
βοΈ Miscellaneous Tasks
- (dep) Remove unused dependency 'beef' (#986)
- (dep) Frizbee 0.8.1 (#985)
- Add partial bench to measure the time it takes to setup skim
- Pin dependencies to the latest exact version
New Contributors
- @bitfehler made their first contribution in #985
- @Sisyphus1813 made their first contribution in #983
Install skim 3.5.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/skim-rs/skim/releases/download/v3.5.0/skim-installer.sh | shDownload skim 3.5.0
| File | Platform | Checksum |
|---|---|---|
| skim-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| skim-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| skim-aarch64-unknown-linux-gnu.tar.xz | ARM64 Linux | checksum |
| skim-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |
| skim-x86_64-unknown-linux-musl.tar.xz | x64 MUSL Linux | checksum |
3.4.0 - 2026-02-19
Release Notes
π Features
- Allow setting delimiters in
+expansions (closes #935) - Add set-header action (closes #768)
- Add
--print-current,--output-format(closes #981) - Add --ellipsis option
- Back to stable rust (#980)
π Bug Fixes
- (ci) Do not run benches
πΌ Other
- Add filter
π Documentation
- Benchmarks
βοΈ Miscellaneous Tasks
- Add rust benchmark
Install skim 3.4.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/skim-rs/skim/releases/download/v3.4.0/skim-installer.sh | shDownload skim 3.4.0
| File | Platform | Checksum |
|---|---|---|
| skim-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| skim-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| skim-aarch64-unknown-linux-gnu.tar.xz | ARM64 Linux | checksum |
| skim-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |
| skim-x86_64-unknown-linux-musl.tar.xz | x64 MUSL Linux | checksum |
3.3.0 - 2026-02-18
Release Notes
π Features
- Use a separate thread pool for Matcher runs (#961)
- Event-driven re-render (#949)
- Allow run_with to be run within a tokio runtime (#979)
π Bug Fixes
- Possible None unwrap if ansi enabled but not in item
βοΈ Miscellaneous Tasks
- Unify filter mode & squeeze more perf (#974)
- Refactor Skim into its own file
New Contributors
Install skim 3.3.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/skim-rs/skim/releases/download/v3.3.0/skim-installer.sh | shDownload skim 3.3.0
| File | Platform | Checksum |
|---|---|---|
| skim-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| skim-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| skim-aarch64-unknown-linux-gnu.tar.xz | ARM64 Linux | checksum |
| skim-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |
| skim-x86_64-unknown-linux-musl.tar.xz | x64 MUSL Linux | checksum |
3.2.0 - 2026-02-13
Release Notes
π Features
- Further reduce DefaultSkimItem size (#967)
βοΈ Miscellaneous Tasks
- Enhance PR template [skip ci]
Install skim 3.2.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/skim-rs/skim/releases/download/v3.2.0/skim-installer.sh | shDownload skim 3.2.0
| File | Platform | Checksum |
|---|---|---|
| skim-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| skim-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| skim-aarch64-unknown-linux-gnu.tar.xz | ARM64 Linux | checksum |
| skim-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |
| skim-x86_64-unknown-linux-musl.tar.xz | x64 MUSL Linux | checksum |
3.1.1 - 2026-02-13
Release Notes
π Bug Fixes
- Republish crate
Install skim 3.1.1
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/skim-rs/skim/releases/download/v3.1.1/skim-installer.sh | shDownload skim 3.1.1
| File | Platform | Checksum |
|---|---|---|
| skim-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| skim-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| skim-aarch64-unknown-linux-gnu.tar.xz | ARM64 Linux | checksum |
| skim-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |
| skim-x86_64-unknown-linux-musl.tar.xz | x64 MUSL Linux | checksum |