Skip to content
Fluxer API

User settings Protobuf

A synced preferences snapshot holds the client settings an account shares between its devices. It travels as one base64-encoded fluxer.user.preferences.v1.SyncedPreferences message in the synced_preferences field of the user settings object. Fluxer stores it and interprets no field on this page.

Decode the string before reading any preference, and encode a valid SyncedPreferences message when writing one. Modify current user settings takes the complete snapshot every time.

The empty string in a response means nothing is stored. Sending null clears the stored snapshot, and so does sending the empty string. A stored snapshot reaches the account’s other sessions through User Settings Update.

Fluxer decodes every submitted snapshot and re-encodes it in canonical form before storing it, so a read can return a different string from the one submitted. Known fields are emitted in ascending field number order, and an unrecognised field number is preserved and re-emitted after them. Enums here are open, and an unassigned numeric value survives the round trip. When every known field holds its zero value and no unrecognised field is present, the snapshot encodes to zero bytes and is stored as the empty string.

A submission may use either the standard or the URL-safe base64 alphabet, with or without padding. Fluxer always returns the standard alphabet with padding.

Types here are the declared Protobuf types. A field whose declared type is an enumeration appears as int32, its wire representation, and the Description column links the enumeration.

A field without the optional marker always decodes and holds its Protobuf zero value: false for a bool, 0 for a numeric type, the empty string, an empty repeated field, or an empty map. A field with the optional marker tracks presence and is absent until a value is stored. Every singular message field tracks presence the same way, so a preference group is absent from the snapshot until a client writes to it.

Fluxer applies no bound to any individual field of the message, so every length, range, and enumeration membership below describes what the first-party client writes and reads.

Fluxer reports every entry in the resulting errors array against the path synced_preferences. It checks the encoded string first.

ConditionStatus and codeElement codes
Encoded string longer than 349528 characters400 INVALID_FORM_BODYCONTENT_EXCEEDS_MAX_LENGTH and INVALID_FORMAT
Encoded string outside the base64 alphabet400 INVALID_FORM_BODYINVALID_FORMAT
Decoded message above 262144 bytes400 INVALID_FORM_BODYTOO_LARGE
Bytes that do not decode as SyncedPreferences400 INVALID_FORM_BODYINVALID_FORMAT

An over-length string draws two entries for the one path.

The SyncedPreferences message is the root of the snapshot. Every field is a preference group defined in its own section, except sanitize_urls and save_camera_uploads_to_device, which are bools. Field numbers are allocated in blocks: 1 to 3, 20 to 25, 40 to 45, 60 to 63, 80 to 82, and 100 to 113. Never derive a field number from a field’s position in this table.

