Database Overview

Firmiana uses an embedded H2 database with Micronaut Data JDBC for data access.

Entity Summary

User & Auth

EntityTablePurpose
UserusersUser accounts
UserPassworduser_passwordsPassword hashes
UserAccessTokenuser_access_tokensBearer tokens
UserRefreshTokenuser_refresh_tokensRefresh tokens
UserDeviceuser_devicesDevice registration
UserUiaaDatauser_uiaa_dataUIAA session data
UserDatauser_dataUser preferences

Room & Events

EntityTablePurpose
RoomroomsRoom metadata
RoomMemberroom_userMembership state
RoomAliasroom_aliasesRoom alias mappings
EventeventAll room events
EventRelationsevent_relationsEvent relationships
EventPushSummaryevent_push_summaryPush notification summaries
ForwardExtremityforward_extremityEvent DAG tips
RoomStateGrouproom_state_groupState resolution groups

E2EE

EntityTablePurpose
DeviceInboxdevice_inboxTo-device messages
DeviceListStreamdevice_list_streamDevice list change notifications

Media

EntityTablePurpose
MediaMetadatamedia_metadataUpload metadata
MediaAuthTokenmedia_auth_tokenUpload auth tokens
MediaThumbnailsmedia_thumbnailsThumbnail cache
MediaUrlPreviewmedia_url_previewURL preview cache

Push & Notifications

EntityTablePurpose
UserPushRuleuser_push_rulesPush notification rules
UserPusheruser_pushersPush gateway config
NotificationnotificationPending notifications

Presence & Typing

EntityTablePurpose
TypingUsertyping_userActive typing indicators
PresenceStreampresence_streamOnline/offline status
ReceiptreceiptRead receipts
RoomReceiptroom_receiptPer-room read positions

Federation

EntityTablePurpose
ServerSigningKeyserver_signing_keyFederation signing keys
AppserviceRegistrationappservice_registrationAppservice configs

Relationships

User ──1:N──> UserAccessToken
User ──1:N──> UserDevice
User ──1:N──> UserPassword
Room ──1:N──> RoomMember ──N:1──> User
Room ──1:N──> Event
Event ──1:N──> EventRelations
Room ──1:N──> RoomAlias

Indexes

Key indexes for performance (added via Flyway migrations V21–V22):

  • event(room_id, stream_ordering) — Event timeline queries
  • room_user(room_id, user_id) — Membership lookups
  • device_inbox(created_at) — To-device message cleanup
  • notification(created_at) — Notification queries
  • event_search(content) — Full-text search (B-tree fallback)