dotwire
A self-hosted realtime chat backend: private rooms, history, typing indicators and presence, behind your own auth.
- Self-hosted
- SignalR + REST
- Postgres + TimescaleDB
- NATS JetStream
- Early development
What it does
What is this?
A self-hosted realtime chat backend: private rooms, history, typing indicators and presence, behind your own auth.
What about realtime rooms?
Messages, history paging, typing indicators and presence, over SignalR with a REST API alongside.
Whose auth does it use?
Yours. dotwire trusts RS256 JWTs your app signs, checked against issuer, audience and key id. The token's sub is the user id.
Who enforces room membership?
dotwire itself. Every subscription and history read is checked against room membership, not by your frontend.
Can I check messages before they're sent?
Yes, with presend webhooks. An HMAC-signed hook sees each message before it's accepted and can reject it.
Is the data encrypted?
At rest, with an AES-256 key. Storage is Postgres with TimescaleDB, the message bus is NATS JetStream.
What stops someone spamming a room?
A per-user send rate limit is built in, on top of whatever your app enforces.
Packages
@dotwire/clienton npmThe browser connection: rooms, messages, typing and presence.
@dotwire/reacton npmA provider and hooks: useRoom, useTyping, usePresence, useConnectionState.
@dotwire/hoston npmServer side: mints user tokens, manages roles and members, verifies webhooks.
Dotwire.Hoston NuGetThe .NET host SDK: mints RS256 user tokens with your private key and talks to dotwire over HTTP.
dotwire is in early development and not production-ready yet.
View on GitHub ↗