AlphornAlphorn Docs

FAQ

Frequently asked questions about Alphorn.

General

What is Alphorn?

Alphorn is an open-source, self-hostable notification routing platform. It receives webhooks from your services and routes messages to any combination of channels — Slack, Discord, Email, SMS, PagerDuty, and more — with filtering, retries, and real-time streaming.

How is Alphorn different from ntfy, Apprise, or Gotify?

These tools focus on sending notifications to a single destination. Alphorn is a routing layer — it takes one incoming webhook and fans it out to multiple channels based on filtering rules. You can route critical alerts to PagerDuty and Email while sending informational messages to Slack only, all from a single webhook URL.

Alphorn also provides a full web dashboard for managing webhooks, channels, and delivery logs — plus multi-tenant organizations with RBAC.

Is Alphorn free?

Alphorn is open source under the AGPL-3.0-or-later license (with a commercial license also available). You can self-host it for free with no feature restrictions.

The hosted version at app.alphorn.dev has a free tier (3,000 messages/month, 3 channels) and paid plans for higher volume.

Can I use Alphorn without Docker?

Yes. Docker is the easiest way to get started, but you can also run from source by cloning the repository and running with Node.js and pnpm.

Self-Hosting

What infrastructure does Alphorn need?

Just PostgreSQL. No Redis, no MongoDB, no message queue. Alphorn runs as a single process that handles both the web dashboard and notification delivery.

What PostgreSQL version do I need?

PostgreSQL 14 or higher.

How do I update my self-hosted instance?

Pull the latest image and restart. Database migrations run automatically on startup. See the Self-Hosting guide for details.

Can I run Alphorn behind a reverse proxy?

Yes. Alphorn runs on port 3000 by default. Put it behind Nginx, Caddy, Traefik, or any reverse proxy. Make sure to set BETTER_AUTH_URL to the public URL where Alphorn is accessible.

Reliability

What happens when a channel is down?

Alphorn retries failed deliveries up to 5 times with exponential backoff — from ~30 seconds to ~2 hours. If all retries fail, the delivery is marked as permanently failed and you can configure failure notifications to alert you via a backup channel.

Are messages stored?

Notification payloads and delivery logs are stored in PostgreSQL. You can view delivery history, status, and error details in the dashboard. For self-hosted instances, you control data retention.

What counts toward my message limit?

Each incoming webhook request counts as one message, regardless of how many channels it's routed to.

Security

Is my data encrypted?

All communication with the hosted service uses TLS (HTTPS). For self-hosted instances, encryption depends on your infrastructure — use a reverse proxy with TLS for production deployments.

Webhook URLs contain unique, unguessable tokens. Treat them like API keys.

Can someone discover my webhook URLs?

Webhook IDs are randomly generated and unguessable. Nobody can send notifications to your webhooks without knowing the full URL. Don't share webhook URLs in public repositories or logs.

Does Alphorn support SSO?

Yes. Alphorn supports GitHub, Google, Microsoft, and any OIDC-compliant identity provider (Keycloak, Okta, Azure AD, etc.). See Authentication for details.

Is two-factor authentication available?

Yes. Alphorn supports TOTP-based 2FA. Organization owners can enforce 2FA for all members. See Authentication → Two-Factor Authentication.

Channels

Can I add a channel that isn't listed?

Yes. The Webhook channel type lets you send notifications to any HTTP endpoint. If a service accepts webhooks or has an API, you can connect it.

Can I send to multiple channels at once?

That's the core idea. When a notification arrives, Alphorn evaluates each channel's filtering rules and delivers to every channel that matches. No filters means the channel receives everything.

What happens if I hit my channel limit?

On the free plan, you can configure up to 3 channels. Upgrade to Pro or Business for unlimited channels. Existing channels continue to work — you just can't add new ones until you upgrade or remove a channel.

API

Do I need an SDK?

No. Alphorn's API is a simple HTTP POST. Any language or tool that can make HTTP requests works — curl, fetch, requests, http.Post, etc. See the API Reference for examples in multiple languages.

Can I send plain text instead of JSON?

Yes. Send a POST request with Content-Type: text/plain and the message body as plain text. Alphorn also accepts Slack-compatible payloads ({"text": "..."}) for easy migration.

What's the rate limit?

Rate limits depend on your plan: 3,000 messages/month (Free), 25,000 (Pro), or 500,000 (Business). The API returns HTTP 429 when you exceed your limit.

On this page