Dispatch channel extensions collected under a single parent directory.
catalog/extensions.json- machine-readable extension catalog indexchannels/schema- shared manifest and catalog schema for channel pluginschannels/discord- Discord interaction-webhook pluginchannels/email- IMAP + SMTP email pluginchannels/gmail- Gmail-focused IMAP + SMTP email pluginchannels/outlook- Outlook / Microsoft 365 IMAP + SMTP email pluginchannels/slack- Slack Events API / Socket Mode pluginchannels/telegram- Telegram Bot API pluginchannels/twilio-sms- Twilio SMS pluginchannels/webhook- generic webhook plugincatalog- local catalog search and inspection helper
| Plugin | Ingress availability | Upstream receive transport | Outbound delivery |
|---|---|---|---|
channel-discord |
Interaction webhook only | Host-managed HTTPS callback | Discord REST bot messages |
channel-email |
One-shot poll or background ingress session | IMAP polling worker inside the plugin | SMTP delivery |
channel-gmail |
One-shot poll or background ingress session | Gmail IMAP polling worker inside the plugin | Gmail SMTP delivery |
channel-outlook |
One-shot poll or background ingress session | Outlook / Microsoft 365 IMAP polling worker inside the plugin | Outlook / Microsoft 365 SMTP delivery |
channel-slack |
Events API webhook, one-shot Socket Mode poll, or background Socket Mode session | Host-managed HTTPS callback or Slack Socket Mode websocket | chat.postMessage or incoming webhook |
channel-telegram |
Bot API webhook, one-shot poll, or background poll session | Telegram webhook callback or Bot API getUpdates |
sendMessage, sendPhoto, sendDocument |
channel-twilio-sms |
Twilio webhook only | Host-managed HTTPS callback | Twilio Messages API |
channel-webhook |
Generic webhook only | Host-managed HTTPS callback | JSON POST to configured endpoint |
Channel plugins use dispatch-channel-protocol directly for the wire contract. The framing is still one JSON message per line on stdio, but the message shape inside that framing is JSON-RPC 2.0.
In practice:
dispatch channel callexercises one-shot operations such asconfigure,health,deliver,push, andstatusdispatch channel listenruns webhook-style ingress bindingsdispatch channel poll --onceissues a one-shotpoll_ingressrequestdispatch channel pollwithout--onceruns background-ingress bindings for polling or sessioned upstream transportsdispatch upmanages project-level channel bindings fromdispatch.toml
While an ingress session is active, Dispatch keeps the plugin subprocess alive and receives inbound activity as channel.event notifications. The upstream transport is plugin-specific: a plugin may translate that into repeated HTTP polling, an upstream websocket, or plain webhook callbacks.
All in-repo plugins build from the repo-root workspace:
cargo check --workspace --lockedcargo test --workspace --locked
channel-schemaremains a repo-local crate for shared manifest and catalog types used by plugin tests and the catalog helper.- Email-oriented plugins are still channels in Dispatch because they surface inbound user-originated messages and outbound replies through the same normalized conversation/event model as chat platforms.
- Email service variants stay service-specific at the plugin layer:
channel-email,channel-gmail, andchannel-outlook. Broader provider umbrellas such as Google or Microsoft can exist later as separate connector or tool surfaces without overloading the channel naming. catalog/extensions.jsonacts as the local catalog seed for install/search tooling and normalizes the plugin manifests into one searchable index. It covers only the plugins built and released from this repository; other first-party channel plugins (for example Signal and WhatsApp) ship from standalone repositories with their own catalogs. Seedispatch/docs/plugin-ecosystem.mdfor the curated index of first-party plugin repositories.- The protocol surface may still change as Dispatch hardens the channel runtime, so it should not yet be treated as a stable Dispatch core compatibility contract.