Docs · DevCatz

Gateways

Run WhatsApp, email, push, SMS and Telegram gateways on your Mac or PC, with test senders, catchers, an inspector and signed webhooks to your sites.

Gateways are the services your app talks to when it sends a WhatsApp message, an email through an API, a push notification, an SMS or a Telegram message. DevCatz runs them on your computer so you can build and test those flows without a provider account — and, for email and SMS, without anything leaving your computer. Gateways run on macOS and Windows.

The engines

Gateway Kind Port Runs as
GOWA WhatsApp 3010 (gowa.<tld>) A Go binary (gowa.exe)
WAHA WhatsApp 3020 (waha.<tld>) A Docker imageIn DoCatz, from its Docker image
Stalwart Email 8490 A mail server that relays into the DevCatz mail catcher — a native binary with stalwart-cli
Postal Email 5010 DockerIn DoCatz, with MariaDB
ntfy Push notifications 8492 DockerIn DoCatz
Gotify Push notifications 8493 DockerIn DoCatz
Jasmin SMS 8494 DockerIn DoCatz, with Redis and RabbitMQ
Telegram Bot API server Telegram 8496 DockerIn DoCatz (needs your api_id / api_hash)

GOWA and Stalwart run natively on both platforms, from their GitHub releases (macOS tarballsWindows x64 zips, checksums checked).

The engines marked Docker need a container engine: they use the engine the Docker tab uses — DoCatz (recommended), OrbStack, Docker Desktop and the rest. When none is running, the error says so and names them.

In DoCatz on Windows

WAHA, Postal, ntfy, Gotify, Jasmin and the Telegram Bot API server have no native Windows build, so on Windows they always run in DoCatz’s container engine (WSL 2), whatever engine the Docker tab uses. DevCatz pulls their images there, starts and stops them, and keeps the same ports, domains, keys and .env lines as anywhere else — your site does not know the difference.

  • Install — a gateway that is not installed says runs in DoCatz (WAHA, on the WhatsApp page: runs in DoCatz’s engine), and its button reads Install in DoCatz…, with DoCatz’s logo. DevCatz opens DoCatz, waits for its engine (you can cancel the wait) and installs the gateway there.
  • While it runs — the page header says in DoCatz next to the port, Start, Stop, Restart and Update to … work as for any gateway, and More ▾ gets Open in DoCatz, which shows the containers in DoCatz. DoCatz lists them in its read-only DevCatz Services group (more): DevCatz installs, starts, stops and updates them.
  • No DoCatz yet? The page shows DoCatz is not installed with Download & Install DoCatz first: DevCatz fetches DoCatz for this PC, checks it and installs it for your account, then you install the gateway.
  • DoCatz there, engine not set up? DevCatz opens DoCatz and says so at once: start the engine in DoCatz (Engine), then try again. WSL 2 has to be able to run, which it cannot in a virtual machine without nested virtualisation.
  • Callbacks — the ports the containers call back on (the mail and SMS catchers, WhatsApp webhooks) are opened on Windows’ WSL address too; when Windows Firewall blocks DevCatz there, the page says so.

GOWA, the other WhatsApp engine, stays native on Windows — pick it when you would rather not run DoCatz.

WhatsApp (GOWA and WAHA)

Read this first. Both engines speak the WhatsApp Web protocol and are unofficial. WhatsApp may ban numbers that automate messages. Link a test number you can afford to lose, never your own or a customer’s.

The WhatsApp page has these tabs:

  • Sessions — one session is one linked phone. Add session, then Link a phone (QR) and scan the code with WhatsApp → Settings → Linked devices → Link a device. The code refreshes by itself. Log out unlinks a phone; Remove deletes the session. Sites pick a session with WHATSAPP_SESSION.
  • Test sender — send Text, Image or Document from a session, and see the API request it made and the response.
  • Contacts — contacts and groups of a linked phone.
  • Connection — the API address (HTTPS and local), the dashboard / Swagger user, the default session and the data folder, with Write to .env and short API notes.
  • Logs.

Two more views sit beside them:

  • Inspector — every message in and out, live, plus the raw events; Copy JSON for any of them, Clear to empty it.
  • Webhooks — forward the engines’ events to a site.

Webhooks to sites

Add webhook… picks a site, a URL and the events to forward (empty = all). The site gets each event as JSON in a POST, signed with an HMAC:

Header Holds
X-DevCatz-Signature sha256=HMAC(secret, body)
X-DevCatz-Engine The engine that sent it
X-DevCatz-Event The event name
X-DevCatz-Delivery A delivery id

Check the signature in your app with the secret from WHATSAPP_WEBHOOK_SECRET. Every delivery is logged with the body sent and the response; Replay sends one again after you changed your code.

Write to .env

Write to .env adds WHATSAPP_API_URL, WHATSAPP_API_KEY, WHATSAPP_SESSION and WHATSAPP_WEBHOOK_SECRET to a site.

Email (Stalwart and Postal)

  • Stalwart is a full mail server. Sites send through SMTP submission as devcatz (no TLS on your computer). Mail to other domains lands in the DevCatz mail catcher; mail to …@devcatz.test stays in Stalwart, where you can read it over IMAP — handy for reply-by-email and other inbound flows. Accounts, domains and filters are managed in its web admin. On the first start DevCatz configures it with stalwart-cli (listeners, domain, mailbox, the relay to the catcher).
  • Postal gives you an HTTP sending API (with an X-Server-API-Key header) or SMTP. devcatz.test and every site’s domain are verified as sending domains for you. Webhooks, message history and tracking live in its web UI; delivery goes to the mail catcher.

Either way, real inboxes are never reached.

Push (ntfy and Gotify)

  • ntfy — publish with a POST (an Authorization: Bearer <token> header; the body is the message; Title, Priority and Tags headers add more).
  • Gotify — send JSON; receive in the web UI, the Gotify Android app, or over its WebSocket stream (/stream, with a client token).

Phones and browsers on your computer’s network can subscribe through the domain; share it with Expose for devices outside.

SMS (Jasmin and the SMS catcher)

Jasmin is an SMS gateway with an HTTP API. DevCatz pairs it with its own SMS catcher, which speaks SMPP 3.4: every SMS Jasmin sends lands in the SMS catcher tab, so no operator account is needed. Add coding=8 for unicode messages. Users, routes and filters are managed in jCli.

Telegram

The Telegram Bot API server runs the Bot API on your computer. Point your bot library at it instead of https://api.telegram.org; the methods stay the same (/bot<token>/sendMessage …).

  • Add the bot token in the engine’s Settings… first.
  • Before a bot’s first request here, call logOut once on api.telegram.org to move it to this server. It can move back after 10 minutes.
  • Webhooks may use any local URL (http://host.docker.internal:3000/… reaches a site’s dev server), and files can be up to 2 GB.

An engine’s page

Every gateway has Start, Stop and Restart, and these tabs:

  • Overview — the connection details, keys and tokens (they appear after the first start), Write to .env and How sites use it.
  • Test sender — send a message and see the request it made and the response, with Open Mail or Open SMS catcher to see where it landed.
  • SMS catcher — Jasmin only.
  • Logs.

More ▾ has the web UI, the data folder, Check for updates, Settings and Uninstall.

The site’s Gateways tab

A site gets a Gateways tab when its .env has WhatsApp or gateway keys, or a WhatsApp client library is found.

  • It lists the gateways the site points at, with Open.
  • If the WhatsApp settings point somewhere else, or only a library was found, it offers the lines to use a DevCatz engine instead, with Write to .env.
  • Webhook to this site — Add webhook or Replay, with Edit on the Gateways page.
  • Use another gateway adds one more.

Settings → Gateways

Option What it does
Services Each gateway with its status, address, Starts with DevCatz and Restart
Messages kept in the inspector 500 by default; the oldest are dropped beyond this
Notification when a message arrives A macOSWindows notification per incoming WhatsApp message

In the menu bar

The menu bar (the system tray on Windows) has a line per WhatsApp engine (GOWA (WhatsApp) · N linked) and per gateway (Stalwart (email) · status), each with Open, Start, Stop and Restart. See Monitoring and the menu bar.

Limits

  • The WhatsApp engines are unofficial; a number can be banned.
  • WAHA, Postal, ntfy, Gotify, Jasmin and the Telegram server need a container engine (DoCatz, OrbStack, Docker Desktop …DoCatz).
  • The Telegram server has not been tried with a real bot yet; treat it as early.

Last updated 2026-11-03