A terminal user interface (TUI) application for browsing Azure Blob Storage containers built with Rust and Ratatui.
- 📦 Container Selection - Select from a list of available containers in your storage account
- 🔍 Browse Azure Blob Storage containers and blobs
- 📁 Navigate through blob prefixes (virtual directories)
- ℹ️ Blob Information - View detailed metadata about blobs and folder statistics
- ⬇️ Download Files and Folders - Download individual files or entire folders with progress tracking
- ⚡ Async operations with loading indicators
- 🎨 Clean, intuitive terminal interface
- ⌨️ Vim-style navigation keys
- 🔍 Search/filter blobs by name (press
/
) - 🎭 Adaptive icons based on terminal capabilities
- 🌍 Cross-platform support (Windows, macOS, Linux)
- Rust 1.70+ (with Cargo)
- Azure Storage Account with Blob Storage enabled
- Storage Account Access Key
You'll need an Azure Storage Account with one or more containers. If you don't have one:
- Create an Azure Storage Account in the Azure Portal
- Create one or more containers in your storage account
- Get your storage account access key:
- Navigate to your Storage Account in the Azure Portal
- In the left sidebar, under "Security + networking", click "Access keys"
- You'll see two keys (key1 and key2) - you can use either one
- Click "Show" next to the key you want to use
- Copy the "Key" value (not the connection string)
Note: Keep your access key secure and never commit it to version control. The access key provides full access to your storage account.
Set the following environment variables:
export AZURE_STORAGE_ACCOUNT="your_storage_account_name"
export AZURE_STORAGE_ACCESS_KEY="your_access_key"
Or create a .env
file in the project root:
AZURE_STORAGE_ACCOUNT=your_storage_account_name
AZURE_STORAGE_ACCESS_KEY=your_access_key
Note: You no longer need to specify AZURE_CONTAINER_NAME
as the application will present you with a list of containers to select from.
If you have just installed, you can use the provided justfile for easy setup:
# Get detailed project information and setup instructions
just info
# Setup development environment (creates .env template)
just setup
# Check environment status
just env-status
git clone https://github.com/your-username/blobrs.git
cd blobrs
cargo build --release
This project includes a justfile
for common development tasks:
# Install just if you don't have it
cargo install just
# See all available commands
just
# Setup development environment
just setup
# Build the project
just build
# Run all checks (format, clippy, build)
just test-all
# Set environment variables first
export AZURE_STORAGE_ACCOUNT="mystorageaccount"
export AZURE_CONTAINER_NAME="mycontainer"
export AZURE_STORAGE_ACCESS_KEY="your_access_key_here"
# Run the application
cargo run
# Check environment status
just env-status
# Run the application (automatically checks environment)
just run
# Run in release mode
just run-release
When you first start the application, you'll be in container selection mode:
Key | Action |
---|---|
↑ / k |
Move selection up |
↓ / j |
Move selection down |
→ / l / Enter |
Select container and enter blob browsing mode |
r / F5 |
Refresh container list |
q / Esc / Ctrl+C |
Quit application |
After selecting a container, you can browse blobs:
Key | Action |
---|---|
↑ / k |
Move selection up |
↓ / j |
Move selection down |
→ / l / Enter |
Enter selected folder |
← / h / Esc |
Go up one level (or to container list if at root) |
/ |
Search/filter blobs |
i |
Show blob/folder information |
d |
Download selected file or folder |
r / F5 |
Refresh current view |
Backspace |
Return to container selection |
q / Ctrl+C |
Quit application |
Key | Action |
---|---|
Type |
Filter results in real-time |
Enter |
Confirm search (keep filtered results) |
Esc |
Cancel search (restore full list) |
Ctrl+↑ / Ctrl+↓ |
Navigate while searching |
The application uses a hierarchical navigation system with the Esc
key:
- Container Selection:
Esc
quits the application - Blob Browsing (at container root):
Esc
returns to container selection - Blob Browsing (inside folders):
Esc
goes up one directory level - Search Mode:
Esc
exits search and returns to normal browsing - Information Popup:
Esc
closes the popup
This provides intuitive "back" behavior - Esc
always takes you one level up in the navigation hierarchy.
When viewing blob or folder information (press i
in blob browsing mode):
Key | Action |
---|---|
Esc / ← / h |
Close information popup |
The information is displayed in a popup window that overlays the blob list, showing:
- For individual blobs: Name, size, last modified date, and ETag
- For folders: Name, number of contained blobs, and total storage size
When downloading files or folders (press d
in blob browsing mode):
Key | Action |
---|---|
Enter |
Select download destination folder |
Esc |
Cancel download |
The download process works as follows:
- Press
d
to start downloading the selected file or folder - A file picker will open allowing you to choose the destination folder
- For single files: The file will be downloaded to the selected destination
- For folders: All files in the folder will be downloaded, preserving the folder structure
- A progress popup shows download status including:
- Current file being downloaded
- Number of files completed vs total files
- Total bytes downloaded
- Any error messages
Blobrs automatically detects your terminal's capabilities and adapts its icons accordingly:
- Folders: 📁
- Files: 📄
- Loading: 🔄
- Errors: ❌
- Empty: 📭
- Search: 🔍
Supported terminals: Kitty, Alacritty, WezTerm, iTerm2, VS Code, Windows Terminal, and most modern terminals with UTF-8 support.
- Folders: [DIR]
- Files: [FILE]
- Loading: [LOADING]
- Errors: [ERROR]
- Empty: [EMPTY]
- Search: [SEARCH]
- Folders: D
- Files: F
- Loading: *
- Errors: !
- Empty: -
- Search: ?
You can force a specific icon set using the BLOBRS_ICONS
environment variable:
export BLOBRS_ICONS=unicode # Force Unicode/emoji icons
export BLOBRS_ICONS=ascii # Force ASCII icons
export BLOBRS_ICONS=minimal # Force minimal icons
- Blobs: Individual files in your container appear with a file icon (📄, [FILE], or F depending on terminal)
- Prefixes: Virtual directories (blob name prefixes ending with
/
) appear with a folder icon (📁, [DIR], or D depending on terminal) - Navigation: Uses Azure Blob Storage's hierarchical namespace simulation through prefixes
- Async Operations: All Azure API calls are asynchronous with loading indicators
- Terminal Detection: Automatically detects terminal capabilities for optimal icon display
- Search: Real-time filtering of blobs and directories by name
- Verify your Azure credentials are correct
- Check that the container exists and you have read permissions
- Ensure your storage account allows blob access
- Check your internet connection
- Verify the storage account name is correct
- Try refreshing with
r
orF5
The application will panic if required environment variables are missing:
AZURE_STORAGE_ACCOUNT
AZURE_CONTAINER_NAME
AZURE_STORAGE_ACCESS_KEY
# Setup development environment
just setup
# Run all checks
just test-all
# Format code
just fmt
# Run clippy
just clippy
# Build project
just build
# Watch for changes and rebuild
just watch
# Build
cargo build
# Run tests
cargo test
# Format code
cargo fmt
# Run clippy
cargo clippy
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Run
cargo clippy
and fix any warnings - Submit a pull request
This project is licensed under the MIT License - see the LICENSE file for details.
- Ratatui - Terminal UI framework
- object_store - Cloud storage abstraction
- tokio - Async runtime
- color-eyre - Error handling
- Support for other cloud providers (AWS S3, Google Cloud Storage)
- File upload functionality
- File download functionality
- Blob metadata display
- Search functionality
- Configuration file support
- Multiple container support