Skip to content

Repository files navigation

Yuru

Yuru icon

CI Release crates.io docs.rs License MSRV

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.

Localized: 日本語 · 中文 · 한국어

Demo

yuru-promo.mp4

Watch the Yuru demo on YouTube

Full-quality MP4 demos from the repository: English · 中文

Install

Installs into your home directory. No sudo.

macOS / Linux

curl -fsSL https://raw.githubusercontent.com/Ameyanagi/yuru/main/install | sh -s -- --all

Windows (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.

Shell integration

Add to your shell config:

eval "$(yuru --bash)"      # bash
source <(yuru --zsh)       # zsh
yuru --fish | source       # fish
Invoke-Expression ((yuru --powershell) -join "`n")   # PowerShell

bash, 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 (via Clink)

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.

Usage

Pipe anything in:

fd --hidden --exclude .git . | yuru --scheme path

The 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 lib

Matching CJK text

Pick 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 hangeul

Korean 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 --explain

Something not working? Start with yuru doctor.

More detail in language matching.

fzf compatibility

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 quiet

Full matrix, including preview and image support, in fzf compatibility.

Configuration

~/.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,completion

Every key, and how config interacts with FZF_DEFAULT_OPTS, is in configuration.

Documentation

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

Contributing

./scripts/install-hooks   # formatter, linter, tests, benches on commit
./scripts/check           # run the same gate manually

scripts/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.

About this project

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.

License

MIT or Apache-2.0, at your option. See LICENSE-MIT and LICENSE-APACHE.

About

Fast CJK-aware fuzzy finder with Japanese romaji and Chinese pinyin search.

Topics

Resources

Contributing

Security policy

Stars

18 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages