Pigeon is our desktop app for developers. The idea sits between Postman and Wireshark: it takes convenient request work from the first and attention to what really passes through the network and message streams from the second.
A modern service rarely stops at HTTP. gRPC, queues and brokers run next to it, each with its own tool. We wanted them all in one window, without sending working requests to someone else's cloud.
Supported protocols
| Group | Protocols |
|---|---|
| Request and response | HTTP, GraphQL, gRPC, JSON-RPC |
| Live connections | WebSocket |
| Message brokers | MQTT, RabbitMQ, Kafka |
For streaming protocols the app shows messages live and bounds the list, so a long connection does not eat memory.
How it works
Pigeon is built with Electron, React and TypeScript. Networking runs in the main process, the interface talks to it over IPC, and each protocol lives in its own adapter. The shared request model looks like this:
export type ProtocolType =
'http' | 'graphql' | 'websocket' | 'grpc' | 'jsonrpc' | 'mqtt' | 'rabbitmq' | 'kafka'
export interface BaseRequest {
network?: NetworkOptions
id: string
name: string
protocol: ProtocolType
createdAt: number
updatedAt: number
}Network settings are shared across protocols: timeout, TLS verification, redirects, proxy and custom certificates.
export interface NetworkOptions {
timeout?: number
verifySsl?: boolean
followRedirects?: boolean
proxyUrl?: string
caPaths?: string[]
}Your data stays with you
Requests and collections stay on your computer. Data is encrypted through the system keyring, and the file is created with 0600 permissions:
writeFileSync(`${file}.tmp`, safeStorage.encryptString(value), { mode: 0o600 })If secure encryption is unavailable, the app works in memory only and tells you so.
History deliberately keeps no content, because request and response bodies can hold secrets. Authorization headers, cookies, passwords and tokens are hidden:
const sensitiveKey = /authorization|cookie|password|secret|token|api[-_]?key/i
const HIDDEN = '[redacted]'Usernames, passwords and sensitive parameters are removed from URLs. To keep a full request, use collections.
Limits
Responses are limited to 10 MB. HTTP, GraphQL, TLS and proxy behaviour have regression tests, while real MQTT, RabbitMQ and Kafka deployments still need testing.
What's next
Pigeon is in active development and has not been publicly released yet. Download and source code links will appear here when the first version is ready.