Flotilla feature matrix

Flotilla's feature set, grouped by the areas of the pasted outline and expanded with capabilities found in the codebase. Status values:

Notes point at the route or module that carries the feature; US-nnn refers to the story catalog in e2e/USER_STORIES.md.

Chat

Feature Status Notes
Spaces (relay-based communities) Implemented /spaces, app/rooms.ts; NIP-29 relay-as-group. US-009–017
Rooms / channels Implemented /spaces/[relay]/[h], RoomChat.svelte. US-018–028
Direct messages Implemented /chat, app/chats.ts; NIP-17/44/59. US-029–036, US-108–109
Group DMs Implemented ChatStart.svelte, ChatMembers.svelte. US-030
Voice & video calls Implemented app/call.ts, app/callEngine.ts, LiveKit; relay must advertise the endpoint. Calls and video are out of e2e scope
Push notifications Implemented app/push/, settings/alerts; web, FCM/APNs and Android fallback. US-086, US-120
Threads Implemented /spaces/[relay]/threads, ThreadBoard.svelte. US-042–045
Media / file sharing Implemented app/uploads.ts, Blossom servers; upload, drag/paste, native clipboard. US-057, US-062
Room create / edit / delete Implemented RoomCreate.svelte, RoomEdit.svelte. US-020
Room join / leave and member lists Implemented RoomMembers.svelte; private-room access requests in RoomAccess.svelte. US-019, US-021, US-022
Replies, edits and deletes Implemented ComposeParent.svelte; up-arrow edit, US-023, US-024, US-035
Reactions Implemented EventReactButtons.svelte, app/reactions.ts. US-025, US-040
Pinned messages Implemented RoomPinnedMessages.svelte, app/roomPins.ts. US-026
Forward / share to another room Implemented Share.svelte, ShareEvent.svelte. US-028, US-106
Drafts Implemented app/drafts.ts. US-058
Read out loud and dictation Implemented SpeechBanner.svelte, app/dictation.ts, app/speech.ts; OpenRouter key. US-119
Room and space search Implemented RoomSearch.svelte, SpaceSearch.svelte. US-017, US-027
Mentions, room references, hashtags, custom emoji Implemented @welshman/editor suggestions, ContentMention.svelte, ContentTopic.svelte, ContentEmoji.svelte. US-056, US-066
Link previews and rich embeds Implemented ContentLinkBlock.svelte, NoteContent*.svelte; notes, articles, threads, images, video, invoices/Cashu. US-062–067
Send delay, per-relay delivery status, cancel and retry Implemented ThunkStatus.svelte, app/thunks.ts. US-068–073
Zaps on messages Implemented Zap.svelte, app/lightning.ts; NIP-57. US-115
Unread indicators and mute Implemented app/notifications.ts. US-103, US-104, US-110–114

Events

Feature Status Notes
Calendar events Implemented /spaces/[relay]/calendar, CalendarEvent*.svelte; NIP-52. US-046–047
Monthly calendar view Implemented CalendarMonth.svelte, CalendarWeek.svelte, CalendarAgenda.svelte; month, week and agenda views, remembered per user
RSVPs Implemented CalendarRsvp.svelte, app/calendar.ts; NIP-52 going, maybe and can't go. No ticketing or paid attendance
Event detail with location and host Implemented CalendarEventMeta.svelte, CalendarEventHeader.svelte. US-047
Comments and reactions on events Implemented EventComments.svelte, EventReactButtons.svelte. US-052

Community content

Feature Status Notes
Long-form articles Implemented /spaces/[relay]/articles, app/articles.ts; NIP-23. US-037–039, US-041
Polls Implemented /spaces/[relay]/polls, PollCreate.svelte; NIP-88, single- and multiple-choice. US-048–049
Funding goals Implemented /spaces/[relay]/goals, GoalCreate.svelte; zap goal kind. US-050, US-052
Comments and reactions across content Implemented CommentTree.svelte, EventActivity.svelte. US-039, US-052
Create-from-room composer menu Implemented ComposeMenu.svelte; publishes a kind-9 quote for interoperability. US-041, US-055

Moderation

Feature Status Notes
Ban / unban Implemented SpaceMemberMenu.svelte, SpaceMembersBanned.svelte; NIP-86 banpubkey / unbanpubkey. US-095
Member management Implemented /spaces/[relay]/directory, SpaceMembersAdd.svelte, RoomMembersAdd.svelte. US-022, US-095
Invite codes / access control Implemented app/access.ts, SpaceInvite.svelte, RoomInvite.svelte; relay claims and scoped codes. US-010–011, US-094
Role management and badges Implemented /spaces/[relay]/directory, app/roles.ts, SpaceRoles.svelte; NIP-29 member tags. US-093
Granular RBAC / role permissions Implemented Roles are assigned in /spaces/[relay]/directory; a relay extension enforces the per-role permissions
Reports and content moderation Implemented Report*.svelte, app/actionItems.ts; author deletes, member reports, admin removes. US-096
Action-items queue Implemented SpaceActionItems.svelte, app/actionItems.ts. US-097
Relay policy warnings Implemented RelaySummary.svelte, app/policies.ts; auth-required, payment-required, proof-of-work. US-012, US-015
Unsigned-relay trust prompt Implemented SpaceTrustRelay.svelte. US-012
Mute rooms and spaces Implemented app/settings.ts, RoomDetail.svelte. US-104
Feature / pin content as admin Implemented EditFeaturedContent.svelte, app/featured.ts. US-092

Member tools

