
Schnack — Privater Messenger
Ein kompletter Messenger-Stack aus einer Hand — native Apps, source-available Server, Ende-zu-Ende-Verschlüsselung bis ins Call-Signaling und Echtzeit-Spiele. KI-nativ entwickelt, ohne Datenhunger
Juni 2026
PROJEKT
Schnack —
Privater Messenger
Schnack —
Open Source Server
TECHNOLOGIEN
Herausforderung
Messenger gehören zu den anspruchsvollsten Anwendungskategorien überhaupt: Echtzeit-Kommunikation, Kryptografie, Audio-/Video-Telefonie, Push-Benachrichtigungen, Medienverarbeitung und Offline-Fähigkeit müssen über mehrere Plattformen hinweg nahtlos zusammenspielen. Genau deshalb wollte ich einen bauen — als privates Produkt, als technische Gesamtübung und als weiteres Testfeld für meinen KI-nativen Entwicklungsprozess.
Der Anspruch: ein Messenger, der sich bewusst gegen den Zeitgeist stellt: kein Feed, keine Kanäle, kein „Entdecken“, kein Tracking, keine Werbung. Nur die Menschen, die man wirklich kennt. Und dabei kompromisslos privat.
Daraus ergaben sich vier harte Anforderungen:
- Ende-zu-Ende-Verschlüsselung für alles: Nachrichten, Fotos, Videos, Dateien, Standorte, bis hin zum Anruf-Signaling; der Server darf zu keinem Zeitpunkt Inhalte lesen können (server-blind)
- Native Apps für iOS und Android mit identischem Krypto-Wire-Format, dazu ein Web-Companion: drei Clients, ein Protokoll
- Echtzeit als Grundprinzip: Zustellung, Lesebestätigungen, Tipp-Indikatoren, Anrufe und sogar Spiele wie Backgammon laufen live über dieselbe Infrastruktur
- Offenheit statt Lock-in: Der Server soll sich selbst hosten lassen, und die Apps müssen mit beliebigen Instanzen umgehen können
Lösung
Ich habe Schnack als vollständigen Stack entworfen und gebaut: Server, iOS-App, Android-App und Web-Messenger. Vier Leitgedanken bestimmten die Architektur.
Verschlüsselung ohne Kompromisse
Jede Nachricht wird pro Empfänger einzeln verschlüsselt: Curve25519-Schlüsselaustausch, AES-GCM-256 für die Inhalte, HKDF für die Schlüsselableitung. Die privaten Schlüssel verlassen nie das Gerät, auf iOS gesichert im Keychain, auf Android im KeyStore. Medien werden vor dem Upload mit einem eigenen Media-Key verschlüsselt, der seinerseits nur verschlüsselt übertragen wird. Für den Gerätewechsel gibt es ein passwortgeschütztes Schlüssel-Backup, mit dem sich die komplette Historie auf einem neuen Gerät entschlüsseln lässt.
Nativ statt Cross-Platform
Die iOS-App ist in SwiftUI mit SwiftData-Persistenz gebaut, die Android-App in Kotlin mit Jetpack Compose, beide gegen dasselbe API- und Krypto-Wire-Format. Das kostet zunächst doppelte Arbeit, zahlt sich aber in Bediengefühl, Performance und Plattform-Integration (APNs/FCM-Push, Photo-Picker, Keychain/KeyStore) aus. Ein Web-Messenger mit QR-Code-Login ergänzt die Apps als Companion am Desktop.
Echtzeit als Fundament
Der Server, ein Next.js Custom Server mit Socket.io, Prisma und PostgreSQL, behandelt alles als Echtzeit-Ereignis: Nachrichten, Online-Presence, Tipp-Indikatoren, Lesebestätigungen. Auf derselben Grundlage laufen komplette Spiele direkt im Chat, Zug für Zug live zwischen den Geräten: Backgammon mit Doubling-Cube, Othello und Schnake, ein Snake-Score-Duell. Und dieselbe Socket-Schicht trägt auch das Signaling der Anrufe.
Anrufe und Standort — verschlüsselt bis zum Rand
Auch die Features, bei denen andere Messenger gern Kompromisse machen, halten das Server-blind-Prinzip: 1:1-Audio- und Video-Anrufe laufen über WebRTC (Peer-to-Peer wo möglich, sonst TURN-Relay), und selbst das Signaling, also SDP und ICE-Kandidaten, wird pro Empfänger Ende-zu-Ende verschlüsselt; der Server vermittelt nur, ohne je Klartext zu sehen. Beim Standort-Sharing gilt dasselbe: Ob einmaliger Snapshot oder Live-Standort für 15 Minuten bis 8 Stunden, die Koordinaten erreichen den Server nie unverschlüsselt. Beides läuft auf allen drei Clients: iOS, Android und im Web-Messenger, die Kartenvorschau rendert jeweils nativ (MapKit, osmdroid, Leaflet).
Umsetzung
KI-nativ, mit klassischem Sicherheitsnetz
Der Entwicklungsprozess selbst ist Teil des Projekts: Schnack wird KI-nativ gebaut. Geplant wird mit maximalem Reasoning, umgesetzt mit Claude Code im Ultracode-Modus: Fable orchestriert und zerlegt die Aufgabe, Opus-Agenten implementieren, Fable nimmt ab, und es laufen so viele Audit-Runden, bis es sitzt. Damit das trägt, ist das Sicherheitsnetz bewusst klassisch: Unit- und End-to-End-Tests plus unzählige Mutationstests prüfen nicht nur, ob der Code funktioniert, sondern ob die Tests ihn wirklich festhalten. Das Ergebnis: In 99 % der Fälle geht eine Änderung ohne manuellen Eingriff durch die automatisierte Deploy-Pipeline. Der Mensch entscheidet über das Was, das Sicherheitsnetz über das Ob.
Open Source mit sauberer Ableitung
Am Ende dieser Pipeline steht der Release, und der ist Open Source: Der Server ist source-available (Elastic License 2.0), ohne dass der öffentliche Code zur Pflege-Last wird. Das Public-Repo ist die einzige Quelle für den Server-Code; mein privates Betriebs-Repo, mit dem ich selbst einen produktiven Chat-Server betreibe, ist ein Klon davon plus rein additivem Overlay (Website, Impressum, Betriebs-Spezifika). Keine geteilte Datei divergiert, Upstream-Merges bleiben konfliktfrei, und die Öffentlichkeit bekommt exakt den Code, der bei mir in Produktion läuft. Ein Git-Tag stößt GitHub Actions an, die auf nativen Runnern ein Multi-Arch-Docker-Image (amd64 + arm64) bauen und in die GitHub Container Registry veröffentlichen. Selbst-Hosten ist ein Einzeiler: Ein interaktives Install-Skript fragt Domain und Admin ab, generiert Secrets und startet den Stack aus App, PostgreSQL und Caddy mit Auto-HTTPS; Migrationen und Admin-Bootstrap laufen automatisch. Und selbst gehostete Instanzen sind keine Nutzer zweiter Klasse: Die Apps unterstützen Multi-Server und Multi-Account: mehrere Server-Profile, per Tap umschaltbar, mit strikt getrennter Session, Krypto-Identität und Cache pro Server.
Ergebnisse
Schnack ist veröffentlicht und im Einsatz, als vollständiges Produkt vom Protokoll über den offenen Server bis zum App-Store-Release:
- Live im Apple App Store, Android als direkter APK-Download, Web-Messenger als Desktop-Companion
- Durchgängige Ende-zu-Ende-Verschlüsselung für Nachrichten, Medien und Dateien: Der Server bleibt blind
- 1:1-Audio- und Video-Anrufe über WebRTC auf allen drei Clients, inklusive Ende-zu-Ende-verschlüsseltem Signaling
- Standort-Sharing statisch und live (15 Min bis 8 h): Koordinaten bleiben Ende-zu-Ende verschlüsselt
- Drei Echtzeit-Spiele im Chat: Backgammon, Othello und Schnake
- Gruppen, Multi-Image-Nachrichten, Video-Messages, Link-Previews, Lesebestätigungen und Tipp-Indikatoren
- Source-available Server (ELv2) mit Tag-getriggerten Multi-Arch-Builds (GitHub Actions → GHCR) und One-Liner-Installer für Self-Hosting
- Multi-Server & Multi-Account in den Apps: pro Server eigene Session, Krypto-Identität und Cache, Umschalten per Tap
- Kein Tracking, keine Werbung, kein Datenhandel, komplett kostenlos
Das Projekt zeigt die ganze Spannbreite: Protokoll-Design und Kryptografie, zwei native Apps plus Web-Client, Realtime-Backend mit WebRTC-Telefonie, Push-Infrastruktur, ein source-available Release-Prozess mit automatisierter Pipeline, dazu ein KI-nativer Entwicklungsworkflow, der diese Breite als Ein-Personen-Projekt überhaupt erst möglich macht.