Your community.
Your server.
Your rules.
AuraLeaf is a family of self-hosted applications that let you run a full voice and text community on your own infrastructure — and, through AuraCanopy, let multiple communities join and talk to each other. No third-party servers. No telemetry. No subscriptions.
See AuraLeaf in action.
Channels, encrypted DMs, live voice with AI noise suppression, and cross-server federation — all from one client.
A family of four, working as one.
Each piece does one job well. Together they form a complete, self-hosted community platform you control end to end — and can federate across communities.
AuraLeaf
The client. How your people actually connect to the server.
Client →AuraTree
The server. Self-hosted voice & text community core.
Server →AuraBranch
The relay. Stands up voice regions and backups anywhere.
Relay →AuraCanopy
Federation. Many trees, separate servers that share resources.
Federation →Encryption and security are not an afterthought — they're the foundation.
Because you're hosting your own community, protecting its data is on us. AuraLeaf is built encryption-first: payloads are encrypted in transit, credentials are hashed the strong way, and there's no telemetry leaving your stack.
- Encrypted payloadsECDH key exchange + AES-256-GCM
- E2E-encrypted DMsSignal-style key ratcheting — the server can't read them
- Argon2 passwordsStrong, memory-hard hashing
- Secure pairingRelays pair via ECDH + one-time tokens
- Encrypted sessionshttpOnly refresh cookies + JWT, token rotation
- Rate limitingPer-endpoint abuse protection
- No telemetryYour stack, your data, nothing phoned home
Big platforms own your community. You can own your own.
Most chat platforms hold your data, lock you into their ecosystem, and gate features behind subscriptions. AuraLeaf flips that: the same feature set, running on your hardware, with nothing phoned home.
Your data, your machines
Messages, media, and voice all live on infrastructure you control. Export, back up, or delete — it's your data, not a vendor's asset.
No subscription, no tiers
Every feature is free for non-commercial use. No Nitro, no boosted roles, no paywalled voice quality or file limits.
Encryption-first
Encrypted payloads, E2E-encrypted DMs with key ratcheting, Argon2 passwords. Security is the foundation, not an upsell.
Source-available
Read every line, fork it, contribute back. The code is public and auditable — you don't have to take our word for anything.
Federate when you outgrow one tree
AuraCanopy lets multiple independent servers share channels and DMs — scale a community without surrendering independence.
Runs on a single Docker stack
One docker-compose up brings up the whole platform. Deploy it on a home server or a VPS, manage it from Portainer.
How it compares
The honest version — features, control, and cost at a glance.
Comparison is a rough guide — details differ per release. The source is public; verify it yourself.
How it all fits together.
A single AuraTree stack powers your community. AuraBranches extend voice to new regions, and AuraCanopy weaves multiple trees into one federated whole.
The roadmap.
No promises on timelines — we ship when it's ready. What's below is the current shape of things, from both repos.
-
1
Now · alpha
Windows client, full server
- AuraTree: complete messaging, voice/video, management, events, storage
- AuraBranch relays for distributed voice (regional routing, failover)
- Windows alpha client — per-app audio capture, push-to-talk, E2E-encrypted DMs
-
2
Next
More platforms, client polish
- Public alpha releases — Windows installer, then Ubuntu (LTS) .AppImage and Android APK
- Auto-update feed for the desktop client (electron-updater is wired, just needs a feed)
- Mobile push notifications
-
3
After that
AuraCanopy & security hardening
- Federation: cross-server visibility, federated channels, cross-server DMs
- Two-factor authentication (2FA / TOTP)
- End-to-end encryption for voice & video calls
-
4
Later
Language support
- Internationalization (i18n)
- Federated relays — dedicated AuraBranch capacity for the canopy
FAQ.
What's the difference between the web client and the desktop client?
Is AuraCanopy a separate service I deploy?
Is my data really private?
What hardware do I need to host it?
Is it free? What's the licensing?
commercial-license to discuss. Earlier MIT-licensed releases stay MIT.Can I migrate a community from another platform?
Put your community on your own ground.
Spin up AuraTree from a single Docker stack, point AuraLeaf at it, and grow from there. Everything runs on your hardware, under your control.
AuraTree
The self-hosted voice & text community core. One Docker container runs your whole community — messaging, voice and video, management, events, storage, and distributed voice. Built on Fastify, Socket.IO, PostgreSQL, Redis, MinIO, and LiveKit.
Messaging
Real-time text, rich and searchable
- Real-time messaging over Socket.IO, with edit, delete & threaded replies
- Emoji reactions, pinned messages & a pinned panel
- Full-text message search (PostgreSQL FTS) with filters & highlighted results
- File attachments with type/size validation, typing indicators & read receipts
- Mention autocomplete, unread counts & Giphy integration
Voice & Video Live
LiveKit WebRTC, with regional relays
- Voice channels, video & screen share (permission-based)
- Full-screen stream viewer overlay with host preview & picture-in-picture
- Live viewer count, minimize to audio-only, quality selection (720p / 1080p / Native)
- DM voice calls & temporary voice channels (auto-cleanup when empty)
- AFK channel auto-move, participant management, limits & bitrate config
- Soundboard & custom per-user/per-server join & leave sounds
Server Management Live
Full control, granular permissions
- Bitflag permissions (server/text/voice) + role & user overrides
- Role templates, kick/ban/timeout, invites with expiry & max uses, ownership transfer
- Role reactions (self-service roles via emoji), welcome & announcement channels, server popups
- Custom emoji packs (up to 500) & stickers (up to 50) per server, drag-and-drop channel layout
- Audit logging with filtering by action, user & date range
Events & Storage
Calendar + a real storage dashboard
- Events with RSVP, role-based visibility & announcements
- Per-category storage stats, limits & threshold alerts
- Retention policies, dry-run purge & scheduled cleanup
Direct messages
Private, encrypted, with calls
- Friend system: send/accept/reject requests, blocking, DM channels auto-created on friendship
- End-to-end encrypted DMs — Signal-style key ratcheting; the server can't read them
- DM voice calls & message status tracking (sent / received / read)
Experience
The day-to-day details
- 5 themes (Dark, Light, OLED, Nord, Midnight) with system-preference detection
- Command palette (Ctrl+K), message search (Ctrl+F), presence & custom status
- Message export (JSON/CSV) with date-range filtering
Infrastructure
Built to run, scale & self-heal
- Auto-migrations, gateway with resume & gap detection
- Message archiving to MinIO cold storage (gzip)
- Push via ntfy, health & version endpoints, idempotency keys
Run AuraTree in minutes.
One docker-compose stack brings up the whole platform.
AuraLeaf
The client your community opens to join your AuraTree. Text, voice, video, and screen share in one app — on your own ground. Currently in alpha.
Connecting to your server
Point AuraLeaf at any AuraTree you host or join
- Connect to your own AuraTree — or join someone else's, in your own community
- Full access to text, voice, video & screen share on the connected server
- Multi-server support — connect to several trees and switch between them instantly
- No account on a third party's platform — you're on your own infrastructure
Desktop experience
A real app, not a browser tab
- System tray, global shortcuts (push-to-talk, mute, deafen) & auto-launch with Windows
- Per-app audio capture (Windows) — stream one app's audio, not your whole system
- Native desktop notifications: unread indicators, mention badges, system alerts
- Custom color themes; built on Electron + React + Mantine
Privacy in the client
Your device stays yours too
- End-to-end encrypted DMs — Signal-style key ratcheting; the server can't read them
- AI noise suppression in the client: RNNoise, NSNet2 or DeepFilterNet modes
- Encrypted credential storage & a sandboxed app — no filesystem access, zero telemetry
Cross-server (via AuraCanopy)
Where the federation shows up
- See & talk to users on other federated servers
- Join federated channels broadcast from other trees
- Cross-server DMs when you add users from another tree
Status & requirements
Where the client is today
- Windows alpha — expect rough edges & missing features; public alpha releases coming
- Ubuntu (LTS) & Android builds on the roadmap; auto-update feed being wired
- Feedback via the client's GitHub issues
| Windows (alpha) | Minimum | Recommended |
|---|---|---|
| OS | Windows 10 (1809+) | Windows 11 |
| CPU | Dual-core x64 | Quad-core x64 |
| RAM | 4 GB system / 750 MB free | 8 GB system / 1 GB free |
| Disk | 700 MB install | 1 GB install |
| Network | 256 kbps voice / 1 Mbps share | 1 Mbps voice / 4 Mbps share |
Typical RAM in testing: ~485 MB idle, ~600 MB in a voice call. Linux/Android requirements ship with those builds.
Getting started
Five steps, once a public build is out
- 1. Download and install AuraLeaf for your platform
- 2. Launch the app — you'll see the server connection screen
- 3. Enter your server's URL (e.g.
https://chat.example.com) - 4. Create an account or log in
- 5. You're in. Don't have a server yet? Host one in minutes.
Get the AuraLeaf client.
Windows alpha is live; more platforms are coming.
AuraBranch
The extension layer. Stand up extra voice regions and backup nodes wherever your community needs them. Each branch auto-pairs to the master and handles its own voice auth, heartbeats, and event relay.
Distributed voice
Lower latency, more capacity, real redundancy
- Standalone relay server that runs on its own box, anywhere
- Per-region voice routing so members connect to the nearest node
- Backup capacity — keep voice up when a node drops
- Channel relay policies:
master,auto(best by latency/load), orspecific(pinned)
Pairing & health
Secure, self-monitoring
- Secure pairing via ECDH key exchange + one-time tokens
- Heartbeat health monitoring with auto-failover
- Admin lifecycle: create, suspend, drain, delete
Federated Relays Future
A branch reserved just for the federation
- Stand up a relay specifically for AuraCanopy to use
- Offload federation voice so one already-taxed server isn't carrying it
- Planned — not yet available
Extend voice beyond one machine.
AuraBranch ships with the server's relay package.
AuraCanopy
The layer that connects AuraTrees. Many trees, acting as separate servers that still share resources — so users across communities can join and see each other, talk in shared federated channels, and DM across servers. It's not a separate service you deploy; it's the connective tissue between your trees.
What federation does
Separate servers, one shared community feel
- Users on different trees can join and see each other
- Each tree keeps its own identity, data & ownership — nothing is merged into a single monolith
- Scale a community across multiple servers without sacrificing independence
Federated channels
Broadcast a channel to the whole federation
- Any tree can choose to broadcast a channel into every server's federated section
- Enables native cross-server communication
- Users from other trees appear in the shared channels
Cross-server DMs
Private, across the canopy
- When users on different trees add each other, they get a DM
- Friend requests & DMs work across the federation
Federation permissions
Because it connects trees, it's a critical control surface
- Permissions govern who can join a federation and what they can broadcast
- Each tree controls what it shares with the canopy
- Federation is a connective layer, not a separate service — but it carries its own permission model because it bridges independent servers
Security & privacy
Federation stays encryption-first
- Cross-server data exchange is encrypted, consistent with the platform's ECDH + AES-256-GCM model
- No tree hands over ownership of its data to the federation
Federated Relays Future
Dedicated AuraBranch capacity for the canopy
- Stand up a relay specifically for the federation to use
- Keep federation voice off an already-taxed server
- Planned — not yet available
Many trees. One canopy.
Federation is coming to AuraTree. Watch the repo for the AuraCanopy release.
Encryption and security are a top priority.
You're hosting your own community, so protecting its data is on us. AuraLeaf is built encryption-first: payloads are encrypted in transit, credentials are hashed the strong way, relays pair securely, and nothing is phoned home.
In transit & at rest
How your data is protected
- Full payload encryption with
ECDHkey exchange +AES-256-GCM - End-to-end encrypted DMs — Signal-style key ratcheting; even the server can't read direct messages
- Argon2 password hashing (memory-hard, resistant to GPU/ASIC attacks)
- Credential encryption (AES-GCM) for "remember me"; client app runs in a locked-down sandbox
- JWT access tokens + httpOnly refresh cookies with rotation
Relay security
AuraBranch pairs securely
- Relay pairing via secure ECDH + one-time pairing tokens
- WebSocket signaling proxied through the master's SSL (no mixed content)
Abuse & access
Defense in depth
- Per-endpoint rate limiting
- Admin claim-code system & session management
- No telemetry — your stack, your data
On the roadmap
Planned, not yet shipped
- Two-factor authentication (2FA / TOTP)
- End-to-end encryption for voice/video calls
Your data stays yours.
Get AuraTree running.
Everything is in the README on GitHub — this is the formatted, quick-reference version. The canonical source is always the repo.
Prerequisites
- Docker & Docker Compose
- Node.js 20+ (for development)
- pnpm 8+ (for development)
Production deploy
The whole platform runs from a single docker-compose stack. Copy the env file, edit it, then bring the services up.
# 1. Configure environment
cp docker/.env.example docker/.env
# edit docker/.env with your settings
# 2. Start all services
cd docker
docker-compose up -d
.env.example file in the repo documents every variable.Portainer
Deploying through Portainer instead of the CLI? Add a new stack, paste the contents of docker/docker-compose.yml, and fill in the env file values on the stack form. The livekit service uses network_mode: host — on Portainer this works as-is on Docker Desktop and Linux, but if you're deploying to a remote endpoint make sure the UDP ports (50000–60000 by default) are open on that machine for WebRTC.
Backups
Two volumes hold your community's actual data:
postgres— all messages, users, roles & server configminio— attachments, emoji packs, stickers, profile media, archived messages
A nightly docker exec pg_dump plus a sync of the MinIO data volume covers both. Message export (JSON/CSV) in the app is a good second net for individual servers.
Docker services
The stack brings up these containers. This is what you'll see in Portainer once deployed.
| Service | Image | Port | Purpose |
|---|---|---|---|
api | sosiagaming/sgchat-api | 3040 | API + web client |
postgres | sosiagaming/sgchat-postgres | 3041 | Database |
redis | redis:7-alpine | 3042 | Cache, sessions |
minio | minio/minio | 3043 | File storage |
livekit | livekit/livekit-server | host | Voice/video SFU (UDP 50000–60000 for WebRTC) |
ntfy | binwiederhier/ntfy | 3048 | Push notifications |
Only the api port (3040) needs to be exposed to your users — put a reverse proxy (Caddy/Nginx/Traefik) with TLS in front of it. Everything else stays on the internal Docker network.
Relay networking (AuraBranch)
When deploying relay servers on the same LAN as the master, the relay must report a reachable IP address — not localhost. The master's API container proxies LiveKit WebSocket signaling through its own SSL, so the relay's livekit_url must be reachable from inside the Docker container.
localhost resolves to the container itself, not the host. Set PUBLIC_IP or LIVEKIT_PUBLIC_URL to the relay machine's LAN IP.# Example: relay on the same LAN as the master
LIVEKIT_PUBLIC_URL=ws://192.168.1.50:7880
Development
# Install dependencies
pnpm install
pnpm dev # API dev server (port 3000)
pnpm dev:web # web client dev server (port 5174)
pnpm dev:all # both at once
pnpm build # build all packages (shared -> web -> api)
pnpm typecheck # type check
pnpm lint # lint
Project structure
sgChat-Server/
├── packages/
│ ├── shared/ # types, validators, permissions, constants
│ ├── api/ # Fastify backend + Socket.IO
│ │ └── src/ # routes, socket, services, lib, middleware,
│ │ # migrations, plugins
│ ├── web/ # React 19 frontend (served by API container)
│ └── relay/ # standalone relay server CLI (AuraBranch)
│ └── src/ # auto-pairing, crypto, ws proxy, heartbeat,
│ # voice auth, event relay
└── docker/
├── docker-compose.yml
├── Dockerfile.api
├── Dockerfile.postgres
├── init.sql
└── livekit.yaml
AuraLeaf client
The desktop client lives in its own repo: DemonFiend/sgChat-Client. It's a separate codebase (Electron + React + Mantine + Vite) that talks to any AuraTree.
What the client adds over the web client
- Per-app audio capture on Windows (stream one app's audio, not the whole system)
- System tray, global shortcuts (push-to-talk, mute, deafen), auto-launch with Windows
- Multi-server switching, native notifications with mention badges
- AI noise suppression in the client: RNNoise, NSNet2, DeepFilterNet
Current status
- Windows alpha — public alpha releases coming
- Ubuntu (LTS) .AppImage and Android APK — not yet published
- Auto-update is wired (electron-updater) but not connected to a release feed yet
- Per-app audio capture is Windows-only; other platforms fall back to system audio
Bug reports and feature requests go to the client's issue tracker.
Licensing
AuraLeaf uses a dual-license model:
- PolyForm Noncommercial 1.0.0 — free for personal, hobby, educational, research, and other non-commercial use. Read the source, fork it, modify it, contribute back.
- Commercial license — required to sell it, offer it as a paid service/hosting, bundle it into a product you sell, or otherwise use it in a for-profit business. Open a GitHub issue tagged
commercial-licenseto discuss.
Known limitations
Screen-share audio capture (browser)
The getDisplayMedia() API has inherent limits on audio capture:
| Share type | Audio behavior |
|---|---|
| Browser tab | Captures tab audio only |
| Window | No isolated app audio (system audio or nothing) |
| Entire screen | Captures all system audio |
Browsers don't expose per-application audio routing for privacy/security. The Electron desktop client (AuraLeaf) provides better audio capture.