FieldTypeDescription
accessibility?accessibility settings objectAccessibility, display, motion, media, and interaction preferences
accessibility_overrides?accessibility overrides objectDirty flags for three media settings, with no live consumer
textual_preview?textual preview settings objectTextual preview wrapping preferences
emoji_picker?emoji picker state objectEmoji picker usage, favourites, and collapsed categories
sticker_picker?sticker picker state objectSticker picker usage, favourites, and collapsed categories
memes_picker?memes picker state objectMeme picker usage, favourites, and collapsed categories
emoji?emoji state objectEmoji skin tone preference
emoji_sticker_layout?emoji and sticker layout settings objectEmoji and sticker picker layout preferences
favorite_gifs?1favourite GIF settings objectSaved favourite GIF entries
favorites?favourites state objectFavourite channel and category layout
recent_mentions?recent mentions settings objectRecent mention inclusion filters
sidebar?sidebar preferences objectDirect message sidebar state
member_list?member list state objectMember list visibility state
unread_channels?unread channels state objectCollapsed unread channel state
mention_frecency?mention frecency state objectPer-guild mention frequency and recency state
nagbars?nagbar dismissals objectDismissed account and guild notice state
dismissed_upsells?dismissed upsells objectDismissed upsell state
guild_nsfw_agreements?guild mature content agreements objectAccepted mature guild, category, and channel notices
whats_new?what’s new state objectLast dismissed update entry
privacy?privacy preferences objectStream preview, activity, and attachment privacy preferences
local_spam_overrides?local user spam overrides objectLocal user spam classification overrides
sanitize_urls2boolWhether tracking parameters are stripped from the URLs in an outgoing message
sound?sound settings objectSound enablement, volume, and per-sound overrides
spellcheck?spellcheck settings objectSpellcheck language, dictionary, and engine preferences
search_engines?search engine settings objectText, reverse image, and translation provider choices
permission_layout?permission layout settings objectPermission editor layout preferences
guild_member_layout?guild member layout settings objectGuild member view layout preference
guild_folders?3guild folder expanded state objectExpanded guild folder identifiers
hidden_guild_buttons?hidden guild list buttons objectHidden guild list button state
keyboard_mode_intro?keyboard mode intro state objectKeyboard mode introduction state
input_monitoring?input monitoring prompts state objectInput monitoring prompt state
voice_prompts?voice prompts state objectSuppressed voice confirmation prompt state
sudo_prompt?sudo prompt state objectLast used sudo verification method
keybinds?keybind settings objectCustom keybinds and transmit mode preferences
chat_input?chat input settings objectChat composer behaviour preferences
save_camera_uploads_to_device?4boolWhether a camera upload is also written to the device

1 The entries live inside the snapshot, and the account memes collection holds none of them

2 The only bare scalar on the root message, so it has no presence and reads as false until a client stores true. It applies to the content a client is about to send, and the first-party client leaves the URLs inside inline code and code blocks unchanged

3 Holds only which folders are expanded. The folder layout itself is guild_folders on the user settings object

4 The only optional scalar on the root message, so it tracks presence. No live surface reads or writes it

The accessibility field has display, motion, message, media, voice, and interaction presentation preferences. Almost every field is optional, so distinguish an absent field from a stored zero value before applying a default.

