MCPSERV.CLUB
Snikket

Snikket

Self-Hosted

Secure, private messaging you control

Active(85)
341stars
0views
Updated 15 days ago
Snikket screenshot 1
1 / 5

Overview

Discover what makes Snikket powerful

Snikket is a self‑hosted XMPP‑based messaging platform that focuses on privacy, decentralisation and ease of use. At its core it implements the full XMPP protocol stack—Jabber IDs, roster management, presence signalling and multi‑user chat (MUC)—while adding modern extensions such as WebRTC for audio/video calls and a lightweight REST API for programmatic control. The service is packaged as Docker images, enabling rapid deployment on any host that supports containerisation, from a Raspberry Pi to a cloud VM.

Language & Runtime

XMPP Core

Database

Web Interface

Overview

Snikket is a self‑hosted XMPP‑based messaging platform that focuses on privacy, decentralisation and ease of use. At its core it implements the full XMPP protocol stack—Jabber IDs, roster management, presence signalling and multi‑user chat (MUC)—while adding modern extensions such as WebRTC for audio/video calls and a lightweight REST API for programmatic control. The service is packaged as Docker images, enabling rapid deployment on any host that supports containerisation, from a Raspberry Pi to a cloud VM.

Architecture & Technical Stack

  • Language & Runtime: The core server is written in Go, chosen for its compiled binary nature, low runtime overhead and excellent concurrency primitives. Go’s standard library provides native TLS support, which is crucial for secure communication.
  • XMPP Core: The project leverages the Jabber/XMPP protocol, implementing full stanzas (message, presence, iq) and extensions such as XEP‑0045 MUC, XEP‑0199 Ping, XEP‑0297 Jingle for media sessions.
  • Database: User accounts, rosters and chat history are persisted in a PostgreSQL database. The schema is lightweight, with tables for users, contacts, groups (circles), and message logs. Connection pooling is handled by Go’s database/sql package.
  • Web Interface: A single‑page React application (served by a lightweight Go HTTP server) consumes the REST API and WebSocket streams. The UI is bundled into the Docker image, eliminating the need for a separate frontend deployment.
  • Media & Calls: Audio/video functionality is powered by WebRTC, with a TURN/STUN server provisioned via Docker Compose. The media gateway is implemented in Go and communicates with the XMPP signalling layer.

Core Capabilities & APIs

  • REST API: Exposes endpoints for user creation, group management, and invitation handling. Authentication is performed via XMPP‑style tokens.
  • WebSocket Streaming: Clients can subscribe to real‑time presence and message streams, enabling instant notifications without polling.
  • XMPP Extension Support: Full support for MUC, PubSub, and Jingle, allowing developers to build custom bots or integrate with other XMPP services.
  • Plugin Hooks: The server exposes a plugin interface where Go modules can register handlers for specific stanzas or REST routes. This allows adding features such as analytics, custom moderation logic, or third‑party authentication providers.

Deployment & Infrastructure

  • Dockerised Distribution: The repository ships pre‑built Docker images that include the Go binary, PostgreSQL schema migration scripts, and optional TURN/STUN services. Docker Compose templates (docker‑compose.yml) are provided for local or production use.
  • Self‑Hosting Requirements: A Linux host with Docker (≥19.03) and a PostgreSQL instance is sufficient. For high availability, the database can be replicated using Patroni or logical replication; the Go server itself is stateless and scales horizontally by adding more containers.
  • Scalability: Horizontal scaling is straightforward—spin up additional Go instances behind a load balancer (e.g., HAProxy or Traefik). The WebSocket connections are sticky, so session persistence is required. For larger deployments, consider deploying a dedicated XMPP server (e.g., Prosody) as an intermediary for legacy clients.

Integration & Extensibility

  • Webhooks: External services can subscribe to events (user join/leave, message receipt) via HTTP webhooks. This is useful for integrating with monitoring tools or building custom notification pipelines.
  • OAuth & SSO: The API supports OAuth2 for third‑party authentication, enabling integration with corporate identity providers or social login services.
  • Custom Domains: Each Snikket instance can be configured to use its own domain name, allowing organizations to host multiple isolated services under a single network.

Developer Experience

The project’s documentation is comprehensive, covering installation, configuration, API usage, and advanced deployment scenarios. The codebase follows Go idioms with clear package boundaries, making it approachable for contributors. An active community on GitHub and a dedicated Discord channel provide timely support and feature discussions. Licensing is permissive (MIT), allowing commercial use without attribution constraints.

Use Cases

  • Private Organisations: A small company can host its own secure chat service, avoiding third‑party data collection while still providing group chats and video calls.
  • Community Groups: Clubs or hobbyist groups can deploy a lightweight instance, sharing circles and events without relying on external servers.
  • Educational Environments: Schools can provide a secure messaging platform for students and staff, with strict access controls and audit logs.
  • Personal Use: Individuals can host a personal server for family or friends, controlling who joins via invitation links and maintaining full ownership of their data.

Advantages Over Alternatives

CriterionSnikketCompetitors (e.g., Matrix, XMPP‑only)
PerformanceGo’s concurrency yields low latency and high throughput.Often written in slower runtimes (Node.js, Python).
Feature SetUnified XMPP + WebRTC + REST API in one package.Requires separate components (e.g., Jitsi for calls).
Deployment SimplicitySingle Docker image + Compose.Multi‑service stacks with complex dependencies.
LicensingMIT, fully open source.Some alternatives use GPL or proprietary plugins.
**Extens

Open SourceReady to get started?

Join the community and start self-hosting Snikket today