FTP-style CLI for Amazon S3 and Glacier. Navigate buckets with cd/ls/pwd, transfer with get/put, archive with freeze/thaw. Glacier-first — yelo means ice in Tagalog.
brew install dorky-robot/tap/yelocurl -fsSL https://raw.githubusercontent.com/dorky-robot/yelo/main/install.sh | bashgit clone https://github.com/dorky-robot/yelo.git
cd yelo
make installdocker build -t yelo .
docker run --rm -v ~/.aws:/root/.aws yelo ls# Add a bucket
yelo buckets add my-bucket --region us-east-1
# Navigate
yelo cd my-bucket:
yelo ls -l
yelo cd backups/2024/
# Freeze a file (archive to Glacier Deep Archive)
yelo freeze backup.tar.gz
# Thaw it when you need it back
yelo thaw backup.tar.gz
# Download once thawed
yelo get backup.tar.gz
# Regular upload/download
yelo put backup.sql # defaults to DEEP_ARCHIVE
yelo put photo.jpg --storage-class STANDARD
yelo get report.csv
yelo get report.csv - # stdout
# Interactive TUI
yelo tuiLaunch the interactive terminal UI with yelo tui. Four tabs:
| Tab | Key | Description |
|---|---|---|
| Browse | 1 |
Navigate S3 buckets and objects |
| Profiles | 2 |
Switch AWS profiles |
| Restores | 3 |
Track Glacier restore requests |
| Library | 4 |
Browse locally cached/downloaded files |
The daemon polls pending Glacier restores and downloads files automatically when they become available.
yelo daemon start # start background polling
yelo daemon stop # stop it
yelo daemon status # check if runningYou can also toggle the daemon from the TUI via the Restores tab submenu (. then D).
yelo pwd Print working directory
yelo cd <path> Change directory (supports bucket:path)
yelo ls [-l] [-R] [path] List objects/prefixes
yelo stat <key> Object metadata
yelo get <key> [dest|-] Download (- for stdout)
yelo put <file> [key] Upload (default: DEEP_ARCHIVE)
yelo freeze <file> [key] Archive to Glacier Deep Archive
yelo thaw <key> [--days N] [--tier T] Restore from Glacier
yelo restore <key> [--days N] [--tier T] (alias for thaw)
yelo buckets [list|add|remove|default] Manage buckets
yelo daemon [start|stop|status] Background downloader
yelo tui Interactive terminal UI
| Flag | Description |
|---|---|
--bucket |
Override bucket resolution |
--region |
Override AWS region |
--profile |
Override AWS profile |
Config lives at ~/.config/yelo/config.yaml:
default_bucket: my-bucket
buckets:
- name: my-bucket
region: us-east-1
profile: default
daemon:
poll_interval: 60 # seconds between restore checksState (current bucket/prefix) is stored at ~/.config/yelo/state.json.
Cached files and restore notifications are stored under ~/.yelo/.
Bucket, region, and profile resolve through priority-ordered fallback:
- Bucket:
--bucketflag → state file → config default → sole configured bucket - Region:
--regionflag → per-bucket config → global config → AWS SDK default - Profile:
--profileflag → per-bucket config → global config → AWS SDK default
make build # debug build
make release # optimized build
make test # run tests
make lint # clippy + rustfmt check
make install # build + install to /usr/local/bin
make uninstall # remove from /usr/local/bin- Rust 1.85+ (edition 2024)
- AWS credentials configured (
~/.aws/credentialsor environment variables)
MIT