FieldTypeDescription
saturation_factor?1doubleColour saturation multiplier
always_underline_linksboolWhether links are always underlined
enable_text_selection?boolWhether message text can be selected
show_message_send_button?boolWhether the message composer shows a send button
show_textarea_focus_ring?boolWhether the message composer shows a focus ring
hide_keyboard_hintsboolWhether keyboard shortcut hints are hidden
escape_exits_keyboard_mode?boolWhether Escape exits keyboard navigation mode
sync_reduced_motion_with_system?boolWhether reduced motion follows the operating system preference
reduced_motion_override?2boolExplicit reduced motion preference
message_group_spacing?3doubleSpacing between message groups
message_gutter?3doubleHorizontal message gutter size
font_size?3doubleMessage font size
show_user_avatars_in_compact_mode?boolWhether compact messages show user avatars
mobile_sticker_animation_overridden4boolWhether the mobile sticker animation value applies on a mobile layout
mobile_gif_autoplay_overridden4boolWhether the mobile GIF autoplay value applies on a mobile layout
mobile_animate_emoji_overridden4boolWhether the mobile emoji animation value applies on a mobile layout
mobile_sticker_animation_value?5int32Mobile sticker animation setting
mobile_gif_autoplay_value?boolMobile GIF autoplay value
mobile_animate_emoji_value?boolMobile emoji animation value
auto_send_klipy_gifsboolWhether selecting a GIF sends it immediately
show_gif_button?boolWhether the composer shows the GIF button
show_memes_button?boolWhether the composer shows the memes button
show_stickers_button?boolWhether the composer shows the sticker button
show_emoji_button?boolWhether the composer shows the emoji button
show_media_favorite_button?boolWhether media actions show the favourite button
show_media_download_button?boolWhether media actions show the download button
show_media_delete_button?boolWhether media actions show the delete button
show_suppress_embeds_button?boolWhether message actions show the suppress embeds button
show_gif_indicator?boolWhether GIF media shows a GIF indicator
show_attachment_expiry_indicator?boolWhether attachments show their expiry indicator
use_browser_locale_for_time_format?boolWhether time formatting uses the browser locale
channel_typing_indicator_modeint32Channel typing indicator mode
show_selected_channel_typing_indicator?boolWhether the typing indicator is shown for the selected channel
show_message_action_bar?boolWhether messages show the action bar
show_message_action_bar_quick_reactions?boolWhether the message action bar shows quick reactions
show_message_action_bar_shift_expand?boolWhether holding Shift expands the message action bar
show_message_action_bar_only_more_button?boolWhether the message action bar shows only the more button
show_default_emojis_in_autocomplete?boolWhether autocomplete includes standard emoji
show_custom_emojis_in_autocomplete?boolWhether autocomplete includes custom emoji
show_stickers_in_autocomplete?boolWhether autocomplete includes stickers
show_memes_in_autocomplete?boolWhether autocomplete includes memes
voice_channel_join_requires_double_click?boolWhether joining a voice channel requires a double click
custom_theme_css?6stringCustom theme CSS
show_favorites?boolWhether the favourites section is shown
zoom_level?7doubleApplication zoom level
dm_message_preview_modeint32Direct message preview mode
enable_tts_command?boolWhether the text-to-speech command is enabled
tts_rate?8doubleText-to-speech playback rate
show_faded_unread_on_muted_channels?boolWhether muted channels retain a faded unread indicator
show_context_menu_shortcuts?boolWhether context menus show keyboard shortcuts
confirm_before_starting_calls?boolWhether starting a call requires confirmation
hdr_display_modeint32HDR display mode
preserve_edit_draft?boolWhether cancelling a message edit preserves its draft
stay_interactive_when_unfocused?boolWhether animation and interaction remain active while the application is unfocused
confirm_before_joining_voice_channels?boolWhether joining a voice channel requires confirmation
screen_reader_announce_new_messages?boolWhether a screen reader announces new messages
first_click_pass_through_when_unfocused?boolWhether the first click also activates its control when the application is unfocused
compact_message_group_spacing?3doubleSpacing between compact message groups
scroll_to_bottom_on_message_send?boolWhether sending a message scrolls the channel to the bottom
dim_strikethrough_text?boolWhether strikethrough text is visually dimmed
sequential_file_send?boolWhether multiple selected files are sent one message at a time
mobile_splash_zoom_animation?boolWhether the mobile splash screen plays its zoom animation

1 A multiplier applied to interface colour, where 1 leaves colour unchanged

2 Read only while sync_reduced_motion_with_system is false

3 A length in CSS pixels. The first-party client defaults to 16 for message_group_spacing, message_gutter, and font_size, and to 0 for compact_message_group_spacing

4 The paired mobile_*_value field is read only while this flag is true, and only on a mobile layout. While the flag is false the first-party client falls back to the account-level setting for emoji animation, and to a fixed mobile default for GIF autoplay and sticker animation

5 The same enumeration as animate_stickers on the user settings object. This field is the mobile-local replacement

6 The complete CSS of the account’s synced custom theme, stored inline. A client that has opted out of syncing its theme applies a local one instead and re-emits this value unchanged, so it does not clobber the devices that do sync

7 A multiplier, where 1 is unscaled. The first-party client keeps its zoom level in browser storage and neither reads nor writes this field

8 A multiplier, where 1 is the unmodified speaking rate

Field numbers 42 and 43 are reserved, together with the names attachment_media_dimension_size and embed_media_dimension_size. Neither number can be reused.

