| Crates.io | frz |
| lib.rs | frz |
| version | 0.4.0 |
| created_at | 2025-10-12 06:01:00.472053+00 |
| updated_at | 2025-10-18 07:33:18.478591+00 |
| description | TUI fuzzy finder revolving around tabular data, utilising Saghen's Frizbee crate for matching |
| homepage | https://github.com/Alb-O/frz |
| repository | https://github.com/Alb-O/frz |
| max_upload_size | |
| id | 1878978 |
| size | 404,020 |
TUI fuzzy finder revolving around tabular data, utilising Saghen's Frizbee crate for matching.
ratatui.frizbee fuzzy matching for typo-tolerant search.SearchUi::filesystem) that walks directories recursively.ignore crate with built-in .gitignore support.frz is split into three layers: infrastructure systems, plugins, and the TUI
application. crates/plugin-api/ defines the stable plugin surface, including
descriptors and the SearchPlugin trait. crates/tui/ offers reusable widgets
and helpers for rendering plugin output. The binary crate in src/ wires these
pieces together, initialises background systems, and registers built-in plugins
via register_builtin_plugins.
use frz::{SearchData, SearchUi, UiConfig};
use frz::plugins::builtin::files;
let data = SearchData::from_filesystem(".")?;
let outcome = SearchUi::new(data)
.with_ui_config(UiConfig::tags_and_files())
.with_start_mode(files::mode())
.run()?;
if let Some(file) = outcome.selected_file() {
println!("Selected file: {}", file.path);
}
cargo run -p frz --example demo
cargo run -p frz --example filesystem -- /path/to/project
The crate now ships with a frz binary that provides a ready-to-use filesystem
search experience. You can explore the available options with:
cargo run -- --help
frz loads configuration from a layered set of sources:
~/.config/frz/config.toml (or the platform-specific directory reported by
directories::ProjectDirs).$FRZ_CONFIG_DIR/config.toml if the environment variable is set../.frz.toml followed by ./frz.toml in the current working directory.--config <path> (later files win).FRZ_ using __ as a separator
(for example FRZ_FILESYSTEM__INCLUDE_HIDDEN=false).A minimal configuration might look like this:
[filesystem]
root = "~/projects/frz"
include_hidden = false
allowed_extensions = ["rs", "toml"]
[ui]
theme = "solarized"
start_mode = "files"
detail_panel_title = "Entry details"
You can inspect the resolved configuration before launching the TUI via
--print-config, list available themes with --list-themes, or emit the final
selection as pretty JSON using --output json.
SearchPlugin and adding them to a SearchPluginRegistry. Each plugin exposes a SearchPluginDescriptor that advertises UI copy, table layout metadata, and an associated SearchPluginDataset implementation; the dataset abstraction lets plugins describe how to render their tables, report aggregate counts, and contribute progress information, enabling the registry to treat every plugin uniformly regardless of how many are registered.SearchPluginRegistry::deregister and SearchPluginRegistry::plugin_by_id so applications can swap out built-in implementations or target plugins by their identifier without having to manage bookkeeping themselves.plugins::systems module. The search worker is available via plugins::systems::search, which exposes the SearchStream type and helpers for streaming attributes and files using the built-in matching pipeline. The filesystem indexer is exposed through plugins::systems::filesystem, which provides FilesystemOptions, spawn_filesystem_index, and the merge_update helper for applying incremental results to SearchData.