dhtpdud/YANGPA
dhtpdud/YANGPA has 20 GitHub stars and 3 forks. GitHot measured +8 stars in 24 hours. Last checked 2026-11-15 06:42 UTC. Last push 2026-11-13.
What you can do
- Conversation - One-to-one spaces and crews share one structure, so they scale as they are. Text, forum and call channels, Markdown, reactions, custom emoji, attachments, link previews, roles and permissions, invite links.
- Ephemeral - Channels whose content never leaves RAM, join and leave modes, lifetimes in seconds. Attachments too exist only in participants' memory.
- Storage and serving - Seeder (giving to others) and peer (fetching) settings let you choose data types, channel exclusions, bandwidth and priority. Received attachments are cleared oldest-unused first within a disk limit (2 GB by default), and you pin the ones to keep.
- Network - Bridges (Snowflake, obfs4, manual entry), a trust switch you set per person and per crew, P2P-only channels, your own STUN server list and crew STUN servers, and the optional Tor file circuits.
Gemessener Sternzuwachs
- in 24h
- +8
- in 7 days
- Verlauf wird gesammelt
- in 15 days
- Verlauf wird gesammelt
- in 1 month
- Verlauf wird gesammelt
Nettoänderungen in überlappenden Zeiträumen, keine Tagessummen. Fehlende Messwerte bleiben leer. Sterne zeigen Interesse, nicht Qualität.
Über uns
Tor-based post-quantum E2EE P2P Messenger (Chat, Voice chat, Screen share, File sharing, Group)
SicherheitREADME.de.md
Original한국어 · English · 日本語 · 简体中文 · 繁體中文 · Español · Français · Deutsch · Português (Brasil) · Русский · Italiano · Bahasa Indonesia · Tiếng Việt · Türkçe · हिन्दी
Ein Ende-zu-Ende-verschlüsselter Messenger über Tor, ohne Server und ohne Telefonnummer
Der auf deinem Gerät erzeugte Schlüssel ist dein Konto. Tor verbirgt die IP, und Freunde und Crews betreiben
ihren Discord-artigen Raum mit Kanälen, Anrufen und Bildschirmübertragung ohne Betreiber.
Warum YANGPA · Screenshots · Sicherheitsdesign · Was YANGPA nicht schützt · Erste Schritte · Dokumentation
Warum YANGPA
- Keine Registrierung. Weder Telefonnummer noch E-Mail-Adresse werden verlangt. Das Konto ist nur ein Schlüssel, der auf deinem Gerät erzeugt wird. Es gibt keinen Betreiber, der ein Verzeichnis führt, und keinen Kontoserver. Selbst Bootstrap, Relay und Seeder sind gewöhnliche Knoten, die jeder starten kann.
- Deine IP liegt hinter Tor. Die App hat keine Einstellung, um das eingebaute Arti (Tor) auszuschalten (nur Headless-Knoten lassen sich mit
--directstarten), und wenn Tor nicht verfügbar ist, wechselt sie nicht auf Direktverbindungen, sondern bleibt beim Start stehen. Die Ausnahmen stehen vollständig in der Tabelle unten. - Klassische und Post-Quanten-Kryptografie zusammen. Signaturen: Ed25519 + FN-DSA-512, Schlüsselaustausch: X-Wing (X25519 + ML-KEM-768), Transport: X25519MLKEM768. Die Zusammenstellung berücksichtigt Angriffe, die heute Verkehr mitschneiden, um ihn später zu entschlüsseln.
- Es gibt Gespräche, die nichts hinterlassen. Inhalt und Schlüssel flüchtiger Kanäle liegen nur im RAM, und auch im Code sind Speicherpfad und Typ getrennt.
- Du bestimmst den Umfang deiner Daten. Pro Datenart und Kanal wählst du, was gespeichert, an andere weitergegeben und abgerufen wird.
- Per Skript steuerbar. App, CLI, lokale API und MCP sind alle Clients desselben Kern-Daemons (
yangpad). - Grenzen werden nicht verschwiegen. Was nicht geschützt werden kann, steht in der Dokumentation und in der App. Ein Beispiel ist „Was sich nicht verhindern lässt“ im Screenshot des flüchtigen Kanals unten.
Screenshots
Die Bilder zeigen die Beispieldaten der Entwicklung. Ein Klick auf ein Bild vergrößert es.
![]() Flüchtiger Kanal Inhalt und Anhänge liegen nur im Speicher und werden nach Ablauf der Lebensdauer gelöscht. Was garantiert ist und was sich nicht verhindern lässt, zeigt die Oberfläche zusammen an. |
![]() Tor und Brücken Tor lässt sich in der App nicht ausschalten. In blockierten Netzen führt der Weg über Snowflake- oder obfs4-Brücken. Auch die Funktionen, die wegen Tor entfallen, werden offen genannt. |
![]() Sicherheitsnummer und Vertrauensschalter Du vergleichst die Sicherheitsnummer selbst, um Man-in-the-Middle-Angriffe abzuwehren, und verbindest dich nur mit Personen direkt, denen du deine IP zeigen darfst. |
![]() Nur-P2P-Kanal Für Kanäle, die schnelle Dateiübertragung und Anrufe brauchen, verbinden sich nur Geräte direkt, die der Warnung zugestimmt und beigetreten sind. Vor dem Beitritt bleibt der Inhalt verschlossen. |
![]() Neues Gerät freigeben Ein neues Gerät kommt nur über den Einmal-QR-Code eines bereits genutzten Geräts hinzu, und zugelassen wird es von der Person, die die sechsstelligen Nummern beider Seiten verglichen hat. |
![]() Anonymer Kanal Autorinnen und Autoren erscheinen unter einem Pseudonym pro Kanal. Das verbirgt sie nur in der Oberfläche der App (Tabelle unten). |
![]() Tor-Anruf Nur der Ton läuft ohne WebRTC über Tor. Dafür kommt das Gesagte etwa 0,5 bis 1,5 Sekunden verzögert an, und die IP bleibt verborgen. |
![]() Bildschirmübertragung In Nur-P2P-Kanälen und mit gegenseitig vertrauten Personen läuft sie über WebRTC. Jeder Frame wird Ende-zu-Ende verschlüsselt. |
![]() Bei KI entscheidet der Mensch Destruktive Aktionen, die ein Automatisierungs-Token anfragt, werden erst nach Freigabe durch einen Menschen ausgeführt. Jeder authentifizierte Aufruf landet im Audit-Protokoll. |
![]() Seeder-Einstellungen Du bestimmst die weiterzugebenden Datenarten, die Bandbreite und die Zahl gleichzeitiger Übertragungen. Die Geschwindigkeit lässt sich auch pro Person, Crew und Kanal begrenzen. |
![]() Forum und helles Design Es gibt Forumkanäle, die mit Beiträgen und Tags ordnen, und du wählst zwischen hellem und dunklem Design. |
![]() Android Sie nutzt denselben Oberflächencode wie der Desktop, und der Daemon läuft in der App. |
Funktionen
| Bereich | Inhalt |
|---|---|
| Unterhaltung | Direktnachrichten-Spaces und Crews haben dieselbe Struktur und lassen sich so beliebig erweitern. Text-, Forum- und Anrufkanäle, Markdown, Reaktionen, eigene Emojis, Anhänge, Linkvorschau, Rollen und Berechtigungen, Einladungslinks. |
| Flüchtig | Kanäle, deren Inhalt den RAM nicht verlässt, mit Beitritts- und Austrittsmodus und sekundengenauer Lebensdauer. Auch Anhänge liegen nur im Speicher der Teilnehmenden. |
| Anrufe | Tor-Anruf (Ton über Opus oder über Mimi, einen neuronalen Codec mit etwa 1,1 kbps; Bild nur als Notlösung in niedriger Qualität nach Bestätigung einer Warnung). Nur-P2P-Kanäle und gegenseitig vertraute Personen werden über ein WebRTC-Mesh verbunden, die Bildschirmübertragung läuft mit bis zu 120 fps. Große Anrufe relayt ein direkt verbundener Seeder, ohne die Frames zu entschlüsseln (SFU). |
| Speichern und Bereitstellen | Über die Einstellungen für Seeder (an andere weitergeben) und Peer (abrufen) wählst du Datenarten, Kanalausschlüsse, Bandbreite und Priorität. Empfangene Anhänge werden innerhalb des Plattenlimits (Standard 2 GB) beginnend mit den am längsten ungenutzten geleert; was bleiben soll, wird angeheftet. |
| Netzwerk | Brücken (Snowflake, obfs4, manuelle Eingabe), der Vertrauensschalter pro Person und Crew, Nur-P2P-Kanäle, die eigene STUN-Serverliste und die STUN-Server der Crew, der optionale Tor-Dateicircuit. |
| Geräte | Hinzufügen nur per Einmal-QR-Code und Freigabe mit sechsstelliger Nummer. Ein widerrufenes Gerät löscht bei der nächsten Verbindung selbst seine lokalen Daten. Es gibt keine Wiederherstellungsphrase, deshalb ist das Konto weg, wenn man alle Geräte verliert. |
| Betrieb | Blockieren (nur auf diesem Gerät, die Gegenseite erfährt es nicht), versiegelte Meldungen, die nur das Moderationsteam öffnet, und Banns, die alle Mitgliedsknoten mit demselben Ergebnis anwenden. |
| Automatisierung | CLI yangpa, lokales JSON-RPC, MCP-Server yangpa-mcp. Was die App kann, geht auch per CLI. |
| Selbstbetrieb | Headless-Seeder, bei dem auf einem NAS oder VPS nur der Daemon läuft (Beispiele für Docker und systemd), und reine Archivknoten, die nur Chiffretext ohne Schlüssel aufbewahren. |
| Sprachen | Die Oberfläche gibt es in 15 Sprachen. Die Übersetzungen stammen von einer KI und wurden noch nicht von Muttersprachlern geprüft. |
Einige Funktionen wie der Bibliothek-Tab und der Inhaltsbetrachter sind nur für Unterstützer (Lizenz).
Anonymität: Vor wem was verborgen bleibt
„Anonym“ bedeutet auf jeder Ebene etwas anderes. Hier steht getrennt, was YANGPA tut und was nicht.
| Ebene | Was geschieht | Was trotzdem sichtbar bleibt |
|---|---|---|
| Registrierung | Das Konto entsteht ohne Telefonnummer und E-Mail aus einem auf dem Gerät erzeugten Schlüssel. | Der von dir gewählte Name und das Profil. Es gibt nur eine Identität, daher können Crews erkennen, dass du in mehreren Crews dieselbe Person bist. |
| Netzwerk | Tor verbirgt die IP. Auch Freunde, Crew-Mitglieder und Seeder sehen sie nicht. | Netzbeobachter sehen, dass du Tor nutzt, sowie Verkehrsmenge und Zeitpunkt. Ausnahmen stehen in der Tabelle unten. |
| In der Crew | Anonyme Kanäle zeigen Autorinnen und Autoren mit einem pro Kanal festgelegten Pseudonym. | Verborgen wird nur in der Oberfläche der App. Der Signierende bleibt in den Daten erhalten, sodass Mitglieder mit einem modifizierten Client die Autorin oder den Autor erkennen können. |
Tor verbirgt dich nicht vor Freunden. Freunde und Mitglieder kennen deine Identität innerhalb des verschlüsselten Kanals.
Sicherheitsdesign
flowchart LR
subgraph device["Mein Gerät"]
clients["App · CLI · MCP"] -->|"Lokale API (Token)"| daemon["Kern-Daemon yangpad"]
daemon --> db[("SQLCipher")]
daemon --> ram[["Flüchtiger RAM-Speicher"]]
end
daemon -->|"Tor (Arti)"| peers["Freunde · Crew-Geräte · Seeder"]
daemon -.->|"Direktverbindung (Ausnahme)"| direct["Nur-P2P-Kanäle · vertraute Personen · meine Geräte"]
| Bereich | Verfahren |
|---|---|
| Signatur | Hybrid aus Ed25519 + FN-DSA-512. Beide müssen stimmen. Jedes Ereignis wird mit dem Geräteschlüssel signiert, die Geräteliste mit dem Identitätsschlüssel. |
| Schlüsselaustausch und Versiegelung | X-Wing (X25519 + ML-KEM-768) → HKDF-SHA256 → XChaCha20-Poly1305 |
| Nachrichten und Anhänge | XChaCha20-Poly1305. Der Text wird mit OpenZL komprimiert und dann mit Padmé aufgefüllt (höchstens 12 % Zuschlag), sodass statt der genauen Länge nur ein Größenbereich sichtbar ist. |
| Gruppenschlüssel | Eigene Schlüsselgruppe. Bis 256 Geräte wird direkt versiegelt, darüber kommt ein binärer LKH-Baum zum Einsatz. Der Schlüsselplan nutzt BLAKE3 derive_key. |
| Schlüsselwechsel | Sofort beim Entfernen eines Mitglieds, der Schlüssel für den Verlauf alle 24 Stunden, die gesamte Crew wöchentlich. Ist in den Crew-Einstellungen die „Strikte Schlüsselrotation“ eingeschaltet, wird erst gesendet, wenn die Aktualisierung da ist. |
| Anrufe | AES-256-GCM pro Frame (WebRTC Encoded Transform). Bei jeder Änderung der Teilnehmenden wird ein neuer Schlüssel erzeugt, mit X-Wing versiegelt und verteilt. |
| Transport | libp2p TLS 1.3, Schlüsselaustausch X25519MLKEM768. Tor-Swarm und Relay-Circuits nutzen ausschließlich TLS. |
| Netzwerk | Eingebautes Arti, Onion-Dienst v3, Vanguards (ausgehende Circuits lite, Onion-Dienst-Circuits full). |
| Speicherung | SQLCipher, der DB-Schlüssel liegt im Schlüsselspeicher des Betriebssystems. Jede Nachricht wird zusätzlich mit einem zufälligen Speicherschlüssel versiegelt, den man beim Löschen vernichtet (kryptografisches Löschen). |
| Flüchtiger Speicher | Sitzungsschlüssel liegen in gesperrtem Speicher (mlock, VirtualLock) und werden beim Löschen mit Nullen überschrieben. Der Inhalt bleibt auch im RAM Chiffretext und wird nur zur Anzeige entschlüsselt. |
| Lokale API | Geöffnet wird nur ein Unix-Socket (0600) oder eine Named Pipe. Es wird kein TCP geöffnet, und jedes Token ist auf Geltungsbereich und Crew beschränkt. |
| Protokoll | Auf keiner Log-Stufe werden Nachrichteninhalte, Schlüssel oder Token geschrieben. |
Drei Designentscheidungen, die Fachleute sich zuerst ansehen sollten:
- Statt MLS wird eine eigene Schlüsselgruppe verwendet. Bei einer Crew mit 45.000 Geräten wuchsen die MLS-Welcome- und Remove-Commits auf 50 bis 61 MB, deshalb wurde gewechselt. Sie ist kein Standard und wurde nicht extern begutachtet. Das Design steht in docs/protocol.md, die Messung in docs/performance.md.
- Es gibt keine Forward Secrecy auf Nachrichtenebene. Schlüssel wechseln in den Abständen der obigen Tabelle, nicht pro Nachricht. Auch 1:1-Unterhaltungen haben dieselbe Struktur. Wird ein Schlüssel bekannt, lassen sich die Nachrichten desselben Schlüsselzeitraums öffnen.
- Tor-Circuits sind noch klassisch verschlüsselt. Arti 0.47 hat keinen Post-Quanten-Circuit-Handshake. Die darin laufende libp2p-Verbindung und der Ende-zu-Ende-Inhalt sind durch den hybriden Schlüsselaustausch geschützt, doch wer Verbindungen auf der Guard-Seite sammelt und später entschlüsselt, kann erfahren, wann welche Onion-Adresse angesprochen wurde.
Wohin die App nach außen kommuniziert
Die App enthält keinen Code für Nutzungsstatistiken, Fehlerberichte oder automatische Update-Prüfungen. Die folgende Liste umfasst alles, womit die App nach außen kommuniziert. Die
CSP der App-Oberfläche (WebView) öffnet connect-src nur nach innen in die App. Die eigene Kommunikation des Betriebssystems und der
WebView-Engine (z. B. WebView2) kontrolliert die App nicht.
| Wann | Wohin | Was sichtbar wird |
|---|---|---|
| Immer | Tor-Guard oder Brücke | Meine IP und dass ich Tor nutze |
| Wenn Tor nicht erreichbar ist (automatisch, solange die Brückeneinstellung nie geändert wurde) | Snowflake-Broker und Freiwilligen-Proxy | Meine IP |
| Bei zwei oder mehr Geräten (automatisch, außer im Offline-Modus) | Öffentliche STUN-Server (standardmäßig Google und Cloudflare), meine anderen Geräte, Router (UPnP) | Meine öffentliche IP |
| Beim Beitritt zu einem Nur-P2P-Kanal | Gemeinsam beigetretene Geräte, STUN-Server | Meine IP (nach Bestätigung der Warnung) |
| Bei eingeschaltetem Vertrauensschalter | Die vertraute Person, STUN-Server | Meine IP (nach Bestätigung der Warnung). Vertraut nur eine Seite, ist nur die IP der vertrauenden Seite sichtbar |
| Wenn ich die STUN-Server einer Crew nutzen will (Rollenberechtigung und meine Einstellung müssen beide an sein) | Die STUN-Server dieser Crew | Meine öffentliche IP |
| Beim Senden einer Nachricht mit Link | Die jeweilige Website | IP des Tor-Exit-Knotens. Die empfangende Person ruft nichts ab. In flüchtigen Kanälen standardmäßig aus. |
| Beim Prüfen der Unterstützung über GitHub | github.com | IP des Tor-Exit-Knotens und mein GitHub-Konto |
| Beim Prüfen der Unterstützung über Patreon | patreon.com | Meine echte IP und mein Patreon-Konto. Patreon sperrt Tor-Exits, daher wird direkt verbunden. |
Die Prüfung der Unterstützung läuft erst, nachdem ich sie per Schaltfläche eingeschaltet habe, und wird danach einmal täglich wiederholt. Die YANGPA-Identität wird nicht übermittelt.
Was YANGPA nicht schützt
Die vollständige Liste und das Angreifermodell stehen in SECURITY.md.
- Daten, die auf das Gerät der Gegenseite gelangt sind. Löschen, Lebensdauer und Flüchtigkeit werden nur von ehrlichen Clients eingehalten. Screenshots, Kameraaufnahmen und modifizierte Clients lassen sich nicht verhindern.
- Metadaten. Ereignis-Header sind zur Signaturprüfung und Synchronisierung nicht verschlüsselt, daher wissen Mitglieder und Seeder, die ein Ereignis erhalten, wer wann in welchen Kanal geschrieben hat.
- Ein kompromittiertes eigenes Gerät. Schadsoftware, die unter demselben Betriebssystembenutzer läuft, kann den Daemon manipulieren. Eine Funktion, die den DB-Schlüssel zusätzlich mit einem Passwort umhüllt, gibt es noch nicht.
- Die Grenzen von Tor selbst. Zeitkorrelationsanalyse durch Beobachter, die das gesamte Netz sehen, wird nicht verhindert.
- Pfade außerhalb des Schutzbereichs flüchtiger Kanäle. Ruhezustandsdatei, Absturzabbilder, Zwischenablageverlauf, Bildschirmaufnahme unter Linux.
- Die IP vor direkt verbundenen Gegenstellen verbergen. In Nur-P2P-Kanälen und gegenüber vertrauten Personen ist deine IP unverändert sichtbar.
- Echtheit der Release-Pakete. Es gibt keine Codesignatur, und
SHA256SUMS.txtbestätigt nur, dass der Download nicht beschädigt ist. Wenn die Echtheit wichtig ist, baue aus dem Quellcode. - Geräteverlust. Wenn du alle Geräte verlierst, lässt sich das Konto nicht wiederherstellen.
Selbst nachprüfen
Das lässt sich nachprüfen, statt es zu glauben.
| Was dich interessiert | So prüfst du es |
|---|---|
| Bleibt flüchtiger Inhalt auf Platte oder im Protokoll? | Sende eine Markierungszeichenfolge in einen flüchtigen Kanal und führe danach yangpa diag leakcheck <Markierung> aus |
| Treten Pakete aus Tor aus? | sudo scripts/tor-leak-check.sh (Linux, echtes Tor-Netz). In einem Netzwerk-Namespace werden Pakete mitgeschnitten, und es schlägt fehl, sobald auch nur ein Paket an etwas anderes als ein Tor-Relay geht. Nur im letzten Schritt, der meine Geräte verbindet, werden STUN, UPnP und meine öffentliche Adresse gesondert gezählt. |
| Wie ist der aktuelle Netzwerkstatus? | yangpa net status |
| Entspricht das Protokoll der Dokumentation? | docs/protocol.md sowie crates/yangpa-crypto und crates/yangpa-sync |
| Was weicht vom Konzeptpapier ab? | docs/decisions.md hält alle Entscheidungen samt Begründung fest. |
Schwachstellen melde bitte vertraulich statt in einem öffentlichen Issue.
Erste Schritte
Unterstützte Plattformen
Windows x86_64, macOS (Apple Silicon und Intel gemeinsam), Linux x86_64 und ARM64. Für Android ARM64 installieren Sie die APK aus dem Release (YANGPA_…_arm64.apk, docs/android.md).
Desktop-App
Lade aus den Releases das Paket für dein Betriebssystem herunter.
Betriebssystem Datei Windows …_x64-setup.exe(empfohlen) oder…_x64_en-US.msimacOS …_universal.dmgLinux x86_64 …_amd64.deboder…_amd64.AppImageLinux ARM64 …_arm64.deboder…_aarch64.AppImage(glibc 2.35 oder neuer)Prüfe mit der
SHA256SUMS.txtdesselben Releases.sha256sum -c SHA256SUMS.txt --ignore-missingDa die Pakete nicht signiert sind, erlaubst du unter macOS das Öffnen in „Systemeinstellungen → Datenschutz & Sicherheit“, und unter Windows wählst du in SmartScreen „Weitere Informationen → Trotzdem ausführen“.
Öffne die App und erzeuge mit Neu starten eine Identität. Weitere Geräte fügst du unter Einstellungen › Geräte mit Neues Gerät verbinden hinzu.
Erstelle einen Kontaktlink und sende ihn, oder füge einen erhaltenen Link ein, um eine Unterhaltung zu beginnen.
Den Daemon getrennt von der App betreiben oder beenden
Die App bringt den Daemon (yangpad) mit, startet ihn bei Bedarf und beendet den angehängten Daemon, wenn die App endet (währenddessen pausieren auch Seeding und Benachrichtigungen).
Wenn der Daemon unabhängig von der App weiterlaufen soll, starte die App mit YANGPA_NO_SPAWN=1. Auch wenn die App zwangsbeendet wird oder abstürzt, beendet sich ein von der App gestarteter Daemon selbst, sobald er
das Ende der App bemerkt. Ein Daemon, den die App nicht gestartet hat (per CLI gestartet), kann weiterlaufen und weiter seeden. So beendest du einen solchen Daemon:
- Mit dem Kommandozeilenwerkzeug:
yangpa shutdown. Das Desktop-Paket enthält keine CLI, lade daher das Paketyangpa-cli-…weiter unten herunter. - Ohne CLI beendest du den Prozess
yangpadüber das Betriebssystem. Unter Windowsyangpad.exeim Task-Manager unter „Details“, unter macOSyangpadin der Aktivitätsanzeige, unter Linuxpkill -x yangpad(reguläres Beendigungssignal). Beim nächsten Öffnen der App wird er wieder gestartet. - Die Installationsdateien beenden vor Update oder Deinstallation zuerst den Daemon dieser Installation: Windows
-setup.exeund.msibeendenyangpad.exeim Installationsordner, Linux.debbeendet das geänderte oder gelöschte/usr/bin/yangpad. Eine geöffnete App starte neu (sie wird nicht erneut gestartet). Unter Windows kann ein von einem anderen Benutzerkonto gestarteter Daemon nicht beendet werden und wird womöglich erst nach einem Neustart ersetzt.
Kommandozeile (CLI)
Im yangpa-cli-<Version>-<Ziel>.tar.gz des Releases (unter Windows .zip) liegen yangpad, yangpa und yangpa-mcp.
Lege die drei Dateien in dasselbe Verzeichnis (oder in den PATH).
yangpa daemon & # Daemon starten (entfällt, wenn die App ihn schon gestartet hat). Argumente gehen unverändert an yangpad
yangpa identity create --name Ich # Identität erzeugen
yangpa status
yangpa friend link create --single-use --expires 24h # Kontaktlink, den du der Gegenseite schickst
yangpa friend add 'yangpa://friend/…' # Mit einem erhaltenen Link sofort temporärer Kontakt und 1:1-Space
yangpa friend propose Partnername # Zum Freund machen (Freunde, sobald die Gegenseite es auch tut)
yangpa space list # Namen der 1:1-Spaces und Crews
yangpa channel list --crew <Name>
yangpa message send --crew <Name> -c <Kanal> "Hallo"
yangpa watch # Neue Nachrichten und Statusänderungen in Echtzeit
CLI-Verbindungsart und Argumente
- Die CLI verbindet sich mit der lokalen API des Daemons (Unix-Socket 0600, unter Windows Named Pipe). Bei demselben Benutzer wird automatisch das Eigentümer-Token
im Datenpfad verwendet. Einen Daemon an anderer Stelle gibst du mit
--endpoint(YANGPA_ENDPOINT) an, ein anderes Token mitYANGPA_TOKEN. - Die Argumente jedes Befehls zeigt
yangpa <Befehl> --help, und mit--jsonwird das Ergebnis unverändert als JSON ausgegeben. - Werte, die als Name übergeben werden (
--crew "Spielgruppe",-c Ankündigungen, Rollen- und Mitgliedsnamen), werden zur Laufzeit in IDs umgewandelt. Bei mehreren gleichen Namen wirst du aufgefordert, die ID zu verwenden.
Headless-Seeder (NAS, VPS)
Ein Knoten, der den Crew-Verlauf dauerhaft bereitstellt. Einzelheiten zu Einstellung, Fernverwaltung und Betrieb über Tor in docs/headless.md.
Mit Docker oder systemd starten
# Docker (im Repository-Stammverzeichnis): Daten nur im Volume, Nicht-Root-Benutzer, fester Port 47810 (TCP und UDP)
docker compose -f deploy/docker-compose.yml up -d --build
alias yangpa='docker exec -it yangpa-seeder yangpa'
# Oder systemd: deploy/systemd/yangpad.service (mit Isolationseinstellungen)
yangpa identity create --name "Spielgruppen-Seeder"
yangpa invite join 'yangpa://invite/…'
yangpa seed set --all-channels --types text,image,video,file,emoji,history_bundle --upload-limit 5MB/s --prefetch on
yangpa seed coverage --crew "Spielgruppe"
yangpa blob cache limit 200GB --min-free 10GB # Plattenlimit für empfangene Anhänge (Standard 2 GB)
Der Standardbereich des Seeders ist „nur Kanäle, die man selbst geöffnet hat“. Ein Headless-Knoten muss daher mit --all-channels erweitert werden, um etwas bereitzustellen, und Anhänge aus nie geöffneten Kanälen
werden nur mit --prefetch on vorab geladen. Das Seeder-Paket übernimmt zuerst die Rolle des SFU-Hosts für große Anrufe (YANGPA_SFU_HOST=prefer, Medien-UDP
47811). Ein paketgemäß direkt verbundener Seeder kann die Onion-Adressen von über Tor laufenden Mitgliedern nicht zuerst anwählen, und in der App gibt es keine Einstellung, um die Seeder-Adresse
einzutragen. Damit er App-Nutzer erreicht, starte den Seeder daher über Tor (docs/headless.md). Soll er nur Chiffretext aufbewahren, ohne einer Crew
beizutreten, starte ihn mit --archive (docs/headless.md). Ein Headless-Seeder ist ein Crew-Mitglied mit Schlüssel, und auch ein Archivknoten sieht Metadaten
wie die, wer wann wie viel geschrieben hat.
Was heute nicht geht
- Die Desktop-App sendet noch kein Kamerabild (nur Sprache und Bildschirmübertragung).
- Das Bild eines Tor-Anrufs ist eine Notlösung in niedriger Qualität (höchstens 1280 px Breite, 2 Bilder pro Sekunde). Eine ordentliche Bildschirmübertragung läuft in Nur-P2P-Anrufkanälen oder mit gegenseitig vertrauten Personen.
- Bildschirmton wird nur in Mesh-Anrufen unter Windows gesendet. SFU- und Tor-Anrufe senden nur das Bild.
- App-Geräte, die über Tor laufen, übernehmen nicht die Rolle des SFU-Hosts.
- Sprache und Bildschirmübertragung unter Linux (WebKitGTK) können instabil sein, und das Ausblenden des Fensters bei der Aufnahme wird nicht unterstützt.
- Automatische Tests mit echtem Tauri-Fenster laufen nur unter Linux. Fenster unter macOS und Windows sowie Signatur und Notarisierung prüft ein Mensch (CONTRIBUTING.md).
KI-Werkzeuge anbinden (MCP)
yangpa-mcp ist ein MCP-Server, der über Standard-Ein-/Ausgabe läuft. KI-Werkzeuge rufen damit Aufgaben wie Kanallisten, Nachrichten lesen und zusammenfassen,
Kanal- und Rollenverwaltung, Einladungen und Seeder-Einstellungen als Tools auf.
Sicherheitsregeln, die der Daemon durchsetzt:
- Destruktive Aktionen wie Rauswerfen, Bannen, Bann aufheben, Meldungen bearbeiten (außer Ablehnen), fremde Nachrichten löschen, Berechtigungen und Rollen ändern, Einladungen erzeugen und Kanäle löschen
werden nicht sofort ausgeführt, sondern in die Bestätigungswarteschlange für Menschen gestellt. Sie laufen erst, wenn du in der App oder mit
yangpa confirm list→yangpa confirm approve <ID>freigibst. - Flüchtige Kanäle sind für KI-Lesezugriff standardmäßig verweigert. Ein Mensch muss sie pro Kanal mit
yangpa channel allow-api-read … onerlauben. - Von Mitgliedern geschriebene Nachrichten werden als „Daten, keine Anweisungen“ verpackt an die KI übergeben (gegen Prompt-Injection).
- Jeder authentifizierte Aufruf landet im Audit-Protokoll (
yangpa audit list), und in der Crew-Mitgliederliste erscheint eine Automatisierungsmarkierung. Verbrauchte Token widerrufe mityangpa token revoke <ID>.
Einrichtung
Automatisierungs-Token ausstellen. Nur der Eigentümer kann das, und das Token wird dabei nur einmal ausgegeben. Vergib Geltungsbereich (
read,write,admin,settings) und Crews nur so weit wie nötig.yangpa-mcplehnt Token ab, die nicht mit--automationausgestellt wurden.yangpa token create --name ai --scopes read,write --crews "Spielgruppe" --automationIn die MCP-Einstellungen des KI-Werkzeugs eintragen. Die meisten Clients verwenden das folgende Format (der Dateiort unterscheidet sich je nach Werkzeug).
{ "mcpServers": { "yangpa": { "command": "yangpa-mcp", "env": { "YANGPA_TOKEN": "<das oben erhaltene Automatisierungs-Token>" } } } }Ist
yangpa-mcpnicht imPATH, trage beicommandden vollständigen Pfad ein. Liegt der Daemon nicht am Standardort, füge unterenv"YANGPA_ENDPOINT": "<Socket-Pfad oder Named Pipe>"hinzu. Die Log-Stufe steht inYANGPA_MCP_LOG(Standardwarn, Ausgabe nur auf Standardfehler).
Die ausführlichen Regeln stehen in Kapitel 10 des Benutzerhandbuchs.
Aus dem Quellcode bauen
Benötigt wird:
- Rust 1.91 oder neuer (Releases werden mit 1.99.1 gebaut), ein C-Compiler,
perlundmake(baut OpenSSL für SQLCipher aus dem Quellcode),cmake(für den Fall, dass aws-lc in manchen Umgebungen gebaut werden muss). Unter Windows die MSVC-Build-Tools und Strawberry Perl. - Für die Desktop-App: Node.js 22, unter Linux
libwebkit2gtk-4.1-dev libayatana-appindicator3-dev librsvg2-dev libxdo-dev.
# Kern: Daemon (yangpad), CLI (yangpa), MCP-Server (yangpa-mcp). Die Desktop-App gehört nicht zum Standard-Build.
cargo build --release --locked
ls target/release/{yangpad,yangpa,yangpa-mcp}
cargo test --workspace
# Desktop-App (Entwicklungsmodus). Die App sucht das yangpad neben der ausführbaren Datei (target/debug) und startet es.
cargo build -p yangpa-daemon
cd apps/desktop
npm ci
npm run tauri dev
App-Tests und Auslieferungspakete bauen
# Desktop-App-Tests: Unit-Tests und E2E, das das oben gebaute yangpad tatsächlich startet (ohne es wird E2E übersprungen).
YANGPA_E2E_REQUIRED=1 npm test -- --run
# Test mit echtem Fenster (Linux): tauri-driver, WebKitWebDriver und eine Anzeige sind nötig; fehlen sie, wird mit Begründung übersprungen.
npm run test:window:build
xvfb-run -a npm run test:window
Um ein Auslieferungspaket selbst zu bauen, baue yangpad, kopiere es nach apps/desktop/src-tauri/binaries/yangpad-<Target-Triple> (unter Windows .exe) und führe danach
npm run tauri build aus. Die Release-Pipeline (.github/workflows/release.yml) folgt genau dieser Reihenfolge.
Unter Windows lassen sich in der Git bash mit scripts/build-windows-release.sh allein die Installationsdateien (NSIS, MSI) und das portable
Zip (target/portable/<Commit>/) bauen, und der Zeitbedarf jedes Schritts wird angezeigt (mit BUNDLES=nsis wird MSI übersprungen). Der Release-Build läuft in C:\yangpa-build (mit DIST_DIR änderbar),
damit in den Binärdateien keine Pfade mit Benutzernamen zurückbleiben. Deshalb liegen auch die Installationsdateien darunter in
target\x86_64-pc-windows-msvc\release\bundle\, und das Skript zeigt am Ende den vollständigen Pfad an.
Die Screenshots der README werden in apps/desktop mit npm run build && npm run screenshot neu erzeugt.
Wie du mitwirken kannst, steht in CONTRIBUTING.md.
Repository-Struktur
| Pfad | Inhalt |
|---|---|
crates/yangpa-core |
Gemeinsame Typen: Bezeichner, Signaturen, Ereignis-DAG, Space-, Kanal- und Berechtigungsmodell, Links, Protokollnachrichten |
crates/yangpa-crypto |
AEAD, versiegelte Boxen, gesperrter Speicher, Ereignis- und Blob-Verschlüsselung, Identitätsschlüssel, Schlüsselgruppe (Schlüsselbaum, Schlüsselplan) |
crates/yangpa-store |
SQLCipher-Speicher, Blob-Speicher, flüchtiger RAM-Speicher (per Typ getrennt) |
crates/yangpa-sync |
DAG, Bereichsfingerabdruck-Vergleich, Zustandsauflösung (Berechtigungen), Seeder- und Peer-Richtlinie, Dateischwarm-Scheduler |
crates/yangpa-net |
libp2p (QUIC, TCP, Kademlia, GossipSub, Relay, DCUtR, AutoNAT, mDNS), Tor-Swarm auf Arti-Basis |
crates/yangpa-sfu |
SFU-Engine für Anrufe (str0m, ohne Ein-/Ausgabe): leitet Frames weiter, ohne sie zu entschlüsseln, wählt Simulcast-Schichten |
crates/yangpa-rpc |
Lokales JSON-RPC 2.0: Framing, Typen, Client, Server |
crates/yangpa-daemon |
Kern-Daemon yangpad |
crates/yangpa-cli |
CLI yangpa |
crates/yangpa-mcp |
MCP-Server yangpa-mcp für die KI-Anbindung |
crates/yangpa-bench |
Leistungs-Benchmark-Aufgaben und Regressionsprüfung der Befehlsanzahl yangpa-bench |
scripts |
Skripte für die Leckprüfung im echten Tor-Netz (Paketmitschnitt) und die Leistungsregressionsprüfung |
apps/desktop |
Desktop- und Android-App (Tauri 2 + React + TypeScript) |
deploy/ |
Beispiele für Headless-Seeder (docker-compose, systemd) |
docs/ |
Konzeptpapier und Designdokumente |
Dokumentation
Die folgenden Dokumente gibt es nur auf Koreanisch.
| Dokument | Inhalt |
|---|---|
| docs/user-guide.md | Benutzerhandbuch: Kontakte und Freunde, Crews, Rollen, Einladungen, flüchtige Kanäle, Seeding, Tor-Verbindung, Nur-P2P-Kanäle und Vertrauensschalter, KI-Sicherheitsregeln |
| SECURITY.md | Bedrohungsmodell, was geschützt wird und was nicht, Schwachstellen melden |
| docs/protocol.md | Kryptografie- und Synchronisierungsprotokoll |
| docs/architecture.md | Crate-Grenzen und öffentliche API |
| docs/api.md | Lokale JSON-RPC-API |
| docs/headless.md | Installation, Fernverwaltung und Betrieb des Headless-Seeders |
| docs/android.md | Aufbau und Build der Android-App |
| docs/decisions.md | Abweichungen vom Konzeptpapier, Standardwerte für offene Entscheidungen |
| docs/performance.md | Leistungsziele, Messergebnisse, Basislinie der Befehlsanzahl und Regressionsprüfung |
| docs/daemon.md | Daemon-Interna: Modulzuständigkeit, Hooks, bekannte Lücken |
| docs/plan.md | Konzeptpapier im Original |
| CONTRIBUTING.md | Aufbau des Arbeitsbereichs, Prüfungen, Dokumentationsregeln, Release-Ablauf |
Lizenz
Verbreitet unter der GNU Affero General Public License v3 oder einer späteren Fassung (LICENSE, SPDX AGPL-3.0-or-later). Wer eine geänderte Fassung anderen über das Netzwerk
nutzbar macht (z. B. einen selbst betriebenen SFU-Server), muss diesen Personen auch den Quellcode geben. third_party und vendor/ffmpeg folgen jeweils ihrer eigenen
Lizenz (die Dateien in diesem Ordner).
- Unterstützerfunktionen (Unterstützungsprüfung, Bibliothek-Tab, Inhaltsbetrachter, Unterstützer-Kennzeichnung): Der Code in
crates/yangpa-daemon/src/supporter/undapps/desktop/src/supporter/steht nicht unter der AGPL, sondern unter der YANGPA-Lizenz für Unterstützerfunktionen. Der Quellcode ist offen, und selbst zu bauen und allein zu nutzen ist erlaubt, aber eine Fassung zu verbreiten, in der die Unterstützungsprüfung entfernt oder umgangen wurde, ist nicht erlaubt. - Zusätzliche Bedingung nach AGPL Abschnitt 7 (NOTICE.md): Eine geänderte Fassung muss im Info-Bildschirm der App den ursprünglichen Urheberrechtshinweis und die Quelladresse sowie den Hinweis „auf Grundlage von YANGPA geänderte Fassung“ beibehalten. Die gebündelte Verbreitung mit dem Unterstützermodul ist erlaubt.
- Marke (TRADEMARK.md): Geänderte Fassungen dürfen den Namen YANGPA und das Flammen-Icon nicht verwenden.
- Beiträge folgen der Zustimmung der Mitwirkenden.











