Encryption onboarding: detect missing setup, explain cross-signing and the recovery key (≤3 pages) #71
Open
opened 2026-10-06 21:26:47 +00:00 by robocub
·
0 comments
No Branch/Tag specified
main
sync/state
sync/testing
sync/topic/fix/accept-dm-invite
sync/topic/ci/integration-banners
sync/topic/ci/integration-mosaic
sync/topic/ci/integration-tests
sync/topic/feat/discover
sync/topic/feat/screenshare-audio-linux
sync/topic/feat/screenshare-audio-upstream
sync/topic/feat/sliding-sync
sync/topic/feat/welcome-first-login
sync/topic/fix/banner-thumbnail-scale
sync/topic/fix/image-fullres-cache
sync/topic/fix/missing-media
sync/topic/fix/notification-fallback
sync/topic/fix/room-preview-deleted
sync/topic/fix/startup-splash-until-loaded
sync/topic/fix/sticker-picker-resolution
sync/topic/fix/voip-late-joiner-tiles
sync/topic/perf/lazy-home-room-list
sync/topic/perf/postload-keep-ui-responsive
sync/topic/perf/startup-postload-queue
sync/topic/ci/flatpak
sync/topic/ci/fork-invariants
sync/topic/feat/desktop-copy-selection
sync/topic/feat/gradient-themes
sync/topic/feat/media-mosaic
sync/topic/feat/personal-packs
sync/topic/feat/room-banners
sync/topic/feat/room-picker-search
sync/topic/feat/space-remove-room
sync/topic/feat/sso-first-login
sync/topic/feat/telegram-sticker-import
sync/topic/feat/voice-messages
sync/topic/fix/linux-app-id
sync/topic/fix/own-push-gateway
sync/topic/chore/branding
sync/topic/chore/fork-settings
sync/topic/ci/android-apk
sync/topic/ci/version-label
sync/main
fix/accept-dm-invite
feat/voice-isolation
feat/screenshare-audio-upstream
ci/android-apk
ci/flatpak
ci/integration-tests
feat/screenshare-audio-linux
ci/windows-testing
feat/native-oidc
testing
ci/integration-banners
ci/integration-mosaic
feat/discover
feat/sliding-sync
feat/welcome-first-login
fix/banner-thumbnail-scale
fix/image-fullres-cache
fix/missing-media
fix/room-preview-deleted
fix/startup-splash-until-loaded
fix/sticker-picker-resolution
fix/voip-late-joiner-tiles
perf/lazy-home-room-list
perf/postload-keep-ui-responsive
perf/startup-postload-queue
ci/fork-invariants
feat/desktop-copy-selection
feat/gradient-themes
feat/media-mosaic
feat/personal-packs
feat/room-banners
feat/room-picker-search
feat/space-remove-room
feat/sso-first-login
feat/telegram-sticker-import
feat/voice-messages
fix/linux-app-id
fix/notification-fallback
fix/own-push-gateway
chore/branding
chore/fork-settings
ci/version-label
ci/windows-release
ci/windows-preview
ci/windows
ci/sync-dep-report
fix/sticker-no-autofavorite
chore/register-gradient-themes
design/logo
bootstrap
keybinder
update-emoji
fix-url-previews
fix-flatpak
test-color-scheme-generation
widget-reliability
custom-themes
livekit-rust
test-disabled-notification-counts
stutter-test
improved-link-handling
platform/ios
rich-notifications-linux
fix/gif-search-input
test/voip-data-channel
pre-sync/20261007-003728/main
pre-sync/20261007-003728/perf/postload-keep-ui-responsive
pre-sync/20261007-003728/perf/lazy-home-room-list
pre-sync/20261007-003728/testing
pre-sync/20261007-003728/fix/banner-thumbnail-scale
pre-sync/20261007-003728/fix/image-fullres-cache
pre-sync/20261007-003728/ci/integration-banners
pre-sync/20261007-003728/feat/discover
pre-sync/20261007-003728/fix/voip-late-joiner-tiles
pre-sync/20261007-003728/fix/sticker-picker-resolution
pre-sync/20261007-003728/fix/room-preview-deleted
pre-sync/20261007-003728/fix/missing-media
pre-sync/20261007-003728/ci/integration-tests
pre-sync/20261007-003728/fix/startup-splash-until-loaded
pre-sync/20261007-003728/fix/notification-fallback
pre-sync/20261007-003728/feat/sliding-sync
pre-sync/20261007-003728/feat/welcome-first-login
pre-sync/20261007-003728/perf/startup-postload-queue
pre-sync/20261007-003728/ci/integration-mosaic
pre-sync/20261007-003728/ci/flatpak
pre-sync/20261007-003728/feat/desktop-copy-selection
pre-sync/20261007-003728/ci/fork-invariants
pre-sync/20261007-003728/fix/own-push-gateway
pre-sync/20261007-003728/fix/linux-app-id
pre-sync/20261007-003728/feat/personal-packs
pre-sync/20261007-003728/feat/media-mosaic
pre-sync/20261007-003728/feat/voice-messages
pre-sync/20261007-003728/feat/sso-first-login
pre-sync/20261007-003728/feat/space-remove-room
pre-sync/20261007-003728/feat/room-banners
pre-sync/20261007-003728/feat/gradient-themes
pre-sync/20261007-003728/feat/room-picker-search
pre-sync/20261007-003728/feat/telegram-sticker-import
pre-sync/20261007-003728/ci/android-apk
pre-sync/20261007-003728/ci/version-label
pre-sync/20261007-003728/chore/fork-settings
pre-sync/20261007-003728/chore/branding
pre-sync/20261006-230447/main
pre-sync/20261006-230447/ci/flatpak
pre-sync/20261006-230447/ci/integration-tests
pre-sync/20261006-230447/ci/android-apk
pre-sync/20261006-230447/fix/startup-splash-until-loaded
testing-2026-10-06b
pre-sync/20261006-230447/ci/integration-banners
pre-sync/20261006-230447/feat/room-banners
pre-sync/20261006-230447/feat/welcome-first-login
pre-sync/20261006-230447/testing
pre-sync/20261006-230447/fix/image-fullres-cache
pre-sync/20261006-230447/fix/voip-late-joiner-tiles
pre-sync/20261006-230447/fix/sticker-picker-resolution
pre-sync/20261006-230447/fix/room-preview-deleted
pre-sync/20261006-230447/fix/missing-media
pre-sync/20261006-230447/feat/sliding-sync
pre-sync/20261006-230447/perf/startup-postload-queue
pre-sync/20261006-230447/ci/integration-mosaic
pre-sync/20261006-230447/feat/desktop-copy-selection
pre-sync/20261006-230447/ci/fork-invariants
pre-sync/20261006-230447/fix/own-push-gateway
pre-sync/20261006-230447/fix/linux-app-id
pre-sync/20261006-230447/feat/discover
pre-sync/20261006-230447/feat/personal-packs
pre-sync/20261006-230447/feat/media-mosaic
pre-sync/20261006-230447/feat/voice-messages
pre-sync/20261006-230447/fix/notification-fallback
pre-sync/20261006-230447/feat/sso-first-login
pre-sync/20261006-230447/feat/space-remove-room
pre-sync/20261006-230447/feat/gradient-themes
pre-sync/20261006-230447/feat/telegram-sticker-import
pre-sync/20261006-230447/chore/fork-settings
pre-sync/20261006-230447/chore/branding
pre-sync/20261006-230447/ci/version-label
pre-sync/20261006-230447/feat/room-picker-search
pre-sync/20261006-230447/fix/banner-thumbnail-scale
pre-sync/20261006-204407/perf/startup-postload-queue
pre-sync/20261006-204407/main
pre-sync/20261006-204407/ci/flatpak
pre-sync/20261006-204407/ci/integration-tests
pre-sync/20261006-204407/ci/android-apk
pre-sync/20261006-204407/testing
pre-sync/20261006-204407/fix/image-fullres-cache
pre-sync/20261006-204407/fix/voip-late-joiner-tiles
pre-sync/20261006-204407/fix/sticker-picker-resolution
pre-sync/20261006-204407/fix/missing-media
pre-sync/20261006-204407/feat/sliding-sync
pre-sync/20261006-204407/ci/integration-mosaic
pre-sync/20261006-204407/feat/desktop-copy-selection
pre-sync/20261006-204407/ci/fork-invariants
pre-sync/20261006-204407/fix/own-push-gateway
pre-sync/20261006-204407/fix/linux-app-id
pre-sync/20261006-204407/feat/discover
pre-sync/20261006-204407/feat/personal-packs
pre-sync/20261006-204407/feat/media-mosaic
pre-sync/20261006-204407/feat/voice-messages
pre-sync/20261006-204407/fix/notification-fallback
pre-sync/20261006-204407/feat/sso-first-login
pre-sync/20261006-204407/feat/space-remove-room
pre-sync/20261006-204407/feat/room-banners
pre-sync/20261006-204407/feat/gradient-themes
pre-sync/20261006-204407/feat/room-picker-search
pre-sync/20261006-204407/feat/telegram-sticker-import
pre-sync/20261006-204407/chore/fork-settings
pre-sync/20261006-204407/chore/branding
pre-sync/20261006-204407/ci/version-label
pre-sync/20261006-204407/fix/room-preview-deleted
pre-sync/20261006-191450/main
pre-sync/20261006-191450/ci/integration-mosaic
pre-sync/20261006-191450/fix/missing-media
pre-sync/20261006-191450/feat/media-mosaic
pre-sync/20261006-191450/testing
pre-sync/20261006-191450/fix/image-fullres-cache
pre-sync/20261006-191450/fix/sticker-picker-resolution
pre-sync/20261006-191450/feat/desktop-copy-selection
pre-sync/20261006-191450/ci/fork-invariants
pre-sync/20261006-191450/fix/own-push-gateway
pre-sync/20261006-191450/fix/linux-app-id
pre-sync/20261006-191450/feat/discover
pre-sync/20261006-191450/feat/personal-packs
pre-sync/20261006-191450/fix/voip-late-joiner-tiles
pre-sync/20261006-191450/ci/integration-tests
pre-sync/20261006-191450/feat/voice-messages
pre-sync/20261006-191450/fix/notification-fallback
pre-sync/20261006-191450/feat/sso-first-login
pre-sync/20261006-191450/feat/sliding-sync
pre-sync/20261006-191450/feat/space-remove-room
pre-sync/20261006-191450/feat/room-banners
pre-sync/20261006-191450/feat/gradient-themes
pre-sync/20261006-191450/feat/telegram-sticker-import
pre-sync/20261006-191450/ci/flatpak
pre-sync/20261006-191450/chore/fork-settings
pre-sync/20261006-191450/ci/android-apk
pre-sync/20261006-191450/chore/branding
pre-sync/20261006-191450/ci/version-label
pre-sync/20261006-191450/feat/room-picker-search
pre-sync/20261006-165716/main
pre-sync/20261006-165716/fix/image-fullres-cache
pre-sync/20261006-165716/fix/sticker-picker-resolution
pre-sync/20261006-165716/testing
pre-sync/20261006-165716/feat/discover
pre-sync/20261006-165716/fix/voip-late-joiner-tiles
pre-sync/20261006-165716/ci/integration-tests
pre-sync/20261006-165716/fix/notification-fallback
pre-sync/20261006-165716/feat/sliding-sync
pre-sync/20261006-165716/feat/gradient-themes
pre-sync/20261006-165716/ci/flatpak
pre-sync/20261006-165716/feat/desktop-copy-selection
pre-sync/20261006-165716/ci/fork-invariants
pre-sync/20261006-165716/fix/own-push-gateway
pre-sync/20261006-165716/fix/linux-app-id
pre-sync/20261006-165716/feat/personal-packs
pre-sync/20261006-165716/feat/media-mosaic
pre-sync/20261006-165716/feat/voice-messages
pre-sync/20261006-165716/ci/android-apk
pre-sync/20261006-165716/feat/sso-first-login
pre-sync/20261006-165716/feat/space-remove-room
pre-sync/20261006-165716/feat/room-banners
pre-sync/20261006-165716/feat/room-picker-search
pre-sync/20261006-165716/feat/telegram-sticker-import
pre-sync/20261006-165716/chore/fork-settings
pre-sync/20261006-165716/chore/branding
pre-sync/20261006-165716/ci/version-label
pre-sync/20261006-150145/main
pre-sync/20261006-150145/fix/voip-late-joiner-tiles
pre-sync/20261006-150145/chore/branding
testing-2026-10-06
pre-sync/20261006-150145/testing
pre-sync/20261006-150145/feat/discover
pre-sync/20261006-150145/fix/notification-fallback
pre-sync/20261006-150145/feat/sliding-sync
pre-sync/20261006-150145/ci/flatpak
pre-sync/20261006-150145/feat/desktop-copy-selection
pre-sync/20261006-150145/ci/fork-invariants
pre-sync/20261006-150145/fix/own-push-gateway
pre-sync/20261006-150145/fix/linux-app-id
pre-sync/20261006-150145/feat/personal-packs
pre-sync/20261006-150145/feat/media-mosaic
pre-sync/20261006-150145/ci/integration-tests
pre-sync/20261006-150145/feat/voice-messages
pre-sync/20261006-150145/feat/sso-first-login
pre-sync/20261006-150145/feat/space-remove-room
pre-sync/20261006-150145/feat/room-banners
pre-sync/20261006-150145/feat/gradient-themes
pre-sync/20261006-150145/feat/room-picker-search
pre-sync/20261006-150145/feat/telegram-sticker-import
pre-sync/20261006-150145/chore/fork-settings
pre-sync/20261006-150145/ci/android-apk
pre-sync/20261006-150145/ci/version-label
pre-sync/20261006-060554/ci/flatpak
pre-sync/20261006-060554/main
pre-sync/20261006-060554/ci/integration-tests
pre-sync/20261006-060554/ci/android-apk
pre-sync/20261006-060554/feat/sliding-sync
pre-sync/20261006-032458/main
pre-sync/20261006-060554/feat/discover
pre-sync/20261006-032458/feat/discover
pre-sync/20261006-060554/feat/personal-packs
pre-sync/20261006-060554/fix/notification-fallback
pre-sync/20261006-032458/fix/notification-fallback
pre-sync/20261006-032458/ci/integration-tests
pre-sync/20261006-060554/chore/branding
pre-sync/20261006-032458/chore/branding
pre-sync/20261006-060554/chore/fork-settings
pre-sync/20261006-032458/feat/personal-packs
pre-sync/20261006-032458/chore/fork-settings
pre-sync/20261006-060554/testing
pre-sync/20261006-032458/testing
pre-sync/20261006-060554/feat/desktop-copy-selection
pre-sync/20261006-060554/ci/fork-invariants
pre-sync/20261006-060554/fix/own-push-gateway
pre-sync/20261006-060554/fix/linux-app-id
pre-sync/20261006-060554/feat/media-mosaic
pre-sync/20261006-060554/feat/voice-messages
pre-sync/20261006-060554/feat/sso-first-login
pre-sync/20261006-060554/feat/space-remove-room
pre-sync/20261006-060554/feat/room-banners
pre-sync/20261006-060554/feat/gradient-themes
pre-sync/20261006-060554/feat/room-picker-search
pre-sync/20261006-060554/feat/telegram-sticker-import
pre-sync/20261006-032458/ci/flatpak
pre-sync/20261006-032458/feat/desktop-copy-selection
pre-sync/20261006-032458/ci/fork-invariants
pre-sync/20261006-032458/fix/own-push-gateway
pre-sync/20261006-032458/fix/linux-app-id
pre-sync/20261006-032458/feat/media-mosaic
pre-sync/20261006-032458/feat/voice-messages
pre-sync/20261006-032458/ci/android-apk
pre-sync/20261006-032458/feat/sso-first-login
pre-sync/20261006-032458/feat/space-remove-room
pre-sync/20261006-032458/feat/room-banners
pre-sync/20261006-032458/feat/gradient-themes
pre-sync/20261006-032458/feat/room-picker-search
pre-sync/20261006-032458/feat/telegram-sticker-import
pre-sync/20261006-060554/ci/version-label
pre-sync/20261006-032458/ci/version-label
pre-sync/20261005-230516/main
testing-2026-10-05c
pre-sync/20261005-230516/feat/gradient-themes
pre-sync/20261005-230516/testing
pre-sync/20261005-230516/ci/flatpak
pre-sync/20261005-230516/feat/desktop-copy-selection
pre-sync/20261005-230516/ci/fork-invariants
pre-sync/20261005-230516/fix/own-push-gateway
pre-sync/20261005-230516/fix/linux-app-id
pre-sync/20261005-230516/feat/personal-packs
pre-sync/20261005-230516/feat/media-mosaic
pre-sync/20261005-230516/feat/voice-messages
pre-sync/20261005-230516/feat/sso-first-login
pre-sync/20261005-230516/feat/space-remove-room
pre-sync/20261005-230516/feat/room-banners
pre-sync/20261005-230516/feat/room-picker-search
pre-sync/20261005-230516/feat/telegram-sticker-import
pre-sync/20261005-230516/chore/fork-settings
pre-sync/20261005-230516/ci/android-apk
pre-sync/20261005-230516/chore/branding
pre-sync/20261005-230516/ci/version-label
pre-sync/20261005-210511/main
pre-sync/20261005-210511/ci/fork-invariants
pre-sync/20261005-210511/testing
pre-sync/20261005-210511/feat/voice-messages
pre-sync/20261005-210511/feat/sso-first-login
pre-sync/20261005-210511/fix/linux-app-id
pre-sync/20261005-210511/ci/flatpak
pre-sync/20261005-210511/fix/own-push-gateway
testing-2026-10-05b
pre-sync/20261005-210511/ci/version-label
pre-sync/20261005-210511/ci/android-apk
pre-sync/20261005-210511/feat/media-mosaic
pre-sync/20261005-210511/chore/branding
pre-restack/ci/version-label
pre-restack/ci/flatpak
pre-sync/20261005-210511/feat/personal-packs
pre-restack/chore/branding
pre-sync/20261005-210511/chore/fork-settings
testing-2026-10-05
pre-sync/20261005-210511/feat/space-remove-room
pre-restack/feat/media-mosaic
pre-sync/20261005-210511/feat/telegram-sticker-import
pre-sync/20261005-210511/feat/desktop-copy-selection
pre-sync/20261005-210511/feat/room-banners
pre-sync/20261005-210511/feat/room-picker-search
v0.5.0
v0.4.2+hotfix.2
v0.4.2+hotfix.1
v0.4.2
v0.4.1
v0.4.0
v0.4.0-prerelease+20251025
v0.4.0-prerelease+20250924
v0.3.1+hotfix.1
v0.3.1
v0.3.1-prerelease+20250316
v0.3.1-prerelease+952499f
v0.3.1-prerelease+ee5f1b6
v0.3.0
v0.3.0-prerelease+2973942
v0.3.0-prerelease+92b5735
v0.3.0-prerelease+dd1dadf
v0.3.0-prerelease+d89fea2
v0.3.0-prerelease+5c8379c
v0.2.1
v0.2.0
v0.1.4
v0.1.3
v0.1.2
v0.1.1
v0.1.0
Labels
Clear labels
bug
Something is broken
effort: large
Multi-week or multi-repo
effort: medium
A week or two
effort: small
Days
feature
New capability
infra
Proxy, CI, packaging, releases
needs-info
Blocked on logs, repro steps or a decision
upstream
Imported from Commet's GitHub tracker; drop our patch once upstream fixes it
ux
Papercuts and usability
voice
Calls, voice and screen share
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".
No due date set.
Dependencies
No dependencies set
Reference
nether/vommet#71
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Goal: nobody loses their message history because they didn't understand encryption. When an account isn't fully set up, Vommet notices and walks the user through it in at most three short pages, with clear pictures, readable on phone and desktop, ending in the actual setup.
The key message: losing the recovery key after all your devices are signed out is the number one reason people lose their past encrypted messages. Save it in a password manager. If you don't have one, we recommend Bitwarden (free, open source, on every platform).
When to show it
Checked after sign-in and at startup, per account:
encryption.crossSigning.enabled == false): full flow, ending in setup.isUnknownSession): ask to verify with another device or enter the recovery key, before the room list opens. That's the fix for #32 (upstream #1046: rooms opened before keys arrive stay "failed to decrypt" for good).The user can skip, and gets a gentle reminder later (a banner on the home screen, not a blocking dialog on every start). The full explanation stays reachable from Settings › Security.
The three pages
encryption.bootstrap), show the recovery key with Copy / Save to file, and confirm it was saved (e.g. type the last 4 characters).Figures
Draw the diagrams in the app (vector, theme-aware, dark/light) rather than as bitmap screenshots, so they stay sharp and readable at phone and desktop sizes. A short screenshot of the save-the-key step in Bitwarden could help but isn't required.
Building blocks that exist
FirstTimeSetup/SetupMenu), the same mechanism as the welcome screen (feat/welcome-first-login). Order: welcome first, then encryption.cross_signing_page.dartusesencryption.bootstrap;matrix_security_tab.dartalready readscrossSigning.enabledandisUnknownSession).Related
Related bugs to fix along the way