{"id":50349571,"url":"https://github.com/phash/auffi","last_synced_at":"2026-05-29T20:30:48.065Z","repository":{"id":357211682,"uuid":"1235919509","full_name":"phash/auffi","owner":"phash","description":"Sicheres, einfaches Screen-Sharing mit Fernsteuerung. Open Source, P2P-verschlüsselt, DSGVO-konform.","archived":false,"fork":false,"pushed_at":"2026-05-29T14:41:34.000Z","size":2755,"stargazers_count":0,"open_issues_count":15,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-29T16:09:55.861Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/phash.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-11T19:30:33.000Z","updated_at":"2026-05-29T14:42:58.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/phash/auffi","commit_stats":null,"previous_names":["phash/screenie","phash/auffi"],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/phash/auffi","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phash%2Fauffi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phash%2Fauffi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phash%2Fauffi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phash%2Fauffi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/phash","download_url":"https://codeload.github.com/phash/auffi/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phash%2Fauffi/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33670211,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-29T02:00:06.066Z","response_time":107,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-05-29T20:30:47.966Z","updated_at":"2026-05-29T20:30:48.047Z","avatar_url":"https://github.com/phash.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Auffi\n\n**Sicheres, einfaches Screen-Sharing mit Fernsteuerung — wie TeamViewer, nur offen.**\n\n[![Latest Release](https://img.shields.io/github/v/release/phash/auffi?label=release)](https://github.com/phash/auffi/releases/latest)\n[![Build Status](https://img.shields.io/badge/build-passing-brightgreen)](https://github.com/phash/auffi/actions)\n[![License: AGPL-3.0](https://img.shields.io/badge/License-AGPL--3.0-blue.svg)](LICENSE)\n[![Tests](https://img.shields.io/badge/tests-passing-brightgreen)](https://github.com/phash/auffi)\n[![Changelog](https://img.shields.io/badge/changelog-keep--a--changelog-orange)](CHANGELOG.md)\n\n---\n\nAuffi ermöglicht spontane Bildschirmhilfe: Der Hilfesuchende startet eine kleine Desktop-App,\nerhält einen 9-stelligen Code und gibt ihn dem Helfer — der öffnet einfach den Browser. Keine\nAccounts, keine Cloud-Daten, keine Tracker. Die eigentliche Verbindung läuft Peer-to-Peer und ist\nEnde-zu-Ende DTLS-SRTP-verschlüsselt. Das Backend sieht zu keinem Zeitpunkt Bildschirminhalte,\nMausbewegungen oder Dateien — nur den initialen Handshake.\n\n---\n\n## Features\n\n- 🖥️ Bildschirm teilen via WebRTC (Ende-zu-Ende verschlüsselt, DTLS-SRTP)\n- 🖱️ Maus + Tastatur fernsteuern (vom Viewer aus, mit aktiver Genehmigung)\n- 📁 Bidirektionaler Dateitransfer (Drag-and-Drop, WebRTC DataChannel)\n- 🔢 9-stelliger Code + aktive Bestätigung — anonym, ohne Konto\n- 🛡️ DSGVO-konform — keine IPs im Klartext gespeichert, keine Tracker, kein Logging von Inhalten\n- 🌐 STUN + TURN für restriktive Netzwerke (hinter CGNAT, Firewalls)\n- 🪪 Optionale Account-Modus mit Geräte-Pairing (Unattended Access) — argon2id-Passwörter, geräte-spezifische Tokens, lokales + serverseitiges Lockout\n\n---\n\n## Quickstart\n\n### Als Helfer (Viewer)\n\nBrowser öffnen und zur Referenzinstanz navigieren:\n\n```\nhttps://auffi.app\n```\n\nCode eingeben, den der Hilfesuchende mitteilt — fertig.\n\n### Als Hilfesuchender (Sharer)\n\nAuffi-App herunterladen und starten:\n\n```bash\n# Schnell-Installation (Linux):\ncurl -fsSL https://raw.githubusercontent.com/phash/auffi/main/scripts/install-linux.sh | bash\n```\n\nOder manuell aus den [Releases](https://github.com/phash/auffi/releases) herunterladen —\ndetaillierte Anleitung inkl. Arch-PKGBUILD: [INSTALL.md](INSTALL.md).\nWas sich pro Version geändert hat, steht im [CHANGELOG](CHANGELOG.md).\n\n---\n\n## Architektur\n\n```\n┌─────────────────┐                       ┌──────────────────┐\n│  Sharer (Tauri) │◄────────P2P──────────►│ Viewer (Browser) │\n│  Rust + WebView │  WebRTC (DTLS-SRTP)   │ Vanilla TS       │\n└────────┬────────┘                       └────────┬─────────┘\n         │           Signaling (WSS)               │\n         └─────────────┐         ┌─────────────────┘\n                       ▼         ▼\n                ┌─────────────────────┐\n                │  Backend (Node.js)  │   ─┐\n                │  - Code-Generator   │    │  Auf IONOS VPS\n                │  - WebSocket-Relay  │    │  (MRD-Cluster)\n                │  - REST /api/*      │    │\n                └──────────┬──────────┘    │\n                           ▲               │\n                           │ HTTPS         │\n                ┌──────────┴──────────┐    │\n                │ Dashboard (Browser) │    │  Konto + Geräteliste\n                │ Vanilla TS, SPA     │    │  (nur Unattended-Modus)\n                └─────────────────────┘    │\n                                           │\n                ┌─────────────────────┐    │\n                │ coturn (TURN/STUN)  │   ─┘\n                │ Fallback wenn P2P   │\n                │ via NAT scheitert   │\n                └─────────────────────┘\n```\n\n**Kernprinzip:** Das Backend sieht niemals Bildschirminhalte oder Input-Events.\nEs vermittelt nur den initialen Handshake (WebSocket-Signaling). Bildschirm, Maus/Tastatur\nund Dateien laufen P2P oder bei NAT-Problemen über den TURN-Server — in beiden Fällen\nEnde-zu-Ende DTLS-verschlüsselt.\n\n---\n\n## Installation auf dem Linux-Desktop\n\nVollständige Anleitung inkl. Arch-PKGBUILD, Debian/Ubuntu `.deb`,\nFedora `.rpm` und distroübergreifender AppImage: **[INSTALL.md](INSTALL.md)**\n\nSchnell-Installation:\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/phash/auffi/main/scripts/install-linux.sh | bash\n```\n\nFür `.deb`, `.rpm` und AppImage: siehe [Releases](https://github.com/phash/auffi/releases).\n\n---\n\n## Selbst hosten\n\nDeployment-Dokumentation: **[ops/README.md](ops/README.md)**\n\nDie Referenzinstanz `auffi.app` läuft auf einem IONOS VPS via Docker Compose\n(Backend + coturn + Caddy als Reverse Proxy). Für eigene Instanzen:\n\n```bash\ncp .env.example .env\n# .env anpassen (TURN_SECRET, DOMAIN, etc.)\ndocker compose -f docker-compose.prod.yml up -d\n```\n\n---\n\n## Entwicklung\n\n```bash\ngit clone https://github.com/phash/auffi.git\ncd auffi\ncp .env.example .env\n```\n\n### Backend\n\n```bash\ndocker compose up backend\n```\n\n### Viewer (Browser-App)\n\n```bash\ncd viewer\nnpm ci\nnpm run dev\n# → http://localhost:5173\n```\n\n### Sharer (Tauri-Desktop-App)\n\n```bash\ncd sharer\nnpm ci\nnpm run tauri:dev\n```\n\nVoraussetzungen für Tauri: Rust, `webkit2gtk-4.1`, `libvpx`. Auf Arch:\n\n```bash\nsudo pacman -S webkit2gtk-4.1 libvpx base-devel\n```\n\n### Dashboard (Konto + Geräteliste, nur Unattended-Modus)\n\n```bash\ncd dashboard\nnpm ci\nnpm run dev\n# → http://localhost:5174\n```\n\nDetaillierte Pläne und Spezifikationen: [`docs/superpowers/`](docs/superpowers/)\n\n---\n\n## Tech-Stack\n\n| Komponente | Technologie |\n|---|---|\n| Backend | Node.js 22 / Fastify 5 / better-sqlite3 |\n| Viewer | Vite 8 + TypeScript (Vanilla) |\n| Dashboard | Vite 8 + TypeScript (Vanilla SPA) |\n| Sharer | Tauri 2 / Rust 1.84+ |\n| WebRTC | webrtc-rs (libwebrtc) |\n| Auth | argon2id (m=64 MiB, t=3, p=1), `__Host-` session cookies |\n| Wayland-Capture | GStreamer pipewiresrc (Plasma 6 kompatibel) |\n| TURN/STUN | coturn |\n| Reverse Proxy | Caddy |\n| Deployment | Docker Compose |\n\n---\n\n## Sicherheit \u0026 DSGVO\n\n- **Verschlüsselung:** WebRTC-Streams sind DTLS-SRTP-verschlüsselt (P2P oder via TURN)\n- **Keine Inhalte im Backend:** Signaling-Server sieht nur SDP/ICE-Handshake, nie Pixel oder Events\n- **IPs pseudonymisiert:** Nur das Prefix (`84.xxx`) wird im Bestätigungsdialog angezeigt — niemals die vollständige IP gespeichert\n- **Kein Tracking:** Keine externen Cookies, kein Analytics, keine Drittanbieter-CDNs\n- **Code-TTL:** 9-stellige Codes verfallen nach 10 Minuten oder nach 5 Fehlversuchen\n- **Aktive Bestätigung:** Sharer muss jede Verbindung explizit annehmen\n- **Account-Sicherheit (Unattended-Modus):** argon2id für Passwörter, `__Host-`-Cookies (HttpOnly + Secure + SameSite=Strict), Per-IP-Rate-Limit auf WSS-Bearer-Auth (Sec H-1), Per-Account-Lockout (5 Fehlversuche / 15 min, Sec H-3), TLS-pinned Session-Tokens (nur sha256 in DB, Sec C-1)\n\nVollständige Spezifikation: [`docs/superpowers/specs/`](docs/superpowers/specs/) — Audit: [`docs/security-review-2026-05.md`](docs/security-review-2026-05.md)\n\n---\n\n## Status\n\n**Fertig (MVP):**\n- ✅ WebSocket-Signaling-Backend (Node.js/Fastify, Dockerized)\n- ✅ WebRTC Peer-to-Peer Verbindung (Video-Stream + DataChannel)\n- ✅ Bildschirm-Sharing (X11 + Wayland via GStreamer/pipewiresrc, multi-Monitor)\n- ✅ Remote-Maus + Tastatur (Viewer steuert Sharer)\n- ✅ Bidirektionaler Dateitransfer (Drag-and-Drop)\n- ✅ 9-stelliger Code + Bestätigungsdialog\n- ✅ TURN-Fallback via coturn\n- ✅ Production Deployment auf IONOS VPS\n- ✅ Unattended Access mit Konto + Geräte-Pairing (Dashboard, argon2id, Sessions)\n- ✅ Sicherheits-Audit + Postmortems (`docs/security-review-2026-05.md`)\n- ✅ Smoke-Tests + manuelle Testprotokolle\n- ✅ Backend 298 Tests, Sharer 178 Tests, Dashboard 85 Tests, Viewer 146 Tests\n\n**Geplant / In Arbeit:**\n- ❌ Audio-Streaming\n- ❌ macOS + Windows getestet/zertifiziert (Windows-Port-Plan: `docs/superpowers/plans/2026-05-11-windows-sharer-port.md`)\n- ❌ CI/CD Pipeline (GitHub Actions)\n- ❌ Automatisierte End-to-End Tests (Playwright-Suite für Viewer existiert; Sharer fehlt noch)\n- ❌ Windows-Installer / macOS-DMG\n\nDies ist ein junges Open-Source-Projekt. Feedback und Beiträge sind willkommen.\n\n---\n\n## Lizenz\n\nAGPL-3.0-only — siehe [LICENSE](LICENSE).\n\nCopyleft mit Netzwerk-Klausel: Wer Auffi forked **und** als gehosteten\nService anbietet, muss seine Modifikationen ebenfalls unter AGPL-3.0\nveröffentlichen. Eigennutzung, Selbst-Hosting im LAN und Forks für\nprivate Zwecke sind unbeschränkt erlaubt.\n\n---\n\n## Mitwirken\n\nIssues und Pull Requests sind herzlich willkommen. Bitte lies [`CLAUDE.md`](CLAUDE.md)\nfür Code-Konventionen (Clean Code, TDD, ≥70% Coverage, Docker-Standards).\n\nFür größere Features: Issue öffnen und kurz die Idee beschreiben, bevor du Code schreibst.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphash%2Fauffi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fphash%2Fauffi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphash%2Fauffi/lists"}