Introduction
Joshuto is a terminal file manager written in Rust, inspired by the popular ranger file manager. It provides a three-pane Miller columns interface for navigating the filesystem with Vim-style keybindings. Joshuto aims to deliver the same workflow as ranger with improved performance through Rust's native speed and memory safety, while offering extensive configuration through TOML files.
What Joshuto Does
- Provides a three-column Miller layout showing parent, current, and child directories simultaneously
- Supports Vim-like keybindings for navigation, selection, and file operations
- Previews files and directories in the third pane using configurable external tools
- Handles bulk file operations including copy, move, delete, and rename with queued workers
- Offers tab support for working with multiple directories in the same session
Architecture Overview
Joshuto is built entirely in Rust using the crossterm library for terminal rendering, making it cross-platform without ncurses dependency. The architecture follows an event-driven model where user input is mapped to commands through a configurable keymap. File operations run in background worker threads to keep the UI responsive during large copy or move operations. Configuration is split across multiple TOML files covering keybindings, theming, mimetype associations, and file previews.
Self-Hosting & Configuration
- No server setup needed; Joshuto runs as a standalone terminal application
- Keybindings are configured in
keymap.tomlwith full support for custom command mappings - File previews are configured in
preview.tomlspecifying external tools per file type - Theming and colors are defined in
theme.tomlfor customizing the visual appearance - Mimetype-based file opening rules are set in
mimetype.tomlfor launching external programs
Key Features
- Written in Rust for fast startup time and efficient memory usage compared to Python-based alternatives
- Asynchronous file operation workers that process copy, move, and delete jobs in the background
- Tab support allowing multiple directory views within a single terminal instance
- Highly configurable through separate TOML files for keybindings, themes, previews, and mimetypes
- Bulk rename support using external editors for batch file renaming workflows
Comparison with Similar Tools
- ranger: Python-based terminal file manager; Joshuto offers similar UX with faster performance through Rust
- lf: Go-based terminal file manager; Joshuto provides a more ranger-like experience with Miller columns
- nnn: Minimalist C file manager focused on speed; Joshuto offers a richer three-pane interface
- Yazi: Newer Rust terminal file manager with async I/O; Joshuto is more established with ranger-style workflow
- Midnight Commander: Two-pane orthodox file manager; Joshuto follows the Miller columns paradigm instead
FAQ
Q: Can I migrate my ranger configuration to Joshuto? A: Not directly, as Joshuto uses TOML configuration files with a different format. However, the keybinding concepts are similar enough to translate manually.
Q: Does Joshuto support image previews in the terminal? A: Yes, Joshuto can display image previews using protocols like Kitty graphics protocol or sixel, depending on your terminal emulator.
Q: Is Joshuto a drop-in replacement for ranger? A: Joshuto aims for a similar workflow but is not a drop-in replacement. Some ranger features may differ or be absent.
Q: Does Joshuto support mouse input? A: Mouse support is limited. Joshuto is designed primarily for keyboard-driven navigation.
Sources
- Repository: https://github.com/kamiyaa/joshuto
- Documentation: https://github.com/kamiyaa/joshuto/blob/main/docs/configuration/README.md