ValueNameDescription
0CHANNEL_TYPING_INDICATOR_MODE_UNSPECIFIEDNo explicit mode is selected
1CHANNEL_TYPING_INDICATOR_MODE_AVATARSShow typing users as avatars
2CHANNEL_TYPING_INDICATOR_MODE_INDICATOR_ONLYShow a typing indicator without avatars
3CHANNEL_TYPING_INDICATOR_MODE_HIDDENHide the typing indicator
ValueNameDescription
0DM_MESSAGE_PREVIEW_MODE_UNSPECIFIEDNo explicit mode is selected
1DM_MESSAGE_PREVIEW_MODE_ALLShow previews for all direct messages
2DM_MESSAGE_PREVIEW_MODE_UNREAD_ONLYShow previews only for unread direct messages
3DM_MESSAGE_PREVIEW_MODE_NONEHide direct message previews
ValueNameDescription
0HDR_DISPLAY_MODE_UNSPECIFIEDNo explicit mode is selected
1HDR_DISPLAY_MODE_FULLDisplay HDR media without constraining its range
2HDR_DISPLAY_MODE_STANDARDDisplay HDR media using the standard presentation

The accessibility_overrides field holds three dirty flags that no live surface reads or writes. The settings they name also appear in accessibility settings as a mobile_*_overridden flag with a matching mobile_*_value.

FieldTypeDescription
gif_autoplay_dirtyboolGIF autoplay dirty flag
animate_emoji_dirtyboolEmoji animation dirty flag
animate_stickers_dirtyboolSticker animation dirty flag

The textual_preview field controls line wrapping in the inline preview of a textual attachment.

FieldTypeDescription
wrap_textboolWhether long lines wrap in a textual preview

The usage stat object records picker usage for one expression or one meme. It is the map value of the usage field in every picker state group, so the emoji, sticker, and meme pickers all rank their entries from the same shape.

FieldTypeDescription
countuint32Number of recorded uses
last_used_ms1int64Unix timestamp in milliseconds of the most recent use

1 Milliseconds since 1970-01-01T00:00:00Z

The emoji_picker field records emoji usage, favourites, and collapsed picker categories.

FieldTypeDescription
usage1 2map[string, usage stat object]Usage keyed by emoji usage key
favorite_emoji_ids1array[string]Favourite emoji usage keys in display order
collapsed_category_idsarray[string]Collapsed emoji category identifiers

1 The first-party client writes unicode:<unique name> for a standard emoji and custom:<guild id>:<emoji id> for a custom emoji

2 The first-party client drops a key matching neither form when it reads the snapshot, and applies no such filter to favorite_emoji_ids

The sticker_picker field records sticker usage, favourites, and collapsed picker categories.

FieldTypeDescription
usagemap[string, usage stat object]Usage keyed by sticker identifier
favorite_sticker_idsarray[string]Favourite sticker identifiers in display order
collapsed_category_idsarray[string]Collapsed sticker category identifiers

The memes_picker field records meme usage, favourites, and collapsed picker categories. The memes themselves belong to the account memes collection and are not stored here.

FieldTypeDescription
usagemap[string, usage stat object]Usage keyed by meme identifier
favorite_meme_idsarray[string]Favourite meme identifiers in display order
collapsed_category_idsarray[string]Collapsed meme category identifiers

The emoji field stores the selected emoji skin tone.

FieldTypeDescription
skin_tone1stringSelected Unicode skin tone modifier

1 One of the five Unicode skin tone modifiers, U+1F3FB through U+1F3FF. The empty string selects the default tone

The emoji_sticker_layout field controls how the emoji and sticker pickers lay their contents out.

FieldTypeDescription
emoji_layoutint32Emoji picker layout
sticker_view_modeint32Sticker picker view mode
ValueNameDescription
0EMOJI_PICKER_LAYOUT_UNSPECIFIEDNo explicit layout is selected
1EMOJI_PICKER_LAYOUT_LISTDisplay emoji in a list layout
2EMOJI_PICKER_LAYOUT_GRIDDisplay emoji in a grid layout
ValueNameDescription
0STICKER_PICKER_VIEW_MODE_UNSPECIFIEDNo explicit view mode is selected
1STICKER_PICKER_VIEW_MODE_COZYDisplay stickers with the roomy layout
2STICKER_PICKER_VIEW_MODE_COMPACTDisplay stickers with the compact layout

