# Documentation - [Introduction](/docs): Typed notifications for Node.js and Bun - Get Started - [Installation](/docs/get-started/installation): Install Better-Notify and its dependencies - [Your First Email](/docs/get-started/quick-start): Build a working email setup with channels, routes, sub-catalogs, and a typed client - [Why Better-Notify](/docs/get-started/why-betternotify): What makes Better-Notify different from other notification tools - [Examples](/docs/get-started/examples): Working examples you can clone and run - Concepts - [Catalog & Procedures](/docs/concepts/catalog-and-procedures): Define and organize your notification procedures - [Channels](/docs/concepts/channels): Email, SMS, push, and custom notification channels - [Transports](/docs/concepts/transports): How transports deliver rendered messages to providers - [Middleware](/docs/concepts/middleware): Transform and control the notification pipeline - [Hooks](/docs/concepts/hooks): Observe lifecycle events without side effects - [Plugins](/docs/concepts/plugins): Bundle middleware and hooks into reusable units - [Standard Schema](/docs/concepts/standard-schema): Type-safe validation with Zod, Valibot, or ArkType - Channels - [Discord](/docs/channels/discord): Send Discord messages via Webhook API - [Email](/docs/channels/email): Configure and send typed emails - [GitHub](/docs/channels/github): Create issues, post comments, leave inline diff comments, and submit PR reviews on GitHub - [Push](/docs/channels/push): Send push notifications - [Slack](/docs/channels/slack): Send Slack messages via Web API - [SMS](/docs/channels/sms): Send SMS notifications - [Telegram](/docs/channels/telegram): Send Telegram messages via Bot API - [Web Push](/docs/channels/web-push): Send push notifications to browsers via VAPID - [WhatsApp](/docs/channels/whatsapp): Send text, media, location, interactive, contact, and reaction messages on WhatsApp - [Zapier](/docs/channels/zapier): Trigger Zapier automations via webhook - [Custom Channels](/docs/channels/custom-channels): Build your own notification channel - Transports - [Transports Overview](/docs/transports): How transports deliver your notifications - [Multi-Transport](/docs/transports/multi-transport): Combine multiple transports with failover, load balancing, and redundancy - [Custom Transports](/docs/transports/custom-transports): Build your own transport adapter - [Mock Transport](/docs/transports/mock): Test notifications without sending - **Automation** - [Zapier](/docs/transports/zapier): Send emails via Zapier webhook automation - **Chat** - [Discord](/docs/transports/discord): Send messages via Discord Webhook API - [Slack](/docs/transports/slack): Send messages via Slack Web API - [Telegram](/docs/transports/telegram): Send messages via Telegram Bot API - **Email** - [Autosend](/docs/transports/autosend): Send emails via the Autosend HTTP API - [Cloudflare Email](/docs/transports/cloudflare-email): Send emails via the Cloudflare Email Service REST API - [Mailchimp Transactional](/docs/transports/mailchimp): Send emails via the Mailchimp Transactional (Mandrill) API - [OneSignal Email](/docs/transports/onesignal-email): Send emails via the OneSignal HTTP API - [Resend](/docs/transports/resend): Send emails via the Resend HTTP API - [Selligent](/docs/transports/selligent): Send transactional emails via the Selligent (Marigold Engage) SDC API - [Amazon SES](/docs/transports/ses): Send emails via Amazon Simple Email Service - [SMTP](/docs/transports/smtp): Send emails via SMTP with Nodemailer - [Unosend](/docs/transports/unosend): Send transactional emails via the Unosend HTTP API - **GitHub** - [GitHub](/docs/transports/github): Create issues, post comments, leave inline diff comments, and submit PR reviews via the GitHub REST API - **Push** - [OneSignal Push](/docs/transports/onesignal-push): Send push notifications via the OneSignal HTTP API - **SMS** - [OneSignal SMS](/docs/transports/onesignal-sms): Send SMS via the OneSignal HTTP API - [Twilio](/docs/transports/twilio): Send SMS via Twilio Messages API - **Web Push** - [VAPID](/docs/transports/vapid): Send web push notifications via the VAPID protocol - **WhatsApp** - [WhatsApp Meta](/docs/transports/whatsapp-meta): Send WhatsApp messages via Meta's Cloud API - Templates - [Templates Overview](/docs/templates): Render notification content with template adapters - [React Email](/docs/templates/react-email): Build email templates with React Email - [MJML](/docs/templates/mjml): Build responsive email templates with MJML - [Handlebars](/docs/templates/handlebars): Build email templates with Handlebars - [Custom Adapters](/docs/templates/custom-adapters): Build your own template adapter - Middlewares - [withDryRun](/docs/middlewares/with-dry-run): Short-circuit sends without delivering - [withRateLimit](/docs/middlewares/with-rate-limit): Throttle sends per key with configurable windows - [withIdempotency](/docs/middlewares/with-idempotency): Deduplicate sends within a time window - [withEventLogger](/docs/middlewares/with-event-logger): Emit structured events per send - [withTagInject](/docs/middlewares/with-tag-inject): Inject tags into the pipeline context - [withTracing](/docs/middlewares/with-tracing): Wrap sends in distributed tracing spans - [Custom Middleware](/docs/middlewares/custom-middleware): Write your own middleware for the send pipeline - Infrastructure - Queues - [Queue & Workers](/docs/infrastructure/queue-and-workers): Send notifications later through any queue, with one shared pipeline - [BullMQ](/docs/infrastructure/queue-and-workers/bullmq): Process queued sends with BullMQ and Redis through the QueueProducer contract - [Cloudflare Queues](/docs/infrastructure/queue-and-workers/cloudflare): Run queued sends on Cloudflare Queues with a push consumer in the Workers queue() handler - [Webhook Router](/docs/infrastructure/webhook-router): Handle provider webhook events - [MCP Server](/docs/infrastructure/mcp): Expose your notification catalog as tools for AI agents via the Model Context Protocol - [Stores](/docs/infrastructure/stores): Persistent state stores for middleware - [Sinks](/docs/infrastructure/sinks): Route notification events to external systems - [Tracers](/docs/infrastructure/tracers): Distributed tracing adapters - [Logger](/docs/infrastructure/logger): Structured logging configuration - Advanced - [Failover and Middleware](/docs/advanced/failover-and-middleware): Add transport failover and shared middleware to the email example - Reference - [Error Handling](/docs/reference/error-handling): Handle and recover from notification failures - [Testing](/docs/reference/testing): Test your notification pipeline - Changelog - [Changelog](/docs/changelog): Release history for all Better-Notify packages - **Separator** - [@betternotify/core](/docs/changelog/core): Changelog for @betternotify/core — latest: v1.0.0-beta.11 - [@betternotify/autosend](/docs/changelog/autosend): Changelog for @betternotify/autosend — latest: v1.0.0-beta.7 - [@betternotify/bullmq](/docs/changelog/bullmq): Changelog for @betternotify/bullmq — latest: v0.0.5-alpha.0 - [@betternotify/cloudflare-email](/docs/changelog/cloudflare-email): Changelog for @betternotify/cloudflare-email — latest: v1.0.0-beta.7 - [@betternotify/create-better-notify](/docs/changelog/create-better-notify): Changelog for @betternotify/create-better-notify — latest: v1.0.0-beta.8 - [@betternotify/discord](/docs/changelog/discord): Changelog for @betternotify/discord — latest: v1.0.0-beta.7 - [@betternotify/email](/docs/changelog/email): Changelog for @betternotify/email — latest: v1.0.0-beta.7 - [@betternotify/github](/docs/changelog/github): Changelog for @betternotify/github — latest: v1.0.0-beta.6 - [@betternotify/handlebars](/docs/changelog/handlebars): Changelog for @betternotify/handlebars — latest: v1.0.0-beta.6 - [@betternotify/mailchimp](/docs/changelog/mailchimp): Changelog for @betternotify/mailchimp — latest: v1.0.0-beta.6 - [@betternotify/mcp](/docs/changelog/mcp): Changelog for @betternotify/mcp — latest: v0.0.0-beta.6 - [@betternotify/mjml](/docs/changelog/mjml): Changelog for @betternotify/mjml — latest: v1.0.0-beta.6 - [@betternotify/onesignal](/docs/changelog/onesignal): Changelog for @betternotify/onesignal — latest: v1.0.0-beta.6 - [@betternotify/push](/docs/changelog/push): Changelog for @betternotify/push — latest: v1.0.0-beta.6 - [@betternotify/react-email](/docs/changelog/react-email): Changelog for @betternotify/react-email — latest: v1.0.0-beta.6 - [@betternotify/resend](/docs/changelog/resend): Changelog for @betternotify/resend — latest: v1.0.0-beta.7 - [@betternotify/selligent](/docs/changelog/selligent): Changelog for @betternotify/selligent — latest: v1.0.0-beta.6 - [@betternotify/slack](/docs/changelog/slack): Changelog for @betternotify/slack — latest: v1.0.0-beta.7 - [@betternotify/sms](/docs/changelog/sms): Changelog for @betternotify/sms — latest: v1.0.0-beta.6 - [@betternotify/smtp](/docs/changelog/smtp): Changelog for @betternotify/smtp — latest: v1.0.0-beta.6 - [@betternotify/telegram](/docs/changelog/telegram): Changelog for @betternotify/telegram — latest: v1.0.0-beta.6 - [@betternotify/twilio](/docs/changelog/twilio): Changelog for @betternotify/twilio — latest: v1.0.0-beta.7 - [@betternotify/unosend](/docs/changelog/unosend): Changelog for @betternotify/unosend — latest: v1.0.0-beta.3 - [@betternotify/webpush](/docs/changelog/webpush): Changelog for @betternotify/webpush — latest: v1.0.0-beta.7 - [@betternotify/whatsapp](/docs/changelog/whatsapp): Changelog for @betternotify/whatsapp — latest: v1.0.0-beta.6 - [@betternotify/zapier](/docs/changelog/zapier): Changelog for @betternotify/zapier — latest: v1.0.0-beta.7