Skip to content

Firefly overview

Firefly is Lupyd’s end-to-end encrypted messaging stack. It provides:

  • 1:1 messaging using the Signal protocol (libsignal) with prekey bundles.
  • Group messaging using Messaging Layer Security (MLS, RFC 9420) with Lupyd-specific roles, channels, and permissions.
  • Multi-device support — up to five devices per user, each with its own keys.
  • Real-time delivery over WebSocket or WebTransport (HTTP/3).
  • Voice/video calls and group meetings, encrypted backups, pinned messages, and shareable group history.
Repository Contents
firefly Client libraries and the protocol schema: firefly-protos (protobuf), firefly-core (MLS identity, rules, extensions), firefly-client (high-level async Rust client), and firefly-client-node / firefly-client-js (WebAssembly + TypeScript bindings).
firefly-mls The Firefly server (firefly-server): HTTP API, WebSocket and WebTransport endpoints, PostgreSQL storage.
Protocols HTTP/1.1, HTTP/2, WebSocket, WebTransport (HTTP/3 over QUIC)
Encoding Protobuf, package firefly (crates/protos/protobufs/message.proto)
Authentication Auth0 Bearer JWT, plus a Firefly-signed device credential
MLS ciphersuite P256_AES128 (MLS_128_DHKEMP256_AES128GCM_SHA256_P256)
Default port 39205 (TCP for HTTP/WebSocket; UDP for WebTransport)
Request timeout 30 seconds by default