The favorite_gifs field stores the GIFs the account has favourited, together with the metadata needed to render one without another lookup. Favouriting a GIF writes an entry here or writes a meme to the account memes collection, never both, and save_as_saved_media selects which.

FieldTypeDescription
entries1array[favourite GIF entry object]Favourite GIFs in display order
save_as_saved_media2boolWhether favouriting a GIF saves a meme to the account memes collection
seen_first_time_promptboolWhether the first-time favourite prompt has been shown

1 The first-party client treats url as the identity of an entry and refuses to append a second entry with a url already present

2 While this is true the first-party client leaves entries untouched and favourites through Save meme from message instead

One entry describes one favourited GIF. Its fields mirror the resolved GIF entry object returned by Resolve GIF URLs, so a client can store a resolved entry without reshaping it.

FieldTypeDescription
urlstringSource URL of the GIF
proxy_urlstringMedia Proxy URL for the preview format
width1uint32Width of the preview format in pixels
height1uint32Height of the preview format in pixels
mediamap[string, favourite GIF media format object]Formats keyed by GIF media format name
content_type2stringMedia type of the media addressed by proxy_url
placeholder3stringCompact thumbhash placeholder

1 Zero when the dimensions could not be determined

2 The empty string means the type is unknown, which a client reads as image/gif

3 The empty string means the Media Proxy emitted none

One descriptor addresses one encoding of one favourited GIF. It mirrors the GIF media format object.

FieldTypeDescription
srcstringDirect media URL of this format
proxy_srcstringMedia Proxy URL of this format
widthuint32Width of this format in pixels
heightuint32Height of this format in pixels

The favorites field stores favourite channels, the categories they are grouped into, and the presentation state of that grouping. These categories are private to the favourites view.

FieldTypeDescription
channelsarray[favourite channel object]Favourite channels
categoriesarray[favourite category object]Favourite categories
collapsed_category_idsarray[string]Collapsed favourite category identifiers
hide_muted_channelsboolWhether muted channels are hidden from favourites
mutedboolWhether the favourites collection is muted

One entry marks one channel as a favourite. Channel and guild identifiers here are strings holding the decimal form of a snowflake. Nothing removes an entry when the account loses access to the channel, so an entry can reference a channel the account can no longer resolve.

FieldTypeDescription
channel_idstringChannel ID
guild_idstringGuild ID
parent_id?1stringFavourite category the channel is grouped under
position2int32Position across the whole favourites list
nickname?stringUser-assigned channel nickname

1 The id of a favourite category, not a guild category channel. An absent value groups the channel outside every category

2 A single ordering over every favourite channel. The first-party client renumbers the whole list from 0 whenever an entry is removed or moved, and appends a new entry at the current entry count without renumbering

One entry names one grouping in the favourites view. The client chooses the identifier, so it is not a snowflake and Fluxer never resolves it.

FieldTypeDescription
idstringCategory identifier
namestringCategory name
position1int32Category position

1 Renumbered from 0 across every category whenever one is removed or moved

The recent_mentions field controls which mentions appear in the recent mentions view. The three filters combine, and include_guilds selects by channel.

FieldTypeDescription
include_everyone?1boolWhether to include @everyone mentions
include_roles?1boolWhether to include role mentions
include_guilds?1 2boolWhether to include mentions in a guild channel

1 The first-party client defaults every filter to true and omits the field while it holds that default, so a client that reads an absent value as the Protobuf zero filters out mentions the account expects to see

2 False keeps direct message mentions and drops every mention whose channel belongs to a guild

The sidebar field stores direct message sidebar presentation state.

