A terminal file browser for rclone remotes.
LazyFile is a two-panel TUI that talks to rclone's JSON-RPC API. Remotes on the left, their contents on the right, vim-style keys to move around. Basically lazygit for cloud storage.
Built with Rust, ratatui, and reqwest.
Browse rclone remotes, navigate directories, and manage remote configs -- all from your terminal.
Keybindings:
k/Up-- move upj/Down-- move downEnter-- open remote or directoryBackspace-- go backTab-- switch panelsa-- add remotee-- edit remoted-- delete remote (asks for confirmation)q-- quit
You need Rust 1.70+, and rclone with at least one remote configured.
git clone https://github.com/ErickJ3/lazyfile.git
cd lazyfile
cargo build --releaseBinary ends up at target/release/lazyfile.
In a separate terminal:
rclone rcd --rc-addr localhost:5572 --rc-no-authThat starts rclone's RC server without auth, which is fine for local use.
Auth support (--rc-user / --rc-pass) isn't implemented in LazyFile yet. If you start rclone with auth enabled, LazyFile won't be able to connect.
lazyfileBy default it connects to localhost:5572. To change that:
lazyfile --host localhost --port 8080If rclone is on a remote machine:
# On the remote server
rclone rcd --rc-addr 0.0.0.0:5572 --rc-no-auth
# On your machine
lazyfile --host remote-server --port 5572The left panel shows your rclone remotes (gdrive, dropbox, s3, etc.). The right panel shows files in whichever remote you've selected.
j/kto pick a remoteEnterto open it- Navigate files in the right panel
Enterto open directories,Backspaceto go backTabto switch between panels
With the remote list focused:
aopens a modal to create a new remote (name, type, path)eopens an edit modal for the selected remotedasks for confirmation, then deletes
Shows the current remote:path and connection status.
"403 Forbidden" on startup: rclone is running with auth enabled. Restart it with --rc-no-auth.
If something else is wrong:
- Check rclone is actually running:
curl http://localhost:5572/config/listremotes - Check port isn't taken:
lsof -i :5572 - Check rclone has remotes:
rclone config show - Run with trace logging:
RUST_LOG=lazyfile=trace lazyfile
Logging is off by default (it would mess up the TUI). Turn it on with RUST_LOG:
# Debug level -- good for troubleshooting
RUST_LOG=lazyfile=debug lazyfile
# Trace level -- very verbose, includes HTTP requests
RUST_LOG=lazyfile=trace lazyfile
# Just one module
RUST_LOG=lazyfile::rclone::client=trace lazyfileLogs go to stderr, so you can capture them separately:
RUST_LOG=lazyfile=trace lazyfile 2> lazyfile_debug.logcargo build # debug build
cargo build --release # release build
cargo test # run tests
cargo clippy -- -D warnings # lint
cargo doc --open # generate docsSee CONTRIBUTING.md for details.
Short version: fork, branch, make changes, run cargo clippy and cargo fmt, open a PR.
Things that could use help:
- File operations (copy, move, delete) -- the rclone API endpoints are defined but not wired up
- Search/filter within remotes
- Config file support
- Auth support for rclone RC
- Bug reports and fixes
What's working now: remote browsing and remote management (create/edit/delete).
Planned (roughly in order of priority):
- Auth support for rclone RC -- this is the main blocker for real-world use
- File operations (copy, move, delete)
- Search and filter
- Multi-file selection
- Directory sync
- Custom keybindings, themes, config file -- the nice-to-haves
MIT. See LICENSE.
