Vibecoded — Built with AI assistance, following NATS CLI patterns
A cross-platform desktop GUI for NATS — the lightweight, high-performance messaging system for cloud-native applications, IoT messaging, and microservices architectures.
Manage servers, JetStream streams, KV stores, and more — with a visual interface that follows familiar NATS CLI patterns.
Official NATS tools are powerful but often require command-line expertise. Existing attempts at GUIs are either too basic or cumbersome to use (looking at you, nats-nui) or behind a paywall. NATS Desktop is free and open source. All known clients are listed on the official download page https://nats.io/download/
| Feature | NATS CLI | NATS Desktop |
|---|---|---|
| Learning curve | Moderate | Gentle |
| Visual feedback | Text-based | Real-time GUI |
| Message browsing | Limited | Full visual browser |
| Cluster monitoring | Commands | Live dashboard |
| Configuration | Context files | GUI + file compatible |
| Best for | Scripts, CI/CD | Human daily operations, exploration |
NATS CLI Compatibility: This project reads/writes standard NATS context files (~/.config/nats/context/), so you can switch between CLI and GUI seamlessly.
Screenshots are in the screenshots/ directory.
https://github.com/thedataflows/nats-desktop/releases
You can download and run the NATS server from https://github.com/nats-io/nats-server/releases/latest or use mise-en-place in a clone of this repository:
## Install nats-server and nats cli
mise up
## Start nats-server with jetstream enabled in local ./tmp
mise run nats-server- Click "New Connection"
- Enter URL:
nats://localhost:4222 - (Optional) Add authentication
- Connect and start exploring!
"Start Embedded" to launch a local NATS server for testing and development. This is ideal for trying out features without needing an external server.
- Manage multiple NATS server contexts
- NATS CLI compatible — reads/writes
~/.config/nats/context/*.json - Authentication methods:
- Username/Password
- Token
- NKeys
- Credentials files
- Import/export contexts as JSON
- Connection status monitoring
- Real-time server list with status indicators
- Server ping with RTT visualization
- Server information modal with detailed metrics
- Cluster topology visualization
- Auto-refresh with configurable intervals
- Full CRUD operations for streams
- Stream creation with templates (File, Memory storage)
- Message browser:
- Live-tail mode
- Message history with filters
- JSON syntax highlighting
- Hex dump view
- Stream statistics and configuration
- Operations: duplicate, purge, seal
- Stream relations visualization
- Consumer list view with status
- Consumer creation wizard
- Detail view with configuration
- Pause/resume controls (NATS 2.11+)
- Reset/seek functionality
- Delete with cascade warnings
- KV store list with statistics
- Browser with tree view
- Search and filter keys
- Value display (text, JSON)
- History viewer
- Watch mode (real-time updates)
- Key-value editor
- KV-Stream relations
- Object store list
- File-browser UI
- Metadata display
- Sort and search
- Upload with progress bar
- Download with progress
- Create/edit stores
- Service list with health status
- Service detail view:
- Statistics dashboard
- Endpoint list
- Instance health
- Performance charts
- Latency histogram
- Service invocation tool
Publisher:
- Subject autocomplete
- Payload editor
- Header editor
- Batch publish
- Publish from file
- Message templates:
{{.Count}},{{.TimeStamp}},{{.UUID}}
Subscriber:
- Queue groups support
- Wildcard subscriptions
- Match replies
- Message acknowledgment
- Message history and re-send
Request-Reply:
- Interactive request/response
- Timeout configuration
- Response viewing
Reply Service:
- Auto-respond to requests
- Template responses with token substitution
- Command execution support
- Pub Benchmark: Message publishing performance
- Sub Benchmark: Message subscription performance
- JetStream Benchmark: Stream-based performance
- Service Benchmark: Service invocation performance
- Latency Test: RTT visualization with P50/P95/P99 percentiles
- Live execution with progress
- Final statistics summary
- Event stream viewer:
- Lifecycle events
- JetStream advisories
- Metric events
- Filter and search
- Health check dashboard:
- Stream health monitoring
- Consumer health monitoring
- Threshold configuration
- Alerts panel
- Stream backup with progress tracking
- Restore from backup files
- Configurable block size
- Resume interrupted operations
- Schema registry viewer
- Schema validation
- Schema versioning
- Account statistics dashboard
- Resource limits and usage
- Stream/KV relations graph
- Usage trends
- Theme selection (Light/Dark)
- Auto-refresh intervals
- Font size settings
- Preferences persistence
-
Basic keyboard navigation, tab to switch focus, enter to activate, escape to close modals.
-
Some table/lists have double click to open details, del/shift+del to delete items.
-
Ctrl+H displays local list of shortcuts.
-
Ctrl+1..9 to switch to corresponding sidebar item.
-
Ctrl+Shift+1..7 to switch to corresponding sidebar item (continued).
-
Ctrl+, to switch to Preferences.
Implements a wrapper over zerolog library. Log is output to the console.
- Log level:
LOG_LEVEL=info. For all values, see [https://github.com/rs/zerolog/blob/a0d61dc2c7439bdea7e1a9920713b1134367be58/globals.go#L47-L59] - Log format:
LOG_FORMAT=console. Other possible value:json
- Go 1.25+ (for building from source)
- NATS Server 2.10+ with JetStream enabled for full features
- Platforms: Linux, macOS, Windows
## Clone and build
git clone https://github.com/thedataflows/nats-desktop.git
cd nats-desktop
## Run
go run ./cmd/nats-desktop
## Build
go build -o nats-desktop ./cmd/nats-desktopBuilt with:
- UI Framework: Gio — immediate mode, native performance
- NATS Go Library: nats.go
- Configuration:
~/.config/nats-desktop.toml
nats-desktop/
├── cmd/nats-desktop/ # Application entry point
├── internal/
│ ├── application/ # App state, managers, business logic
│ ├── nats/ # NATS client wrapper
│ ├── views/ # UI screens
│ ├── ui/components/ # Reusable widgets
│ ├── config/ # Configuration management
│ ├── models/ # Data models
├── assets/ # Fonts, static assets
└── docs/ # Documentation
# Run all tests
go test -v ./...
# Run with coverage
go test -v -coverprofile=coverage.out ./...
go tool cover -html=coverage.outTests use an embedded NATS server for isolation.
This project was built with AI assistance, combining human design decisions with AI-powered implementation. It is not optimal, but it does work. I did not want to learn gioui, too low level.
It follows patterns from:
- Local-first: No cloud dependencies, your data stays on your machine
- CLI-compatible: Works with existing NATS contexts and configurations
- Lightweight: Native Go performance, no heavy runtimes
Contributions welcome, just do not expect fast response. Most probably will not accept new feature requests, as this is pretty much feature complete and trying to follow NATS CLI patterns. However, bug fixes and documentation improvements are always appreciated.
- Issues: Report bugs on GitHub
- NATS Docs: https://docs.nats.io
- NATS Community: https://nats.io/slack