FieldTypeDescription
inline_dms_collapsedboolWhether the inline direct message section is collapsed
show_collapsed_unread_dms_badge?1boolWhether the collapsed section shows an unread direct message badge
show_incoming_friend_request_badge?1boolWhether the sidebar shows an incoming friend request badge

1 The first-party client defaults it to true and omits the field while it holds that default, so a client that reads an absent value as the Protobuf zero hides a badge the account expects to see

The member_list field stores whether the member list panel is open.

FieldTypeDescription
members_open?boolWhether the member list is open

The unread_channels field stores which channels are collapsed in the unread view.

FieldTypeDescription
collapsed_channel_idsarray[string]Collapsed channel IDs in decimal form

The mention_frecency field records how often and how recently the account mentioned each user, one record set per guild, so a client can rank mention autocomplete without a server call. It nests two messages, MentionFrecencyState.Scope and MentionFrecencyState.Entry.

FieldTypeDescription
scopesarray[mention frecency scope object]Per-guild mention records

One scope holds every mention record for one guild. It is declared as MentionFrecencyState.Scope.

FieldTypeDescription
guild_idstringGuild ID in decimal form
entriesarray[mention frecency entry object]User mention records for the guild

One entry counts mentions of one user inside one scope. It is declared as MentionFrecencyState.Entry.

FieldTypeDescription
user_idstringMentioned user ID in decimal form
countuint32Number of recorded mentions
last_at_ms1int64Unix timestamp in milliseconds of the most recent mention

1 Milliseconds since 1970-01-01T00:00:00Z

The nagbars field stores dismissed account-wide notices as bools and dismissed per-target notices as maps. Field number 13 is not assigned.

FieldTypeDescription
ios_installboolWhether the iOS installation notice is dismissed
pwa_installboolWhether the progressive web application installation notice is dismissed
push_notificationboolWhether the push notification notice is dismissed
desktop_notificationboolWhether the desktop notification notice is dismissed
premium_grace_periodboolWhether the premium grace period notice is dismissed
premium_expiredboolWhether the premium expiry notice is dismissed
premium_onboardingboolWhether the premium onboarding notice is dismissed
premium_trial_expiringboolWhether the premium trial expiry notice is dismissed
gift_inventoryboolWhether the gift inventory notice is dismissed
desktop_downloadboolWhether the desktop download notice is dismissed
guild_membership_ctaboolWhether the guild membership call to action notice is dismissed
visionary_mfa1boolWhether the lifetime premium MFA notice is dismissed
legacy_phone_unlinkboolWhether the legacy phone unlink notice is dismissed
pending_bulk_deletionmap[string, bool]Dismissal state keyed by pending bulk deletion identifier
invites_disabled2map[string, bool]Dismissal state keyed by guild ID for disabled-invite notices
guild_mfa_requirement2map[string, bool]Dismissal state keyed by guild ID for MFA requirement notices

1 The notice this dismisses is shown only to an account holding lifetime premium with no MFA authenticator enrolled

2 Keyed by the decimal form of a guild snowflake. A missing key reads as not dismissed

The dismissed_upsells field stores dismissed upsells.

FieldTypeDescription
picker_premiumboolWhether the premium picker upsell is dismissed

The guild_nsfw_agreements field stores mature content acknowledgements. Acceptance is recorded per target, so accepting for a guild does not record acceptance for its categories or channels.

FieldTypeDescription
agreed_channel_idsarray[string]Channel IDs whose mature content notice was accepted
agreed_guild_idsarray[string]Guild IDs whose mature content notice was accepted
agreed_category_idsarray[string]Category IDs whose mature content notice was accepted

The whats_new field stores the most recently dismissed update entry.

FieldTypeDescription
last_dismissed_entry_id?stringMost recently dismissed update entry ID

The privacy field stores client privacy behaviour. Fluxer reads none of it, and none of it changes the privacy fields of the user settings object, which govern what Fluxer itself discloses about the account.

FieldTypeDescription
disable_stream_previews1boolWhether stream previews are disabled
show_active_now?boolWhether the active now view is shown
preupload_message_attachments?boolWhether message attachments are uploaded before the message is sent

