Меню
Настольное приложение

Pigeon

Локальный инструмент для работы с API и потоками сообщений: HTTP, GraphQL, gRPC, WebSocket, MQTT, RabbitMQ и Kafka в одном приложении.

Pigeon — наше настольное приложение для разработчиков. Его идея лежит между Postman и Wireshark: от первого он берёт удобную работу с запросами, а от второго — внимание к тому, что на самом деле проходит по сети и в потоках сообщений.

Современный сервис редко ограничивается HTTP. Рядом работают gRPC, очереди и брокеры, а для каждого нужен свой инструмент. Мы хотели держать всё в одном окне и не отправлять рабочие запросы в чужое облако.

Какие протоколы поддерживаются

ГруппаПротоколы
Запрос и ответHTTP, GraphQL, gRPC, JSON-RPC
Живые соединенияWebSocket
Брокеры сообщенийMQTT, RabbitMQ, Kafka

Для потоковых протоколов приложение показывает сообщения вживую, а длину списка ограничивает, чтобы долгое соединение не съело память.

Как устроено

Pigeon написан на Electron, React и TypeScript. Сеть работает в основном процессе, интерфейс общается с ним через IPC, а каждый протокол живёт в собственном адаптере. Общая модель запроса выглядит так:

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
}

Настройки сети общие для всех протоколов: тайм-аут, проверка TLS, редиректы, прокси и свои сертификаты.

export interface NetworkOptions {
  timeout?: number
  verifySsl?: boolean
  followRedirects?: boolean
  proxyUrl?: string
  caPaths?: string[]
}

Ваши данные остаются у вас

Запросы и коллекции хранятся на вашем компьютере. Данные шифруются через системное хранилище ключей, а файл создаётся с правами 0600:

writeFileSync(`${file}.tmp`, safeStorage.encryptString(value), { mode: 0o600 })

Если надёжное шифрование недоступно, приложение работает только в памяти и предупреждает об этом.

История запросов намеренно не хранит содержимое: в теле запроса или ответа могут оказаться секреты. Заголовки авторизации, куки, пароли и токены скрываются:

const sensitiveKey = /authorization|cookie|password|secret|token|api[-_]?key/i
const HIDDEN = '[redacted]'

Из ссылок удаляются логин, пароль и чувствительные параметры. Чтобы сохранить запрос целиком, используйте коллекции.

Ограничения

Ответы ограничены 10 МБ. HTTP, GraphQL, TLS и прокси покрыты регрессионными тестами, а работу с реальными MQTT, RabbitMQ и Kafka ещё предстоит проверить на настоящих развёртываниях.

Что дальше

Pigeon активно развивается и пока не выпущен публично. Ссылки на загрузку и исходный код появятся здесь, когда первая версия будет готова.