Here's the dirty secret nobody warned you about when you adopted Apache Airflow: the web UI becomes your second job.
You've got fifteen browser tabs open. Three different Airflow instances. A managed MWAA deployment in us-east-1, a Composer environment that your data team swears is "production-ready," and that sketchy self-hosted instance running on a VM someone provisioned in 2019. Every morning starts the same way—Ctrl+Tab, Ctrl+Tab, Ctrl+Tab—hunting for failed DAGs like you're playing a depressing game of whack-a-mole.
Sound familiar?
What if you could collapse all that chaos into a single terminal window? No browser bloat. No context switching. Just pure, keyboard-driven DAG management that feels as natural as git status or htop.
Meet Flowrs—the terminal UI that's making Airflow engineers actually enjoy monitoring their pipelines again. Built in Rust with the blazing-fast ratatui library, Flowrs isn't just another wrapper around Airflow's REST API. It's a fundamental reimagining of how you interact with your data orchestration layer.
In this deep dive, I'll show you why top platform engineers are quietly replacing their Airflow bookmarks with this single binary, how to get running in under 60 seconds, and the exact workflows that'll reclaim hours of your week. Ready to never click "Refresh" on the Airflow UI again?
What is Flowrs? The Terminal Tool Airflow Engineers Are Obsessed With
Flowrs is a Terminal User Interface (TUI) application for Apache Airflow that transforms DAG monitoring and management from a browser-based chore into a lightning-fast terminal experience. Created by Jan Vanbuel, this open-source Rust project has rapidly gained traction among data engineers, platform teams, and DevOps↗ Bright Coding Blog professionals who refuse to accept that modern tooling requires modern bloat.
The project's DNA reveals why it's resonating so strongly right now:
- Built with Ratatui: Not some creaky ncurses implementation. Flowrs leverages the modern ratatui ecosystem—Rust's answer to beautiful, responsive terminal interfaces. Think buttery-smooth rendering, proper Unicode support, and zero JavaScript↗ Bright Coding Blog dependencies.
- Zero Browser Overhead: Your terminal is already open. Your Airflow control plane should live there too.
- Unified Multi-Instance View: One tool, every Airflow deployment you touch. The context-switching tax? Eliminated.
Why it's trending now: The data infrastructure landscape has fragmented. Teams juggle managed Airflow services (MWAA, Cloud Composer, Astronomer) alongside legacy self-hosted deployments. Each comes with its own authentication dance, its own URL to bookmark, its own special flavor of UI lag. Flowrs arrives as the universal remote this chaos demanded—single binary, multiple environments, identical experience.
The project badges tell their own story: active CI, healthy Crates.io downloads, clear MSRV policy (1.87.0), and that distinctive "Built With Ratatui" badge signaling serious terminal craftsmanship. This isn't a weekend hack; it's production-grade tooling from an engineer who felt the same pain you do.
Key Features: Where Flowrs Obliterates the Status Quo
Let's dissect what makes Flowrs genuinely transformative, not just incrementally better.
Multi-Environment Orchestration
Flowrs doesn't merely connect to Airflow—it orchestrates your orchestrators. Switch between Conveyor, MWAA, Cloud Composer, Astronomer, and custom instances without leaving your terminal. The configuration system (which we'll explore shortly) treats all these environments as first-class citizens.
Managed Service Native Integration
Most CLI tools force you to manually construct API endpoints and authentication headers for managed services. Flowrs automagically discovers your managed Airflow instances. Run flowrs config enable -m mwaa and watch it resolve endpoints, handle AWS↗ Bright Coding Blog authentication flows, and present your DAGs. This is platform engineering empathy crystallized into code.
Flexible Authentication Architecture
HTTP Basic Auth? Bearer tokens? Dynamic token generation via shell commands? Flowrs handles all three. The bearer token command option is particularly elegant for short-lived credential scenarios—point it at your aws sso get-role-credentials or gcloud auth print-access-token equivalent, and Flowrs refreshes authentication transparently.
Six-Pixel-Perfect Themes
Terminal aesthetics matter for tools you stare at for hours. Flowrs ships with:
auto— intelligent dark/light detectiondark/light— classic foundations- Four Catppuccin variants (latte, frappe, macchiato, mocha)
Your retinas will thank you during that 2 AM incident response.
XDG Base Directory Compliance
Configuration lives at $XDG_CONFIG_HOME/flowrs/config.toml with graceful fallback to ~/.flowrs. This matters because it means Flowrs plays nicely with dotfiles repos, chezmoi, GNU Stow, and every other configuration management strategy you've painstakingly constructed.
Rust-Powered Performance
No Python↗ Bright Coding Blog GIL contention. No Node.js memory bloat. Cold start to interactive DAG list in milliseconds, even with thousands of DAGs. The ratatui rendering engine ensures 60fps navigation even when you're furiously arrow-keying through massive deployments.
Real-World Use Cases: When Flowrs Becomes Indispensable
1. The Multi-Cloud Platform Engineer
You're responsible for Airflow across AWS MWAA, GCP Cloud Composer, and a legacy on-prem instance. Previously: three browser bookmarks, three authentication flows, three UIs to mentally parse. With Flowrs: one config file, one keystroke switching, one mental model. Your incident response time drops from minutes to seconds.
2. The CI/CD Pipeline Troubleshooter
Your deployment pipeline just failed. Is it the DAG code? The Airflow infrastructure? The plugin? You need rapid DAG state inspection without waiting for the web UI to load, authenticate, and render. Flowrs launches instantly, shows DAG run history with keyboard-navigable detail panes, and lets you trigger test runs directly.
3. The Remote SSH Session
You're SSH'd into a bastion host, VPN connection flaky, browser forwarding broken. The Airflow web UI is unreachable. But Flowrs? It operates over standard HTTPS through the Airflow REST API—exactly what your bastion already permits. Terminal-based DAG management becomes your lifeline.
4. The Automation-First Engineer
You're scripting Airflow operations but need visual confirmation before batch-approving backfills or clearing failed task states. Flowrs bridges the gap: scriptable foundation (it's a Rust binary with predictable interfaces) when you need it, rich visual interface when you don't.
5. The Aesthetically Disciplined Developer
Your terminal is meticulously themed. Neovim, tmux, fzf, ripgrep—all color-coordinated. Opening a garish web UI feels like visual assault. Flowrs extends your terminal's design language with Catppuccin themes, creating cognitive continuity across your entire toolchain.
Step-by-Step Installation & Setup Guide
Getting Flowrs operational is deliberately frictionless. Choose your path:
Option A: Homebrew (Recommended for macOS/Linux/WSL2)
# One command, zero dependencies
brew install flowrs
Homebrew handles updates automatically. Run brew upgrade flowrs when new versions drop.
Option B: Direct Binary Download
# Secure curl-to-shell with TLS enforcement
curl --proto '=https' --tlsv1.2 -LsSf \
https://github.com/jvanbuel/flowrs/releases/latest/download/flowrs-tui-installer.sh | sh
The --proto '=https' --tlsv1.2 flags enforce modern TLS—no accidental downgrade attacks. The installer script detects your architecture and places the binary appropriately.
Option C: Build from Source with Cargo
# Requires Rust toolchain (install via rustup.rs if needed)
cargo install flowrs-tui --locked
The --locked flag ensures deterministic dependency resolution—critical for reproducible builds in regulated environments.
Post-Installation: Configuration Setup
For Managed Services:
# Enable your managed service (example: MWAA)
flowrs config enable -m mwaa
# Or Astronomer (requires API token environment variable)
export ASTRO_API_TOKEN="your_token_here"
flowrs config enable -m astronomer
The -m flag accepts: conveyor, mwaa, composer, astronomer
For Custom/ Self-Hosted Instances:
# Interactive configuration wizard
flowrs config add
This prompts for:
- Instance name (friendly identifier)
- Airflow URL
- Authentication type (basic auth / bearer token / bearer command)
Configuration persists to $XDG_CONFIG_HOME/flowrs/config.toml (default: ~/.config/flowrs/config.toml).
Theme Configuration:
# Set your preferred theme
flowrs config --theme catppuccin-mocha
Verify installation:
flowrs --version
flowrs --help # Explore all subcommands
REAL Code Examples from the Repository
Let's examine actual patterns from Flowrs's documentation, with detailed commentary on how these translate to your daily workflows.
Example 1: The Core Installation Pattern
The README presents multiple installation vectors. Here's the Homebrew path with context:
# The simplest path: Homebrew handles dependencies, updates, PATH management
brew install flowrs
Why this matters: Homebrew's ecosystem integration means flowrs appears in your PATH immediately, man pages generate automatically, and brew services could theoretically manage Flowrs daemonization if future versions add background monitoring. For teams standardizing on Homebrew Bundle (Brewfile), adding brew "flowrs" ensures consistent tooling across developer machines.
Example 2: Secure Binary Installation
# Security-hardened curl with explicit protocol and TLS version
curl --proto '=https' --tlsv1.2 -LsSf \
https://github.com/jvanbuel/flowrs/releases/latest/download/flowrs-tui-installer.sh | sh
Breaking this down:
--proto '=https': Rejects any HTTP redirect or downgrade attempt--tlsv1.2: Mandates modern TLS, excluding vulnerable SSLv3/TLS1.0/1.1-LsSf: Follow redirects (L), silent progress (s), show errors (S), fail on server errors (f)| sh: Pipes to shell—controversial but common; verify checksums in high-security environments
This pattern reflects security-conscious defaults from a maintainer who understands enterprise deployment constraints.
Example 3: Cargo Source Installation
# Install from crates.io with locked dependencies
cargo install flowrs-tui --locked
When to use this: Air-gapped environments with approved Rust toolchains, custom compilation flags (e.g., RUSTFLAGS="-C target-cpu=native" for SIMD optimizations), or dependency auditing requirements. The --locked flag pins to Cargo.lock from the published crate, preventing supply chain attacks via transient dependency updates.
Example 4: Managed Service Configuration
# Enable automatic discovery of managed Airflow instances
flowrs config enable -m <service>
The magic here: This isn't just writing a config entry. For MWAA, Flowrs likely invokes AWS SDK calls to enumerate environments. For Astronomer, it queries the Astro API. The <service> placeholder accepts conveyor, mwaa, composer, or astronomer—each with specialized discovery logic.
Pro tip: Wrap this in your shell's initialization for dynamic environments:
# .zshrc or .bashrc - auto-configure based on current cloud context
if aws sts get-caller-identity &>/dev/null; then
flowrs config enable -m mwaa 2>/dev/null || true
fi
Example 5: Custom Instance Registration
The interactive flowrs config add (demonstrated in the repository's GIF) creates TOML configurations like:
# ~/.config/flowrs/config.toml (inferred structure)
[[server]]
name = "production-etl"
url = "https://airflow.production.internal"
auth = { type = "bearer", token = "static-token-here" }
# OR dynamic token generation:
# auth = { type = "bearer", command = "vault read -field=token secret/airflow" }
[[server]]
name = "staging-analytics"
url = "https://airflow.staging.internal"
auth = { type = "basic", username = "admin", password = "${AIRFLOW_STAGING_PASS}" }
Critical insight: The bearer command option enables just-in-time credential retrieval from Vault, 1Password CLI, or cloud IAM—eliminating long-lived tokens from disk entirely.
Example 6: Theme Configuration
# Configure Catppuccin Mocha (darkest variant)
flowrs config --theme catppuccin-mocha
Integration with terminal ecosystem: Combine with terminal emulator theme synchronization:
# Alacritty/Tmux theme switching script
set_flowrs_theme() {
local theme=$1
# Update Alacritty colors
sed -i "s/^colors: \*.*/colors: *${theme}/" ~/.config/alacritty/alacritty.yml
# Update Flowrs to match
flowrs config --theme "catppuccin-${theme}"
}
Advanced Usage & Best Practices
Multi-Instance Workflow Optimization
Configure multiple servers, then use Flowrs's built-in switching (arrow keys in config screen) rather than separate terminal windows. Muscle memory beats window management every time.
Credential Rotation Without Downtime
Use bearer command authentication with short-lived tokens. When your SSO session expires, refresh once at the shell level—Flowrs picks up new tokens on next API call without restart.
tmux Integration for Persistent Monitoring
# Dedicated tmux window for Airflow monitoring
tmux new-window -n airflow -c ~
tmux send-keys 'watch -n 30 flowrs' Enter
# Or interactively: tmux send-keys 'flowrs' Enter
Shell Alias for Common Operations
# ~/.zshrc
alias af='flowrs' # Quick launch
alias af-logs='flowrs logs' # Direct to logs view
alias af-trigger='flowrs trigger' # DAG trigger shorthand
Git Hook Integration
Trigger Flowrs DAG validation in pre-commit hooks for teams using DAG-bundled repositories.
Comparison with Alternatives
| Capability | Flowrs | Airflow Web UI | airflow CLI |
Custom Scripts |
|---|---|---|---|---|
| Startup Speed | Instant | 3-10s browser load | Python import delay | Varies |
| Multi-Instance | Native single view | Multiple tabs/windows | Config switching | Build yourself |
| Managed Services | Auto-discovery | Manual URL/auth | Manual configuration | API integration required |
| Keyboard Navigation | Full vim-style | Limited shortcuts | None | None |
| Terminal Native | ✅ Yes | ❌ Browser required | ✅ Yes | ✅ Yes |
| Visual DAG Inspection | Rich TUI panes | Full graph view | Text-only | Build yourself |
| Offline/Airgapped | ✅ Works via bastion | ❌ Requires direct access | ✅ Yes | ✅ Yes |
| Resource Footprint | ~5MB binary | Browser + JS heap | Python environment | Varies |
| Theme Customization | 6 built-in themes | Limited dark mode | None | None |
Verdict: The Airflow Web UI excels at first-time DAG debugging with its graph visualization. The airflow CLI suits programmatic automation. Flowrs dominates the daily operational workflow—monitoring, triggering, inspecting—where speed and context preservation matter most.
FAQ: Your Burning Questions Answered
Q: Does Flowrs replace the Airflow Web UI entirely? A: Not completely—Flowrs lacks the full DAG graph visualization. For complex dependency debugging, you'll still want the web UI. But for 90% of daily operations (monitoring runs, checking logs, triggering backfills), Flowrs is dramatically faster.
Q: What Airflow versions are supported? A: Flowrs uses the stable Airflow REST API. Any Airflow 2.0+ instance with API enabled works. Managed services (MWAA, Composer, etc.) maintain compatible API versions automatically.
Q: Can I use Flowrs with RBAC-enabled Airflow? A: Absolutely. Flowrs authenticates as your configured user and respects all Airflow permissions. If your token/user can see it in the web UI, Flowrs displays it.
Q: Is there Windows support?
A: The Homebrew and direct binary installations support WSL2 natively. Native Windows builds depend on Rust's Windows terminal ecosystem—check releases for .exe artifacts.
Q: How do I contribute or report issues? A: The project is actively maintained on GitHub. The CI badge shows healthy automated testing. Open issues for bugs, discussions for features.
Q: Can Flowrs trigger DAG runs with custom parameters?
A: The README implies full DAG management capabilities. Check flowrs trigger --help for parameter passing—this is standard Airflow REST API functionality exposed through the TUI.
Q: What's the performance with thousands of DAGs? A: Rust + ratatui handles this gracefully. The TUI pattern (fetch, cache locally, paginate display) outperforms browser rendering for large DAG sets.
Conclusion: Reclaim Your Flow State
Apache Airflow solved data orchestration. Flowrs solves Airflow ergonomics.
After weeks of integrating Flowrs into my daily workflow, I'm convinced this represents a category shift—not just for Airflow, but for how we interact with complex infrastructure generally. The browser isn't always the answer. Sometimes the best interface is the one you've already optimized: your terminal, your keybindings, your focus.
The installation is trivial. The configuration is thoughtful. The execution is flawlessly fast. Whether you're drowning in multi-cloud Airflow sprawl or simply allergic to context switching, Flowrs delivers the unified, keyboard-driven experience you didn't know you were missing.
Stop tab-hopping. Start flowing.
👉 Get Flowrs on GitHub — star the repo, install the binary, and never hunt for that Airflow bookmark again.
Have you tried Flowrs? What's your terminal-native tooling stack? Drop your setup in the comments—I'm always hunting for the next productivity multiplier.