1 The only field in this group whose effect reaches past the account’s own view. While it is true the first-party client uploads no stream preview frame, so no other viewer receives one

The local_spam_overrides field stores client-local classifications that override the SPAMMER public user flag in presentation only. Fluxer neither reads these lists nor changes any flag because of them.

FieldTypeDescription
spammer_user_idsarray[string]User IDs presented locally as spammers
not_spammer_user_ids1array[string]User IDs presented locally as not being spammers

1 This list wins over spammer_user_ids and over the SPAMMER flag, so a user ID present in both lists is presented as not a spammer

The sound field controls sound playback, master volume, and per-sound overrides.

FieldTypeDescription
all_sounds_disabledboolWhether every application sound is disabled
master_volume?1doubleMaster sound volume
disabled_soundsmap[string, bool]Disabled state keyed by sound identifier
sound_overrides2map[string, double]Volume override keyed by sound identifier

1 A percentage. The first-party client clamps it to the range 0 through 200, treats 100 as the default, and omits the field entirely while it holds the default

2 A percentage on the same scale, and the complete volume for that one sound

Both maps are keyed by an arbitrary string, and Fluxer stores and returns any key unchanged. The first-party client uses the identifiers below, and a key outside this set has no defined playback effect.

ValueDescription
deafDeafening sound
undeafUndeafening sound
muteMuting sound
unmuteUnmuting sound
messageMessage notification sound
direct-messageDirect message notification sound
same-channel-messageNotification sound for the channel already in view
incoming-ringIncoming call sound
user-joinVoice participant join sound
user-leaveVoice participant leave sound
user-moveVoice participant move sound
viewer-joinStream viewer join sound
viewer-leaveStream viewer leave sound
voice-disconnectVoice disconnection sound
camera-onCamera enabled sound
camera-offCamera disabled sound
screen-share-startScreen share start sound
screen-share-stopScreen share stop sound

The spellcheck field controls spellchecking, the selected languages, and the personal dictionary.

FieldTypeDescription
enabled?boolWhether spellchecking is enabled
languages1array[string]Selected spellcheck languages
personal_dictionary1array[string]Words in the personal dictionary
auto_detect?boolWhether spellcheck languages are detected automatically
engine?2stringSelected spellcheck engine identifier

1 The first-party client drops an empty entry and a duplicate entry when it reads the snapshot

2 The first-party client recognises auto, system, and hunspell, and ignores any other value

The search_engines field stores the selected external providers. Every identifier names a provider the client defines, and Fluxer neither validates nor resolves one.

FieldTypeDescription
text_search_engine_id?stringText search engine identifier
reverse_image_search_engine_id?stringReverse image search engine identifier
translation_provider_id?stringTranslation provider identifier

The permission_layout field controls the layout of the permission editor.

FieldTypeDescription
layoutint32Permission layout mode
gridint32Permission grid mode
ValueNameDescription
0PERMISSION_LAYOUT_MODE_UNSPECIFIEDNo explicit layout is selected
1PERMISSION_LAYOUT_MODE_COMFYUse the roomy permission layout
2PERMISSION_LAYOUT_MODE_DENSEUse the dense permission layout
ValueNameDescription
0PERMISSION_GRID_MODE_UNSPECIFIEDNo explicit grid mode is selected
1PERMISSION_GRID_MODE_SINGLEShow one permission category at a time
2PERMISSION_GRID_MODE_GRIDShow permission categories in a grid

The guild_member_layout field controls how the guild member view presents its members.

FieldTypeDescription
modeint32Guild member view mode
ValueNameDescription
0GUILD_MEMBER_VIEW_MODE_UNSPECIFIEDNo explicit view mode is selected
1GUILD_MEMBER_VIEW_MODE_TABLEDisplay guild members in a table
2GUILD_MEMBER_VIEW_MODE_GRIDDisplay guild members in a grid

