flit

Ephemeral, end-to-end encrypted file transfer between your own devices. AirDrop for people who self-host.

Sub-site/waste#flit β†’ Repoexplewd/flit β†’

Case study: Case study: flit

Highlights

  • WebRTC data channels: file bytes never touch the server, even in transit
  • Android Web Share Target β€” 'Share β†’ flit' works from any app's OS share sheet
  • Reuses waste-go's YAW/2.1 signaling and Ed25519 identity β€” same anchor, same crypto, no new server
  • Known devices tab: tap Connect to reconnect without re-scanning β€” deterministic room from sorted peer IDs
  • Multi-file send with per-file accept/reject and auto-download on receipt
  • In-app QR scanner via native BarcodeDetector API β€” no library, camera overlay with cancel
  • Go CLI for headless homelab boxes β€” renders a QR in the terminal using Unicode block characters
  • Daemon mode: persistent receiver that auto-accepts files from trusted peers, saves to a configured directory
  • hello binds Ed25519 identity to the DTLS session β€” impostor can't pass even if they discover the room name
  • SHA-256 verified on receipt β€” file is confirmed intact before it's saved
  • TURN relay fallback for CGNAT/mobile, still fully E2E encrypted

A deliberately small tool for a specific annoyance: getting a file from one device to another, right now, without anything landing on a server’s disk.

Shares an anchor with waste-go β€” same WebSocket signaling, same Ed25519 identity model, same forward-secret handshake (YAW/2.1). flit strips out everything else (chat, mesh, presence) and replaces it with QR-based device pairing and binary file transfer over WebRTC DataChannels.

Runs as a PWA (primary β€” browser + Android share sheet) and a Go CLI (for headless machines). Neither stores files. Nothing persists except a local keyring of trusted device identities β€” remembered peers reconnect with one tap, no QR required.