A native desktop WebSocket client built for developers.
Most API tools bolt WebSocket support on as an afterthought. Patchbay is built around it. Stay connected, send multiple messages, watch the full-duplex stream in real time, and save everything — without writing a throwaway script or reaching for wscat.
Built with Wails (Go + React). Compiles to a lightweight native binary — no Electron, no browser tab.
- Persistent connections — stay connected and watch the full-duplex stream live, color-coded by direction
- Multiple tabs — run several connections simultaneously; useful for testing multiple concurrent clients
- Message history — sent and received messages persist to disk and reload when you reopen a tab
- JSON pretty-printing — payloads are automatically formatted if valid JSON
- Saved sessions — bookmark URLs you connect to frequently
- Message templates — save payloads you send repeatedly; click to inject them into the input
| Tool | Version |
|---|---|
| Go | 1.22+ |
| Node.js | 18+ |
| Wails CLI v2 | latest |
| WebView2 (Windows) | any — pre-installed on Windows 11 |
Install the Wails CLI:
go install github.com/wailsapp/wails/v2/cmd/wails@latestVerify everything is in order:
wails doctorDevelopment (hot reload):
wails devBuild a production binary:
wails build
# Output: build/bin/patchbay.exeMessage history, saved sessions, and templates are stored in a local SQLite database at:
- Windows:
%APPDATA%\patchbay\data.db - macOS:
~/Library/Application Support/patchbay/data.db - Linux:
~/.config/patchbay/data.db
These features are planned and will be built in roughly this order.
Define named environments (dev, staging, prod) with key/value pairs. Reference them in any message payload with {{TOKEN}} — Patchbay substitutes the value before sending. Switch environments from the sidebar without touching your payloads.
A JSON-defined sequence of steps that execute automatically against an active connection:
send— send a message (with variable substitution)waitFor— block until a received message matches a pattern, with timeout and optional value extractiondelay— pause for N milliseconds
Flows are saved alongside sessions and templates. Useful for automating stateful sequences like auth handshakes, subscriptions, and multi-step interactions without manually stepping through each message.
A live filter bar above the message stream. Type a string or field value and only matching messages are shown. Cuts through noise on high-volume connections.
Select two or more open tabs and send a message to all of them simultaneously. Useful for testing pub/sub fan-out, simulating multiple concurrent clients, or verifying a server event reaches every connection.
Record a full session — the complete sequence of sent and received messages with timestamps — to a file. Replay it against any endpoint. Useful for reproducing bugs, running the same flow repeatedly during development, or sharing a reproduction case.
Contributions are welcome. See CONTRIBUTING.md for setup instructions, project structure, and how to submit a pull request.
For significant changes, open an issue first to discuss the approach.
Built with ❤️ at Rushdown Studios