The guild_folders field stores which guild folders are expanded in the sidebar. The folders themselves are guild_folders on the user settings object.

FieldTypeDescription
expanded_folder_ids1array[fixed64]Expanded guild folder identifiers

1 Each value is the id of a guild folder object. An identifier for a folder the layout no longer holds stays in the array and has no effect

The hidden_guild_buttons field stores which guild list controls are hidden.

FieldTypeDescription
download_buttonboolWhether the download button is hidden
help_buttonboolWhether the help button is hidden

The keyboard_mode_intro field stores whether the keyboard navigation introduction has been seen.

FieldTypeDescription
seenboolWhether the keyboard navigation introduction was seen

The input_monitoring field stores whether the input monitoring prompt has been seen. No live surface reads or writes it.

FieldTypeDescription
seen_ctaboolWhether the input monitoring call to action was seen

The voice_prompts field stores which voice confirmation prompts the account has suppressed.

FieldTypeDescription
skip_hide_own_camera_confirmboolWhether hiding the caller’s own camera skips confirmation
skip_hide_own_screenshare_confirmboolWhether hiding the caller’s own screen share skips confirmation

The sudo_prompt field stores the verification method the account used most recently, so a client can preselect it the next time sudo mode is required.

FieldTypeDescription
last_used_mfa_method?1int32MFA method most recently used for sudo verification

1 The two assigned values correspond to totp and webauthn in mfa_method of the sudo verification object

ValueNameDescription
0MFA_METHOD_UNSPECIFIEDNo method is recorded
1MFA_METHOD_TOTPTime-based one-time password
3MFA_METHOD_WEBAUTHNWebAuthn credential

The value 2 is not assigned.

The keybinds field stores custom keybinds and voice transmit behaviour.

FieldTypeDescription
custom_keybindsarray[custom keybind object]Custom keybinds
transmit_mode1stringVoice transmit mode
push_to_talk_release_delay_ms?2uint32Push-to-talk release delay in milliseconds

1 The first-party client recognises voice_activity and voice_push_to_talk, and falls back to voice_activity for the empty string and for any other value

2 Read only while transmit_mode is voice_push_to_talk. The first-party client clamps it to the range 20 through 2000, treats 20 as the default, and omits the field entirely while it holds the default

One entry binds one input combination to one action. The entry has its own enabled flag and its combination has another. The first-party client gates a custom keybind on the entry’s flag alone, and reads enabled on a combination only for a built-in default binding.

FieldTypeDescription
id1stringKeybind identifier
action?2stringAction performed by the keybind
combo?keybind combo objectInput combination
enabledboolWhether the keybind is enabled

1 Chosen by the client. The first-party client generates a replacement when it reads an entry whose id is the empty string

2 An action name the client defines. The first-party client keeps an entry whose action it does not recognise and clears action

One combination describes the key, modifiers, and buttons that trigger a keybind. The modifier flags are independent of each other, and ctrl_or_meta is a modifier of its own.

FieldTypeDescription
keystringKey value
code?stringPhysical key code
ctrl_or_meta1boolWhether Control or Meta is required according to the platform
ctrlboolWhether Control is required
altboolWhether Alt is required
shiftboolWhether Shift is required
metaboolWhether Meta is required
global?boolWhether the combination is registered globally
enabled?2boolWhether the combination is active
modifier_onlyboolWhether the combination contains only modifier keys
both_sidesboolWhether either side of a paired modifier is accepted
mouse_button?uint32Mouse button number
gamepad_button?uint32Gamepad button number

1 Resolves to Meta on macOS and to Control on every other platform, so one stored combination expresses the platform-native accelerator

2 Distinct from enabled on the custom keybind that owns the combination, and with the opposite default, because an absent value here reads as active

The chat_input field controls message composer behaviour.

FieldTypeDescription
convert_emoticons?boolWhether emoticons are converted to emoji