A simple terminal UI for browsing and interacting with cloud storage via rclone.
- Overview
- Features
- Installation
- Starting the Application
- Usage
- Logging and Debugging
- Development
- Contributing
- Roadmap
- Getting Help
- License
LazyFile provides a lightweight terminal user interface for interacting with cloud storage systems via rclone. Instead of typing complex rclone commands or navigating nested command-line arguments, LazyFile presents an intuitive two-panel file browser directly in your terminal.
The project is built in Rust using ratatui for the terminal interface and rclone's JSON-RPC API for file operations. It emphasizes simplicity, reliability, and developer experience.
Core Features:
- Browse configured rclone remotes from a simple list
- Navigate remote filesystems with keyboard navigation
- View file names and directory structure
- Switch focus between remote and file list panels
- Intuitive keybindings inspired by vim and lazygit
Keybindings:
kor↑- Navigate upjor↓- Navigate downEnter- Open remote or directoryBackspace- Go back to parent directory or remotes listTab- Switch focus between panelsa- Add a new remotee- Edit the selected remoted- Delete the selected remote (with confirmation)q- Quit application
- Rust 1.70 or later
- rclone configured with at least one remote
- rclone daemon running on localhost:5572
Clone the repository and build with cargo:
git clone https://github.com/ErickJ3/lazyfile.git
cd lazyfile
cargo build --releaseThe binary will be available at target/release/lazyfile.
In a separate terminal, start the rclone RC (Remote Control) server. LazyFile communicates with rclone via its JSON-RPC API.
Option A: Without authentication (Recommended for local use)
rclone rcd --rc-addr localhost:5572 --rc-no-authThis is the simplest option for local development and personal use. The server runs without authentication requirements.
Option B: With authentication (For remote/secure access)
rclone rcd --rc-addr localhost:5572 --rc-user your_username --rc-pass your_passwordNote: Authentication support in LazyFile is not yet implemented. If you start rclone with authentication, LazyFile will not be able to connect. This is a planned feature.
In another terminal, run the application:
lazyfileBy default, LazyFile connects to localhost:5572. If your rclone daemon is running on a different host or port, you can specify it via command-line arguments:
lazyfile --host localhost --port 8080Available options:
--host- Specify the rclone daemon host (default:localhost)--port- Specify the rclone daemon port (default:5572)
Example: Remote rclone daemon
If you have rclone running on a remote server:
# Start rclone daemon on the remote server
ssh user@remote-server "rclone rcd --rc-addr 0.0.0.0:5572 --rc-no-auth"
# Connect from your local machine
lazyfile --host remote-server --port 5572The interface consists of two panels:
Left Panel: List of configured rclone remotes (gdrive, dropbox, s3, etc.) Right Panel: Files and directories in the selected remote/path
- Start the application with
lazyfile - Use
j/kto navigate the remote list - Press
Enterto select a remote and view its contents - Navigate files with
j/kin the right panel - Press
Enterto open directories - Press
Backspaceto go back to the parent directory - Press
Tabto switch focus between panels - Press
qto quit
With the remote list focused (press Tab to switch), you can manage remotes:
Add a new remote:
- Press
ato open the create modal - Enter the remote name, type (e.g.,
local,drive,s3), and path/configuration - Press
Enterto create orEscto cancel
Edit an existing remote:
- Select a remote and press
eto open the edit modal - Modify the configuration fields
- Press
Enterto save orEscto cancel
Delete a remote:
- Select a remote and press
dto open a confirmation dialog - Press
yto confirm deletion ornto cancel
The status bar at the bottom displays:
- Current remote and path (format:
remote:pathorremote:for root) - Connection status to rclone daemon
Application won't start or shows "403 Forbidden":
This typically means rclone RC requires authentication. LazyFile does not yet support authenticated RC servers.
-
Ensure rclone daemon is running with
--rc-no-auth:rclone rcd --rc-addr localhost:5572 --rc-no-auth
-
Check that port 5572 is not in use:
lsof -i :5572ornetstat -an | grep 5572 -
Verify rclone has configured remotes:
rclone config fileandrclone config show -
Test rclone daemon manually:
curl http://localhost:5572/config/listremotes
Should return JSON with your remotes, not a 403 error.
-
Run LazyFile with trace logging to see connection details:
RUST_LOG=lazyfile=trace lazyfile
Errors loading remotes or files:
- Confirm rclone daemon is running and accessible
- Check that authentication is disabled (
--rc-no-authflag used) - Verify the remote is properly configured:
rclone config show - Check rclone logs for API errors
- Run with debug logging to identify the issue:
RUST_LOG=lazyfile=debug lazyfile
LazyFile uses structured logging with the tracing crate. Logging is disabled by default to avoid interfering with the TUI interface, keeping it clean like other TUI tools (lazygit, lazydocker).
Set the RUST_LOG environment variable to enable logging:
Debug level (recommended for troubleshooting):
RUST_LOG=lazyfile=debug lazyfileTrace level (very verbose, includes network requests and detailed operations):
RUST_LOG=lazyfile=trace lazyfileSpecific component logging:
# Only log rclone client operations
RUST_LOG=lazyfile::rclone::client=trace lazyfile
# Only log event handling
RUST_LOG=lazyfile::app::handler=debug lazyfileSince logs go to stderr, you can redirect them separately:
lazyfile 2> lazyfile_debug.logOr combine with a logging level:
RUST_LOG=lazyfile=trace lazyfile 2> lazyfile_debug.logcargo build
cargo build --releasecargo testLazyFile uses clippy for linting. Run clippy checks:
cargo clippy -- -D warningsGenerate documentation:
cargo doc --openContributions are welcome. Please read CONTRIBUTING.md for guidelines on how to report issues, submit pull requests, and follow the project's code standards.
- Fork the repository
- Create a feature branch:
git checkout -b feature/your-feature - Make your changes and test them
- Run
cargo clippyandcargo fmtto ensure code quality - Commit with a clear message
- Push to your fork and submit a pull request
- File operations (copy, move, delete)
- Search and filter functionality
- Configuration file support
- Additional keybinding customization
- Performance optimizations
- Documentation improvements
- Bug reports and fixes
Current implementation provides remote browsing and remote management. Future versions will include:
- Authentication support for rclone RC (HTTP Basic Auth / Bearer tokens)
- File operations (copy, move, delete)
- Search and filter functionality within remotes
- Multiple file selection
- Directory synchronization
- Custom keybindings via config file
- Customizable themes
- Configuration file for host/port settings
- Performance optimizations for large directories
- Check the troubleshooting section above
- Review CONTRIBUTING.md for bug reporting guidelines
- Run with logging enabled to diagnose issues:
RUST_LOG=lazyfile=trace lazyfile - Check existing GitHub issues for similar problems
LazyFile is released under the MIT License. See LICENSE file for details.
