sayanarijit/xplr
55.4
Adequate · 30 September 2026
10.4k
lines of production code
Rust
with Lua
2
measurements over time
What this system is
xplr is a terminal-based file explorer written in Rust that uses Lua for configuration and scripting. It provides a command-line interface with support for null-byte delimited input and pipe messaging, enabling integration with other tools. The system features native fuzzy search, parallel directory traversal for performance, and a structured message-passing architecture for handling user interactions and internal state.
Features
Add desktop entry and application icon for xplr
The xplr application now includes a desktop entry file (xplr.desktop) and an SVG icon (xplr.svg), enabling proper integration with desktop environments. Users will see the application listed in their system menus with the correct name, comment, and icon, and it will be associated with directory MIME types.
assets · high confidence
Add example runner script
A new example file (examples/run.rs) has been added to demonstrate how to invoke the xplr runner API. This script initializes the runner, executes it, and handles the output or errors by printing results to stdout or error messages to stderr, providing a concrete usage pattern for integrating the runner.
examples · high confidence
New xplr.util Lua API for configuration and debugging
Users can now access a new \xplr.util\ table in Lua scripts, exposing helper functions for debugging (\debug\), inspecting the application version (\version\), cloning values (\clone\), and checking file system paths (\exists\, \is\_dir\, \is\_file\, \is\_symlink\, \is\_absolute\). This API is initialized in the Lua environment via \src/lua/mod.rs\ and \src/lua/util.rs\, providing a consistent interface for common utility tasks within the configuration.
src/lua · high confidence
Behavioural changes
Introduces new command-line interface with null-byte support and pipe messaging
The xplr binary now features a comprehensive CLI that supports reading and writing paths separated by null characters (via --read0, --write0, and --null flags), allowing safe handling of filenames with special characters. Users can also interact with running xplr sessions using --pipe-msg-in to send messages or --print-msg-in to preview them. Additional options include --force-focus for directory navigation, --read-only mode, --vroot for virtual root paths, and the ability to load extra configuration files via --extra-config.
src/bin · high confidence
Introduction of structured input message types
The application now defines explicit message types for handling user input and internal state changes. External commands, such as navigation (e.g., \FocusNext\, \ExplorePwd\) and screen operations, are now represented by the \ExternalMsg\ enum, while internal system events like key handling and directory updates are captured in the \InternalMsg\ enum. These are unified under a single \MsgIn\ type, providing a clearer separation between user-facing actions and internal application logic.
src/msg/in\ · high confidence_
Migrate configuration from YAML to Lua and introduce native search/filter
The application configuration system has been replaced: the legacy \config.yml\ is removed in favor of \src/init.lua\, which serves as the new default configuration file and Lua API entry point. This change introduces native search and filtering capabilities powered by the \skim\ library, replacing previous regex-based or external search mechanisms. Additionally, the \explorer\ module now utilizes \rayon\ for parallel directory traversal to improve performance, and the \pwd\_watcher\ module has been added to automatically refresh the view when the current working directory changes.
src · high confidence
Project governance, packaging, and configuration overhaul
This update introduces several foundational changes to the project structure and user experience. A Code of Conduct and MIT License have been added to establish community standards and legal clarity. The project now supports Nix packaging via a new flake, simplifying installation for Nix users. The legacy YAML-based configuration file (config.yml) has been removed, signaling a shift away from that configuration method. Additionally, the README has been significantly expanded with installation links, documentation references, and community badges to improve discoverability and onboarding.
(repo-wide) · high confidence
Test coverage
Added integration tests for CLI version and help flags; Updated benchmark suite to use Lua-backed app initialization.
Dependencies
Upgrade to version 1.1.3 with major dependency updates
The xplr file explorer has been upgraded to version 1.1.3, updating the Rust edition to 2021 and significantly modernizing its dependency stack. Key library updates include migrating the terminal UI backend from 'tui' to 'ratatui' (v0.30), upgrading 'skim' for fuzzy search (v5.7), and updating 'tui-input' (v0.15). The project also replaces 'dirs' with 'xdg' and 'home' for path handling, adopts 'anyhow' for error handling, and integrates 'rayon' for performance optimization. Additionally, the release profile is now configured with LTO and stripping to reduce binary size, and metadata for 'cargo binstall' has been added to streamline installation.
(dependencies) · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Score
- CAI 63 → 55 (-7.5)
- Rubric changed (rubric-2026.09.11 → rubric-2026.09.18) — scores are not directly comparable.
Lenses
- Code Health 85 → 84 (-0.5)
- Architecture 100 → 98 (-1.6)
- Maturity 57 → 57 (+0.1)
- Readiness 62 → 46 (-16.3)
- Security 59 → 73 (+13.8)
- Accessibility 57 (new)
- Performance 90 (new)
Resolved (2)
- Duplicated block (28 lines × 2) (src/runner.rs)
- Hotspot: src/msg/in_/external.rs (src/msg/in_/external.rs)
New (11)
- Documentation: contradicts the code (docs/en/src/awesome-hacks.md)
- Documentation: contradicts the code (docs/en/src/configuration.md)
- Documentation: no project overview (docs/en/src/layout.md)
- Duplicated block (25 lines × 2) (src/runner.rs)
- Inconsistent naming convention for navigation methods. Most use 'focus_' prefix, but 'scroll_up', 'scroll_down', etc. use 'scroll_' prefix despite likely performing similar viewport/focus adjustments. Additionally, 'focus_by_file_name' takes a filename string while 'focus_path' takes a path string, which is ambiguous if the input is a relative path (is it relative to pwd or vroot?).
- Inconsistent naming for context conversion methods. 'to_lua_ctx_heavy' and 'to_lua_ctx_light' are verbose and use underscores. The types are named 'LuaContextHeavy' and 'LuaContextLight'. The method names should ideally mirror the type names more directly or use a consistent pattern like 'into_heavy_context()' and 'into_light_context()'.
- Inconsistent naming for selection operations. 'select' and 'un_select' are used for toggling the current node, while 'select_path' and 'un_select_path' are used for specific paths. The underscore in 'un_select' is inconsistent with Rust conventions (usually 'deselect' or 'unselect') and differs from 'select_path' (no underscore in 'select').
- Outdated: skim
- Outdated: tui-input
- Redundant logging methods. The App type has four distinct methods for different log levels, but the Log type has a single 'level' property. This forces callers to choose the correct method rather than passing a LogLevel enum, which is less flexible and more verbose.
- xplr::runner::call (cognitive 16) (src/runner.rs)
Changes since last survey
- 10 commits — 4 feature/other, 6 fixes
By area
- (repo) — 3 commits
- (root) — 3 commits
- src/runner.rs — 2 commits
- .github/workflows — 1 commit
- docs/en — 1 commit
Notable commits
- fix: Fix snap publish
- fix: fix: Redraw terminal screen after clearing
- fix: fix: Redraw terminal screen after clearing (#786)
- fix: fix: detach silent commands into their own process group
- fix: fix: detach silent commands into their own process group (#783)
- fix: fix: return Permissions::default() on Windows instead of panicking (#781) (#782)
- change: Add plugin zenselection.xplr
- change: feat: support installing via cargo binstall
- change: v0.1.3 (#787)
- change: v1.1.2
Architecture
- Unchanged — 0 containers · 1 contexts · 0 edges
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
sayanarijit/xplr was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 30 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit fcc08f59e44af8648692d2355389ed27aa3bbd8b — the exact code this score is about.
- Scored under rubric-2026.09.18 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-cb25ca4feafa.