A terminal-based file browser and downloader for Myrient, featuring concurrent downloads, resume support, automatic extraction, and a clean TUI interface built with Bubble Tea.
- Interactive TUI - Browse Myrient's file directory structure with keyboard navigation
- Concurrent Downloads - Download up to 10 files simultaneously
- Resume Support - Automatically resume interrupted downloads where they left off
- Pre-scan Option - Check file sizes before downloading (can be disabled for faster starts)
- Auto-extraction - Automatically unzip downloaded files
- Flexible Extraction - Extract to individual folders or current directory
- Pause/Resume - Pause and resume downloads on the fly
- Real-time Progress - Live download speed, ETA, and progress tracking
- Filtering - Quick filter to find files in large directories
- Error Handling - Proper error display with context
go install github.com/alexferl/myrient_browser@latestOr build from source:
git clone https://github.com/alexferl/myrient-browser.git
cd myrient-browser
go build -o myrient_browser ./cmd/myrient_browserSimply run the executable:
myrient_browserDownloads will be saved to ./downloads/ in the current directory.
↑/↓- Move cursor up/down←- Go back to parent directory→/Enter- Open directory or download filePgUp/PgDn- Scroll page up/downHome/End- Jump to first/last item/- Filter current directoryEsc- Clear filter (when filtering)
d- Download all files in current view (respects filters)Enter- Download single file (when on a file)
p- Pause downloadr- Resume paused downloadEsc- Cancel scan (during scanning) or cancel download (when paused)
s- PreScan: Check file sizes before downloading (ON by default)x- Auto-extract: Automatically unzip downloaded files (OFF by default)f- Extract to Folder: Create separate folder per zip file (OFF by default)z- Delete Zip: Delete zip files after extraction (OFF by default)
qorCtrl+C- Quit application
The application uses colly to scrape the Myrient file directory, parsing the HTML tables to display directories and files in a navigable interface.
Downloads use Go's standard http package with the following features:
- Resume Support: Uses HTTP Range headers to resume partial downloads from
.partfiles - Concurrent Downloads: Spawns up to 10 worker goroutines to download files in parallel
- Pre-scanning: Optionally checks file sizes via HEAD requests before downloading to calculate total download size and show accurate progress
- Progress Tracking: Uses atomic operations to safely track bytes downloaded across concurrent workers
ZIP files are extracted using Go's archive/zip package with path traversal protection to prevent zip-slip vulnerabilities.
- Model (
types.go) - Application state including files, download stats, UI state - Update (
update.go) - Handles all user input and state transitions - View (
view.go) - Renders the current state to the terminal - Commands (
download.go,model.go) - Async operations that return messages
Key components:
download.go- Download orchestration, file info fetching, concurrent workersextract.go- ZIP extraction logicmodel.go- Directory loading and filteringview.go- TUI rendering with progress bars and status
Currently hardcoded in types.go:
baseURL- Myrient base URL (default:https://myrient.erista.me/files/)numWorkers- Concurrent download workers (default: 10)
- Go 1.24 or later
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.