Use this command to install Service Bus Explorer TUI:
winget install --id=CosX.ServiceBusExplorerTui -e
Service Bus Explorer TUI is a cross-platform terminal UI tool designed to manage Azure Service Bus queues, topics, subscriptions, and messages efficiently. Built with Rust and ratatui, this tool provides a robust command-line interface for developers and IT professionals.
Key Features:
Navigable tree structure for browsing queues, topics, and subscriptions.
Inline message counts and aggregated metrics for topics and subscriptions.
Peek messages from queues and dead-letter queues (DLQ), with configurable counts.
Send custom messages with properties, content type, TTL, session ID, and more.
Support for both SAS token and Azure AD authentication methods.
Integration with the Azure Service Bus emulator for local development.
Audience & Benefit:
Ideal for developers, DevOps engineers, and IT professionals who need a lightweight command-line tool to manage Azure Service Bus entities. It offers efficient message management without relying on SDKs, making it a flexible solution for cross-platform environments.
Service Bus Explorer TUI can be installed via winget on Windows, ensuring easy setup and integration into your workflow.
README
Service Bus Explorer TUI
A cross-platform terminal UI for managing Azure Service Bus namespaces — queues, topics, subscriptions, and messages. Inspired by the wonderful ServiceBusExplorer application and bringing its functionality cross-platform.
Built with Rust, ratatui, and the Azure Service Bus REST API (no SDK dependency).
Screenshots
Main interface showing entity tree, details, and messages
Peeking messages from a queue
Clear entity dialog with options
Features
Browse queues, topics, and subscriptions in a navigable tree with inline message counts
Topic-level aggregated counts — topics display total active and DLQ messages summed across all subscriptions
View entity properties and runtime metrics (active, DLQ, scheduled, transfer counts)
Peek messages and dead-letter queues (with configurable count)
Send messages with custom properties, content type, TTL, session ID, scheduled enqueue time, and more
Edit & resend messages inline (WYSIWYG) — including DLQ messages back to the main entity
Copy messages across connections — copy messages (active or DLQ) to different Service Bus namespaces with full edit support
Create and delete queues, topics, and subscriptions
Bulk resend DLQ → main entity and bulk delete from messages panel
Topic operations automatically fan out across all subscriptions
Delete individual messages from the messages panel with confirmation
Multiple saved connections with config persistence (SAS and Azure AD)
Azure Monitor metrics — inline sparkline previews (active + DLQ) in the detail pane, plus a full metrics overlay (V) with braille line charts for all 5 metrics: active, dead-letter, scheduled, incoming, and outgoing messages (Azure AD only)
Azure AD (Microsoft Entra ID) authentication via default credential chain
Azure Service Bus emulator support (local development with UseDevelopmentEmulator=true connection strings)
Vim-style keybindings
Terminal escape injection protection for untrusted message content
Installation
Homebrew (macOS/Linux)
The fastest way to install on macOS or Linux using Homebrew:
# Add the tap (first time only)
brew tap CosX/tap
# Install
brew install CosX/tap/service-bus-explorer-tui
The brew tap command adds a third-party repository to Homebrew. After tapping, you can install and update the tool like any other Homebrew package.
Windows — winget
winget install CosX.ServiceBusExplorerTui
Windows — Chocolatey
choco install service-bus-explorer-tui
cargo-binstall
Fast installation of pre-built binaries via cargo-binstall:
cargo binstall service-bus-explorer-tui
cargo-binstall downloads pre-compiled binaries instead of building from source, saving significant time. Install cargo-binstall first if you don't have it:
# Linux/macOS
tar xzf service-bus-explorer-tui-*.tar.gz
chmod +x service-bus-explorer-tui
sudo mv service-bus-explorer-tui /usr/local/bin/
# Windows: move the .exe to a directory in your PATH
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
Prerequisites
An Azure Service Bus namespace with either:
A SAS connection string, or
Azure AD credentials (via environment, CLI, managed identity, etc.)
Run
# If installed via package manager or cargo
service-bus-explorer-tui
# Or run directly from source
cargo run
# Or run the compiled binary
./target/release/service-bus-explorer-tui
On launch you'll see an empty tree panel. Press c to open the connection dialog.
Connect to a namespace
SAS connection string
Press c to open the connection dialog.
If you have saved connections, select one or press n to add a new one.
src/
├── main.rs # Entry point, event loop, status-sentinel → async task dispatch
├── app.rs # App state, BgEvent enum, form builders, tree construction
├── event.rs # Input routing: global → modal → panel handlers
├── config.rs # TOML persistence (connections, settings, OS-specific paths)
├── client/
│ ├── auth.rs # SAS token gen, Azure AD token, connection string parsing
│ ├── management.rs # Management plane: ATOM XML CRUD + raw XML parsing helpers
│ ├── data_plane.rs # Data plane: send, peek-lock, receive-delete, purge, bulk ops
│ ├── models.rs # Entity descriptions, message models, TreeNode/FlatNode
│ └── error.rs # ServiceBusError (thiserror) with Api, Auth, Xml variants
└── ui/
├── layout.rs # Top-level 3-panel layout (tree | detail | messages)
├── tree.rs # Entity tree with inline message/DLQ counts
├── messages.rs # Message list + detail view + inline edit rendering
├── modals.rs # Connection, form, confirm, clear-options, peek-count dialogs
├── detail.rs # Entity properties/runtime info panel
├── status_bar.rs # Bottom status bar
├── help.rs # Full keyboard shortcut overlay
└── sanitize.rs # Terminal escape injection prevention (CSI/OSC stripping)
Design decisions
No Azure SDK — the official Rust SDK for Service Bus is unmaintained. The client layer uses reqwest against the REST API directly with HMAC-SHA256 SAS token auth or Azure AD Bearer tokens.
Synchronous event loop with async dispatch — keyboard events are polled synchronously via crossterm at 100ms intervals; Service Bus API calls are spawned as tokio tasks that report results back through an mpsc channel.
ATOM XML parsing — the management plane returns Atom feeds with inconsistent schemas. Parsed with targeted string extraction (extract_element, extract_element_value) rather than full serde XML deserialization.
Peek via peek-lock + abandon — the REST API's PeekOnly=true has no cursor, so peek is implemented as peek-lock N messages then abandon all locks. This increments DeliveryCount on each peek.
Concurrent purge — message deletion spawns multiple parallel receive-and-delete workers (default 32) with progress reporting and cancellation support.