How to Self-Host Snikket: Private XMPP Messaging 2026
TL;DR
Snikket (Apache 2.0) is a batteries-included XMPP server distribution based on Prosody — the battle-tested XMPP server in Lua. Snikket removes all the complexity of configuring XMPP: it comes with automatic TLS, invite-based registration, and officially maintained iOS and Android apps. Share encrypted messages, voice calls, video calls, and files with friends and family — all on your own server. No phone number required, no telemetry, no ads.
Key Takeaways
- Snikket: Apache 2.0, Prosody-based — opinionated, easy XMPP deployment
- XMPP protocol: Open standard — federates with other XMPP servers worldwide
- Invite-only: Users join via invite links you generate — no open registration
- End-to-end encryption: OMEMO E2E encryption in all supported clients
- Apps: Official Snikket iOS and Android apps; also compatible with Conversations (Android) and Siskin IM (iOS)
- Calls: Voice and video calls via XMPP Jingle (no third-party server)
Snikket vs Signal vs Telegram vs Matrix
| Feature | Snikket | Signal | Telegram | Matrix |
|---|---|---|---|---|
| Self-hosted | Yes | No | No | Yes |
| Open protocol | XMPP | Open source | MTProto | Matrix |
| E2E encrypted | Yes (OMEMO) | Yes (always) | Opt-in | Yes (E2EE rooms) |
| Federation | Yes (XMPP) | No | No | Yes |
| Phone number required | No | Yes | Yes | No |
| Voice/video calls | Yes | Yes | Yes | Yes |
| Group calls | Basic | Yes | Yes | Yes |
| Server required | Yes (yours) | Signal's | Telegram's | Yes (yours) |
| RAM (idle) | ~100MB | — | — | ~1GB+ |
Server Requirements
- Domain: A dedicated domain or subdomain (e.g.,
chat.yourdomain.com) - DNS: Specific SRV records required for federation
- Ports: 80, 443 (HTTPS), 5222 (XMPP client), 5269 (XMPP federation), and STUN/TURN ports for calls
- RAM: ~100–200MB
Part 1: DNS Setup
Snikket requires several DNS records:
# A records:
chat.yourdomain.com. A your-server-ip
groups.chat.yourdomain.com. A your-server-ip
share.chat.yourdomain.com. A your-server-ip
# SRV records for XMPP:
_xmpp-client._tcp.chat.yourdomain.com. SRV 5 0 5222 chat.yourdomain.com.
_xmpp-server._tcp.chat.yourdomain.com. SRV 5 0 5269 chat.yourdomain.com.
_xmpps-client._tcp.chat.yourdomain.com. SRV 5 0 5223 chat.yourdomain.com.
_xmpps-server._tcp.chat.yourdomain.com. SRV 5 0 5270 chat.yourdomain.com.
Part 2: Docker Setup
# docker-compose.yml
services:
snikket:
image: snikket/snikket-server:latest
container_name: snikket
restart: unless-stopped
network_mode: host # Required for SRV record routing
volumes:
- snikket_data:/snikket
env_file:
- snikket.conf
volumes:
snikket_data:
# snikket.conf
SNIKKET_DOMAIN=chat.yourdomain.com
SNIKKET_ADMIN_EMAIL=admin@yourdomain.com
# TURN server for calls (optional but recommended for external calls):
# SNIKKET_TWEAK_TURN_ENABLED=true
docker compose up -d
Snikket automatically provisions Let's Encrypt certificates for all required subdomains.
Part 3: Create Your Admin Account
After startup, create the initial admin invite:
# Create an admin invite:
docker exec snikket snikket-invite admin
# Output: https://chat.yourdomain.com/invites/abc123def456
Open this URL in a browser → download the Snikket app → scan the QR code to join.
Part 4: Invite Users
# Create single invite:
docker exec snikket snikket-invite create
# Create bulk invites:
docker exec snikket snikket-invite create-bulk 10
# Create group invite (for a specific channel):
docker exec snikket snikket-invite create --group family-group
Each invite is a URL that creates an account when opened in the Snikket app.
Part 5: Client Apps
Official Snikket App (Recommended)
- iOS: Snikket on App Store (free)
- Android: Snikket on F-Droid / Play Store (free)
- Open the invite link on your phone
- App opens automatically and creates your account
- Start messaging
Third-Party XMPP Clients
Snikket is standard XMPP — any XMPP client works:
| Platform | Client | Notes |
|---|---|---|
| Android | Conversations | Best third-party Android XMPP client |
| iOS | Siskin IM | Feature-rich XMPP for iOS |
| macOS | Beagle IM | Native macOS |
| Windows/Linux | Gajim | Desktop XMPP client |
| Web | Converse.js | Browser-based XMPP |
Connect with:
- Server:
chat.yourdomain.com - Username:
yourname@chat.yourdomain.com - Password: set during invite registration
Part 6: Group Chats (Multi-User Chat)
Create a persistent group chat room:
# Create a group:
docker exec snikket snikket-group create family
# The group JID is: family@groups.chat.yourdomain.com
In the Snikket app → Channels → Join → enter the group JID.
Or invite directly:
# Create invite that auto-joins a group:
docker exec snikket snikket-invite create --group family
# Share this invite link — recipients join both the server and the group
Part 7: File Sharing
Snikket includes HTTP file upload (share.chat.yourdomain.com):
- Files and images are uploaded to your server
- Share links in chat
- Configurable file size limit and retention period
# snikket.conf additions:
SNIKKET_TWEAK_SHARE_MAX_SIZE=10485760 # 10MB max file size
SNIKKET_TWEAK_SHARE_EXPIRE_DAYS=30 # Files auto-delete after 30 days
Part 8: Federation with Other XMPP Servers
XMPP is a federated protocol — your users can message anyone on any XMPP server:
your-user@chat.yourdomain.com → friend@jabber.org
your-user@chat.yourdomain.com → colleague@another-xmpp-server.com
No extra configuration needed — federation works automatically via the SRV DNS records.
Public XMPP servers your users can contact:
- jabber.org
- conversations.im
- movim.eu
Part 9: Monitoring and Admin
# View current users:
docker exec snikket snikket-user list
# View active sessions:
docker exec snikket prosodyctl status
# Check certificate status:
docker exec snikket snikket-certs status
# Renew certificates manually:
docker exec snikket snikket-certs renew
# Server stats:
docker exec snikket prosodyctl mod_measure dump
Maintenance
# Update:
docker compose pull
docker compose up -d
# Backup:
tar -czf snikket-backup-$(date +%Y%m%d).tar.gz \
$(docker volume inspect snikket_snikket_data --format '{{.Mountpoint}}')
# Restore:
docker compose down
# Restore volume data
docker compose up -d
See all open source privacy and messaging tools at OSSAlt.com/categories/messaging.