Skip to content

User Management

Profiles

User profiles are managed through ProfileService and CoreProfileService:

  • Display name and username (unique handle)
  • Avatar and banner images (stored in Supabase Storage)
  • Bio with markdown support
  • Custom fields for links and metadata
  • Privacy settings per profile

Profile creation happens after registration via NewProfile view (onboarding flow). The useProfile store handles profile state with actions for fetch, update, and creation.

Profile Data Access

userDataService is the single source of truth for cached user lookups:

  • 5-minute TTL cache to reduce database queries
  • Request deduplication prevents concurrent identical fetches
  • Context-based subscriptions (by server, channel, or DM)
  • Presence and status tracking integrated

Components should never query profiles directly from the database -- always go through userDataService.

Presence & Status

Online Status

Users have four presence states:

StatusDescription
OnlineActively using the app
AwayIdle or manually set
Do Not DisturbSuppresses notifications
InvisibleAppears offline to others

Presence is synced via Supabase Realtime and SessionHeartbeat keeps sessions alive with periodic pings. Mobile detection adjusts behavior automatically.

Custom Status

Users can set a custom status message with:

  • Free-text status message
  • Optional emoji
  • Expiration time (auto-clear after duration)

User Settings

The settings panel (UserSettings view) provides:

SectionComponentFeatures
AccountUserAccountSettingsEmail, password, 2FA, account deletion
PrivacyPrivacySettingsProfile visibility, DM permissions, activity tracking
AppearanceAppearanceSettingsTheme, colors, layout preferences
NotificationsNotificationSettingsDesktop, sound, DND schedule
Voice & VideoVoiceVideoSettingsDevice selection, quality settings
LanguageLanguageSettingsInterface language (i18n)
KeybindsKeybindSettingsKeyboard shortcuts
Audio ThemesAudioThemeSettingsSound theme selection
BotsUserBotsManagementPersonal bot management
AdvancedAdvancedSettingsDebug options, data export

Muting and Blocking

User Mutes

The user_mutes table uses boolean flags:

  • hide_notifications — Suppress notifications from the user
  • Muted users' messages are still received but can be hidden in the UI

User Blocks

Blocking a user through CoreInteractionService:

  • Prevents the blocked user from seeing your content
  • Hides their content from your feeds
  • Blocks DMs and interactions
  • Federated across instances via ActivityPub Block activities

User Profile View

UserProfileView displays a full profile page with:

  • Banner and avatar
  • Follow/unfollow button with follower counts
  • User's posts feed
  • Mute/block/report actions via context menu
  • Federation info for remote users (instance, handle)
  • Content tabbing (posts, replies, media)

Notifications

The notification system tracks:

  • Mentions in messages and posts
  • Follow requests and new followers
  • Reactions on your content
  • Replies to your posts
  • Server invites
  • DM messages

Notification preferences are granular with per-category toggles for desktop notifications, sounds, and DND scheduling. See NotificationSettings and ActivityPubNotificationSettings components.


Note: This page is protected from auto-generation. Edit the content in docs-source/guide/features/users.md and run npm run docs:generate-guide to update.

Released under the AGPL-3.0 License.