Notifications, where they belong.
One endpoint, every channel. Alphorn routes any webhook to Slack, Discord, email, push, and 20+ channels in total, with smart filters and automatic retries.
How it works
Three steps, zero complexity
From incoming webhook to delivered notification in milliseconds.
Receive
POST webhooks to a public endpoint. JSON, plain text, or Slack-compatible payloads, with presets for GitHub, Grafana, Sentry, and more.
Filter
Apply rules by priority, tags, title, message content, or JSON payload paths.
Deliver
Route to any channel with automatic retries and failure notifications.
Integrations
Route to any channel
From Slack to PagerDuty, deliver notifications wherever your team already works. One webhook in, every channel out.
Developer experience
Integrate in minutes
Send a notification with a single HTTP request. No SDK required.
curl -X POST https://app.alphorn.dev/n/V1StGXR8_Z5jdHi6B-myT \
-H "Authorization: Bearer $ALPHORN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "Deploy complete",
"message": "v2.1.0 is live on production",
"priority": 3,
"tags": ["deploy", "production"]
}'See it in action
Built for how you actually work
One webhook endpoint, every workflow. Pick your role to see a real setup.
One deploy event, every team informed
Announce every deploy with one curl from your pipeline. Alphorn fans it out to the engineering Slack and your community Discord, and a tag filter keeps non-production deploys out of the public channel.
Features
Everything you need
Built for developers who want reliable notification routing without the complexity.
Filtering Rules
Route messages by priority, tags, title, message, or JSON payload paths. Combine conditions with AND/OR logic.
Automatic Retries
Failed deliveries get up to 5 attempts with exponential backoff. Get notified when a delivery permanently fails.
Real-time Streaming
Stream notifications via Server-Sent Events. Build live dashboards and real-time integrations.
Source Presets & Templates
Point GitHub, Grafana, Alertmanager, Sentry, or Stripe straight at Alphorn. Templates map any JSON payload to title, message, tags, and priority, no glue code.
Throttling & Loop Protection
Per-channel rate limits keep you under Slack, Discord, and Telegram limits without using up retries. Signed trace headers stop webhook loops.
Projects & Teams
Isolate teams in projects. Role-based access control with owner, admin, and read-only member roles.
SSO & Two-Factor Auth
Sign in with GitHub, Google, or Microsoft, or any OIDC provider (Keycloak, Okta, Entra) when self-hosting. TOTP 2FA with project-wide enforcement, and an invite-only mode for private instances.
MCP Server for AI Agents
Give Claude Code, Cursor, or Codex a send_notification tool. Get pinged when an agent finishes, fails, or needs your input.
Open Source
Self-host on your own infrastructure. No vendor lock-in. Fully open source and auditable.
Self-hosting
Own your infrastructure
Deploy Alphorn on your own infrastructure. Just PostgreSQL, no exotic dependencies, no vendor lock-in.
PostgreSQL only
No MongoDB, no Redis: one database to manage
Scale horizontally
Run several web and worker instances; a standalone SSE server handles live streams
Run anywhere
Docker image or straight from source with Node.js 22.12+
Bring your own SSO
Keycloak, Okta, Entra, or any OIDC provider, plus invite-only sign-up
services:
alphorn:
image: ghcr.io/alphorn-dev/alphorn:latest
ports:
- "3000:3000"
environment:
DATABASE_URL: postgresql://alphorn:secret@db:5432/alphorn
BETTER_AUTH_SECRET: your-secret-key
BETTER_AUTH_URL: http://localhost:3000
depends_on:
db:
condition: service_healthy
healthcheck:
test: ["CMD-SHELL", "wget -qO- http://127.0.0.1:3000/api/health || exit 1"]
interval: 30s
timeout: 5s
retries: 3
start_period: 60s
restart: unless-stopped
db:
image: postgres:18-alpine
environment:
POSTGRES_USER: alphorn
POSTGRES_PASSWORD: secret
POSTGRES_DB: alphorn
volumes:
- pgdata:/var/lib/postgresql
healthcheck:
test: ["CMD-SHELL", "pg_isready -U alphorn"]
interval: 5s
timeout: 5s
retries: 5
restart: unless-stopped
volumes:
pgdata:
Pricing
Simple, transparent pricing
Start free. Scale as you grow. Self-host for free, forever.
Free
For side projects and testing
- 3,000 messages/month
- 3 webhooks
- 3 channels
- 7-day retention
- Community support
Pro
For growing teams and startups
- 25,000 messages/month
- 15 webhooks
- Unlimited channels
- 30-day retention
- +10K messages for €5
Business
For scaling infrastructure
- 500,000 messages/month
- Unlimited webhooks
- Unlimited channels
- 90-day retention
- +10K messages for €5
Or self-host Alphorn on your own infrastructure, free forever.
Prices exclude VAT, which is added at checkout where applicable.
Enterprise
Custom pricingFor large organizations with custom needs. Dedicated support with SLA, custom retention and volume, self-hosting assistance.
FAQ
Frequently asked questions
Everything you need to know before getting started.
Is Alphorn free?
Yes. The hosted Free plan includes 3,000 messages/month, 3 webhooks, 3 channels, and 7-day retention. Alphorn is also fully open source: you can self-host it on your own infrastructure for free, forever.
Can I self-host Alphorn?
Yes. Alphorn is designed to be self-hostable. It runs as a Docker container and only needs PostgreSQL (no Redis, no MongoDB, no external queue). Deploy it with Docker Compose or run it from source with Node.js 22.12+.
Which channels are supported?
Slack, Discord, Microsoft Teams, Telegram, Email (SMTP), PagerDuty, Pushover, ntfy, generic webhooks, and more. See the full list on the channels page.
How does routing work?
You send a webhook to Alphorn with a title and message. Priority, tags, and payload are optional. Routing rules decide which channels receive the message based on tags, priority, or content. Retries and real-time streaming are built in.
How is this different from Novu, Knock, or ntfy?
Alphorn is self-hostable and focused on routing webhook events to messaging channels, not on building an in-app notification inbox. It has a simpler data model than Novu/Knock and more channels and filtering than ntfy. See the comparison pages for details.
Do you offer an enterprise plan?
The Enterprise plan covers custom message volume, custom retention, a dedicated SLA, and self-hosting assistance. Get in touch and we'll set something up.
Where is my data stored?
In the cloud version, data is stored in the EU. If you self-host, the data never leaves your infrastructure. See the Privacy Policy and DPA for details.
Still have questions? Get in touch.
Ready to route your notifications?
Get started in minutes. No credit card required.