A command-line fuzzy finder that can find CJK text by how it sounds.
Type Latin letters, match Japanese, Korean, and Chinese:
yuru --lang zh --filter bjdx # finds 北京大学.txt (pinyin initials)
yuru --lang ja --filter kamera # finds カメラ.txt (romaji)
yuru --lang ko --filter hangeul # finds 한글.txt (romanized Hangul)If you use fzf, Yuru should feel familiar: the same key bindings, the same shell integration, and most of the same options.
The name is ゆるい - loose, relaxed. Your query can be a little loose and Yuru
still finds what you meant.
yuru-promo.mp4
Full-quality MP4 demos from the repository: English · 中文
Installs into your home directory. No sudo.
macOS / Linux
curl -fsSL https://raw.githubusercontent.com/Ameyanagi/yuru/main/install | sh -s -- --allWindows (PowerShell)
$script = irm https://raw.githubusercontent.com/Ameyanagi/yuru/main/install.ps1
iex "& { $script } -All"Cargo
cargo install yuru--all also sets up shell integration and asks a few setup questions - default
language, preview style, key bindings - writing your answers to
~/.config/yuru/config.toml. Press Enter to accept the defaults, or re-run the
questions any time with yuru configure.
Drop --all to install just the binary. Building from source needs a C compiler
for the Japanese dictionary; the released binaries do not.
Both install the latest release; release-pinned commands for reproducible setups, unattended installs, checksums, update, and uninstall are in install and uninstall.
Add to your shell config:
eval "$(yuru --bash)" # bash
source <(yuru --zsh) # zsh
yuru --fish | source # fishInvoke-Expression ((yuru --powershell) -join "`n") # PowerShellbash, zsh, fish, and PowerShell need nothing extra. For cmd.exe, see below.
That gives you:
| Key | Does |
|---|---|
CTRL-T |
insert a file or directory path |
CTRL-R |
search command history |
ALT-C |
cd into a directory |
** then TAB |
fuzzy path completion |
Same bindings as fzf, so muscle memory carries over.
cmd.exe cannot bind keys on its own, so the integration runs through Clink (v1.2.46 or newer), which adds a line editor to cmd. Install Clink first — pick one:
winget install clink
or scoop install clink, or the installer from
Clink's releases. The installer
offers to start Clink automatically in new cmd windows; after a winget or
scoop install, open a fresh cmd window (so its PATH picks up Clink) and
enable that once with clink autorun install.
Then generate the yuru script into a Clink scripts directory and open a new cmd window:
if not exist "%LOCALAPPDATA%\clink" mkdir "%LOCALAPPDATA%\clink"
yuru --clink > "%LOCALAPPDATA%\clink\yuru.lua"clink info confirms Clink is active. CTRL-T and ALT-C draw candidates from
Yuru's own walker, so no fd is required.
Yuru itself works in cmd without Clink for scripting — type files.txt | yuru --filter foo — which needs nothing installed. Clink only adds the interactive
key bindings.
Pipe anything in:
fd --hidden --exclude .git . | yuru --scheme pathThe interface opens immediately and keeps filling while the input arrives, so it
works on large inputs. Use --sync to wait for all input first, like fzf.
Use --filter for non-interactive use, in scripts:
printf "README.md\nsrc/lib.rs\n" | yuru --filter libPick a language with --lang, or set one as your default during install:
printf "北京大学.txt\nnotes.txt\n" | yuru --lang zh --filter bjdx
printf "カメラ.txt\n" | yuru --lang ja --filter kamera
printf "한글.txt\n" | yuru --lang ko --filter hangeulKorean also matches choseong initials (ㅎㄱ) and 2-set keyboard input
(gksrmf). Use --lang all for mixed lists, or --lang auto to pick a backend
from your locale and the input.
Not sure why something matched?
printf "北京大学.txt\n" | yuru --lang zh --filter bjdx --explainSomething not working? Start with yuru doctor.
More detail in language matching.
Yuru accepts fzf's option surface, so existing shell bindings and
FZF_DEFAULT_OPTS keep working. Search and scripting options - --query,
--filter, --nth, --with-nth, --scheme, --expect, --select-1,
--print-query, --read0, --print0 and friends - are implemented.
--bind is partial, and unsupported actions warn rather than fail:
yuru --fzf-compat warn # default
yuru --fzf-compat strict # fail instead
yuru --fzf-compat ignore # stay quietFull matrix, including preview and image support, in fzf compatibility.
~/.config/yuru/config.toml, written for you by the guided install:
[defaults]
lang = "auto" # plain | ja | ko | zh | all | auto
scheme = "path" # default | path | history
case = "smart" # smart | ignore | respect
[preview]
command = "auto" # auto | none | any shell command
[shell]
bindings = "all" # all | none | ctrl-t,ctrl-r,alt-c,completionEvery key, and how config interacts with FZF_DEFAULT_OPTS, is in
configuration.
| Install and uninstall | unattended installs, checksums, updating, removal |
| Configuration | every option, and precedence rules |
| Language matching | what matches what, per language |
| fzf compatibility | option matrix, preview, known gaps |
| Troubleshooting | when something misbehaves |
| Architecture | indexing, search, and why it is fast |
| Performance | benchmark results |
./scripts/install-hooks # formatter, linter, tests, benches on commit
./scripts/check # run the same gate manuallyscripts/qa/ holds harnesses for questions the test suite cannot answer -
comparing output against a previous release, benchmarking against a baseline
binary, and driving the interface through a pty. See
scripts/qa/README.md.
CONTRIBUTING.md and SECURITY.md have the policies. Release notes are in CHANGELOG.md.
Yuru is built with heavy AI assistance. Direction, feature choices, language behavior, testing, and releases are decided and reviewed by the maintainer - the code is treated as a maintained open-source project, not unreviewed AI output.
MIT or Apache-2.0, at your option. See LICENSE-MIT and LICENSE-APACHE.
