Notification infrastructure

The instant it happens, your users know.

Elaan is the notification layer for real-time products: in-app inbox, email, and push from one API, streamed live to open sessions over a single connection. Multi-tenant, white-label, and yours to self-host.

Self-hostable Multi-tenant Real-time by default
Inbox Live
    One API, every channel In-app inbox Email Mobile & web push Real-time (SSE)
    On the roadmap SMS Slack WhatsApp Microsoft Teams Discord Telegram Webhooks

    How it works

    Trigger one event. Elaan does the fan-out.

    Fire a single call when something happens. Elaan resolves each recipient's channel preferences, renders your templates with their brand, and delivers to every enabled channel. One broken channel never blocks the rest.

    # one call, from your backend
    POST https://api.elaan.io/v1/notifications
    Authorization: Bearer sk_live_…
    
    {
      "notification_type_key": "order_shipped",
      "external_ids": ["user_42"],
      "variables": { "order_id": "A1234" }
    }
    
    ← 202 { "events": [{ "external_id": "user_42", "event_id": "01J…" }] }
    01
    ResolveLook up the contact and which channels they've opted into.
    02
    RenderFill your template's {{ variables }} with their brand and attributes.
    03
    Deliver & streamSend to inbox, email, and push, then stream the in-app one live to their open session.

    What you get

    Everything a notification layer needs. Nothing you have to run yourself.

    Real-time inbox

    Users see notifications the instant they land, streamed over one SSE connection. No polling, no refresh.

    Multi-channel fan-out

    One trigger reaches in-app, email, and push. Each channel fails independently, so one bad template never blocks delivery.

    Per-user preferences

    Every contact decides what they get, per channel and per notification type. Elaan honors it on every send.

    Templates & branding

    Author once with variables; brand per tenant. One template renders correctly for every customer and recipient.

    Bring your own transport

    Send through your SMTP, SES, SendGrid or Mailgun, and your Expo or FCM project. Your deliverability, your reputation.

    Self-host in one command

    The same image runs our cloud and your own servers. docker compose up. Your data, your infrastructure.

    Real-time inbox

    No polling

    Notifications are streamed to open tabs over a single SSE connection, so the browser never polls for updates.

    • One connection per user. A single stream carries every notification, and it scales to thousands of concurrent listeners on modest hardware.
    • Durable by default. Live is best-effort on top of a stored inbox. Reconnect and nothing is ever lost.
    • Drop-in on the frontend. Mint a scoped token, open the stream, render. The same token drives the REST inbox too.

    Built for platforms

    Multi-tenant to the core. Yours to run anywhere.

    Whether you serve ten customers or ten thousand, every tenant is isolated and every message is branded. Run it on our cloud, or pull the image and run the whole stack yourself.

    White-label

    Every tenant, isolated and branded

    Strict per-tenant scoping on every read and write, a default brand per tenant, and per-brand template overrides, so notifications always look like they came from your customer, not from us.

    Self-host

    The same image, on your servers

    One Docker Compose brings up the API, the workers, and Postgres, with the console served in-process. Config flags, not code forks, select the profile. Run docker compose -f compose.onprem.yaml up and you're live.

    Pricing

    Start free. Scale when you do.

    Priced by your active audience, not per message. Send as much as you want, and talk to us for large scale or on-premise.

    Free
    $0/ month

    For side projects and trying Elaan out.

    • 1,000 active contacts / month
    • Unlimited notifications
    • Real-time in-app inbox, email & push
    • 2 brands
    • Bring your own transports
    • Community support
    Start free
    Business
    $99/ month

    For platforms and white-label use.

    • Everything in Pro, plus:
    • 50,000 active contacts / month
    • Unlimited brands
    • Custom domain (your own endpoint)
    • Priority support
    Get started
    Scale
    Custom

    For large audiences and enterprise needs.

    • Everything in Business, plus:
    • 100k+ active contacts
    • Higher rate limits
    • Custom SLAs
    • Priority support & onboarding
    Contact sales
    On-premise

    Prefer to run it yourself? Self-host the whole stack.

    Single-tenant, on your own infrastructure, with your data never leaving your network. Unlimited volume, every channel and the real-time inbox, SSO, custom SLAs, and dedicated support. Priced per deployment.

    Contact support

    No credit card to start. An “active contact” is a unique recipient you notify in a month; extras billed per 1,000. Non-profit and startup discounts available.

    FAQ

    The questions we get asked.

    What is Elaan?

    Elaan is notification infrastructure: one API that delivers the same event to an in-app inbox, email and push. You model notification types and templates once, trigger a single event when something happens, and Elaan resolves which channels each recipient has enabled, renders the templates, and delivers asynchronously.

    Can I self-host Elaan?

    Yes. The same container image runs the hosted product and on-premise installs, with configuration flags selecting which features are offered. A self-hosted deployment is single-tenant, uses your own Postgres and your own email and push credentials, and has the real-time SSE inbox stream enabled.

    How is Elaan priced?

    By active contacts, not per message. An active contact is a unique recipient you notify in a given month, and notification volume is unlimited on every tier. Free covers 1,000 active contacts a month, Pro is $29/mo for 10,000, and Business is $99/mo for 50,000 with unlimited brands. On-premise is priced per deployment.

    Which frameworks have SDKs?

    React, Vue 3, Svelte, React Native, and framework-agnostic Web Components, plus a headless core package for anything else. Every binding is a thin layer over the same framework-agnostic core, so behaviour does not drift between them.

    Do I have to use your UI components?

    No. Every packaged component is built on hooks and stores you can use directly, and the core package gives you the observable stores with no UI at all. You keep token refresh, realtime with polling fallback, optimistic updates and reconnection reconciliation, and render whatever markup you like.

    How does the real-time inbox work?

    Over Server-Sent Events, with an automatic fallback to polling when a deployment does not offer streaming. The stream is only an accelerator: notifications are persisted before they are streamed, so a client that was offline reconciles against the durable inbox over REST when it reconnects, and nothing is lost.

    Can each of my customers' messages carry their own branding?

    Yes, that is what the branding model is for. A brand is a named set of values that templates interpolate, so a single template can serve every customer you have. A send can name a brand, and an omitted or unknown one falls back to your account default rather than failing.

    Contact

    Talk to us about on-premise.

    Planning a self-hosted deployment, or need a plan sized to your volume? Tell us what you're building and we'll get back to you.

    Every on-premise install comes with hands-on setup help and a direct line to the people who build Elaan. We usually reply within one business day.

    Self-hosting guide Read the docs

    We never share your details.

    Thanks, there.

    We've got your message and will reply shortly.

    Get started

    Ship notifications, not notification plumbing.

    Wire one endpoint today. Add channels, preferences, and real-time as you grow, and the API stays the same.