SDK packages
Seven packages, one core. Every binding is a thin translation of the same framework-agnostic stores, so behaviour does not drift between frameworks.
All documentation
Getting started
Overview Quickstart SDK packagesFrontend
React Vue Svelte React Native Web Components Headless & theming Real-timeBackend API
Authentication Templates Trigger & status Contacts & preferencesMore
Self-hosting ReferencePick the package for your stack
Every package is a thin layer over a shared, framework-agnostic core, so behavior is identical across frameworks.
| Package | For | Ships |
|---|---|---|
@elaanio/react | React (web) | Components + hooks, SSE realtime |
@elaanio/vue | Vue 3 | Components + composables, SSE realtime |
@elaanio/svelte | Svelte | Reactive stores (headless) |
@elaanio/react-native | React Native | Native components, SSE via react-native-sse |
@elaanio/elements | Any page / framework | Web Components (custom elements) |
@elaanio/react-core | React (custom UI) | Provider + hooks, no components |
@elaanio/core | Any JS | Client + observable stores + realtime |
The three components
All three are available everywhere, and behave the same in each framework:
- Bell: an icon with an unread badge and a popover feed.
- Inbox feed: the notification list, rendered inline.
- Preferences: the per-type by per-channel opt-in matrix.
Auth (the tokenProvider), realtime, polling, and optimistic updates work identically across every binding, because they all sit on the same core.
@elaanio/core and every framework package inherits it. The bindings only translate the core's observable stores into that framework's idiom: hooks in React, composables in Vue, native stores in Svelte.Versioning
The packages are versioned together and published to npm under the @elaanio scope. The framework bindings re-export their core's API and pin it exactly, so upgrading a binding pulls the matching core with it. Source and issues live at github.com/ThingsIDoForLove/elaan-js.