Feature Status Notes
Member profiles Implemented /people/[npub], ProfilePage.svelte. US-075, US-080, US-081
Edit own profile Implemented ProfileEditForm.svelte, settings/profile. US-078
Searchable directory Implemented /spaces/[relay]/directory; search by name or role. US-093
People search Implemented Search.svelte, app/social.ts. US-074
Classifieds Implemented /spaces/[relay]/classifieds, ClassifiedForm.svelte; NIP-99, sold status. US-051
Content library / pinboards Implemented /spaces/[relay]/library, Pinboard*.svelte, app/pinboards.ts. US-053–054
Follow / unfollow Implemented ProfileMenu.svelte, follow list. US-076
Web of trust Implemented ProfileTrust.svelte, app/social.ts. US-077
Mute accounts Implemented settings/content. US-082
Profile notes feed Implemented ProfilePageNotes.svelte. US-079
Profile sharing, QR and raw info Implemented ProfileQrCode.svelte, ProfileInfo.svelte, InfoNostr.svelte. US-081
Statuses Implemented ProfileStatus.svelte; NIP-38. US-075

White-labeling

Feature Status Notes
Branded web app Implemented VITE_PLATFORM_* env, app/env.ts; name, url, logo, accent, description, terms, privacy
Branded Android app Implemented android/, @capacitor/assets, pnpm release
Branded iOS app Implemented ios/, Capacitor build
Branded desktop app Implemented electron/, scripts/package-desktop.mjs; pnpm run package:desktop:linux / :windows / :macos
PWA / installable web app Implemented @vite-pwa/sveltekit, manifest.webmanifest, service-worker.js
Push to your own app Implemented VITE_PUSH_SERVER / VITE_PUSH_BRIDGE, app/push/
Custom domain Implemented CustomDomainModal.svelte, app/hosting.ts; CNAME verification for hosted relays. US-101
Platform mode (own relays only) Implemented VITE_PLATFORM_RELAYS; disables browse/add/select and makes the platform relay home
Configurable defaults Implemented VITE_DEFAULT_SPACES, VITE_DEFAULT_RELAYS, VITE_DEFAULT_MESSAGING_RELAYS, VITE_DEFAULT_BLOSSOM_SERVERS
Native share sheet and deep links Implemented @capacitor/share, Android share intent, nostr: / https: dispatch. US-106, US-107

Self-hosting

Feature Status Notes
Self-hostable Implemented Dockerfile, server.js; docker run or static build copied to any host
Open source Implemented MIT license (LICENSE)
Static-host deployment Implemented pnpm run build output can be copied to any static host (README.md)
Managed hosting platform Implemented app/hosting.ts, settings/hosting, /spaces/[relay]/admin; create, plan, domain, pause and billing. US-098–102
Relay health checks Implemented HomeHealthChecks.svelte, app/healthChecks.ts. US-116

SSO

Feature Status Notes
Email / OTP sign-in Implemented LogInEmail.svelte, LogInOTP.svelte, app/pomade.ts; custodial Pomade flow, enabled when VITE_POMADE_SIGNERS is set. Out of e2e scope
Browser extension sign-in Implemented NIP-07, LogInSelect.svelte. US-004
Remote signer / bunker Implemented NIP-46, LogInBunker.svelte, BunkerConnect.svelte, QR flow. US-005
Native Android signer Implemented NIP-55; out of e2e scope
Relay authentication Implemented NIP-42, app/access.ts, settings/privacy
Key backup on signup Implemented KeyDownload.svelte; plain nsec or password-encrypted ncryptsec. US-002
Data export Implemented hosting/DataTransferModal.svelte, app/hosting.ts; a space's events download as JSONL and re-import into another relay
Account deletion Implemented ProfileDelete.svelte, settings/profile; broadcasts account deletion. US-008

Portable identity & history

Feature Status Notes
Customer holds keys By design Identity is a self-sovereign nsec/npub; no account lives with the operator
Customer holds source and data By design Self-hostable relay plus user-chosen relays; events are portable Nostr events
One-click export / import Not implemented No bundled export or re-import of a user's data
Multi-device sync Implemented NIP-78 app-data sync, app/sync.ts; read state and settings follow the account
Local-first history Implemented IndexedDB persistence, app/storage.ts, lib/indexeddb.ts; read conversations survive relay loss. US-109
Account portability across clients By design The same keys and relay events work in any NIP-29 client
Key recovery Implemented KeyRecoveryRequest.svelte, KeyRecoveryConfirm.svelte for custodial (Pomade) accounts

Home & discovery

Feature Status Notes
Home dashboard / inbox Implemented /home, HomeInbox.svelte, app/inbox.ts. US-105, US-116
Cross-space activity summary Implemented HomeActivity.svelte, app/feeds.ts. US-116
Network feed of follows Implemented HomeNetwork.svelte, app/feeds.ts. US-117
Space browse, search and reorder Implemented /spaces, PrimaryNavSpaces.svelte, drag reordering. US-009
Join by invite / direct link Implemented SpaceJoin.svelte, /join, invite parsing in app/access.ts. US-010, US-011
Link and bech32 resolution Implemented [bech32] route, app/routes.ts; npub/nevent/note. US-107

Lightning & payments

Feature Status Notes
Zap messages and profiles Implemented Zap.svelte, app/lightning.ts; NIP-57
Wallet connection (NWC / WebLN) Implemented settings/wallet, app/lightning.ts; NIP-47. US-115
Lightning address and zap presets Implemented settings/wallet, app/lightning.ts. US-091
Hosting billing and invoices Implemented PaymentDialog.svelte, PaymentSetup.svelte, app/hosting.ts; Lightning and card. US-102