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.
Components
Section titled “Components”| 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. |
At a glance
Section titled “At a glance”| 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 |
Authentication and devicesTokens, device registration, and signed credentials.
Real-time connectionWebSocket and WebTransport framing, sync, and keepalive.
End-to-end encryptionMLS groups, Signal sessions, roles, and permissions.
HTTP API referenceEvery REST endpoint.
Client SDKRust and JavaScript libraries.
Self-hostingRun and configure the Firefly server.