ConstReadonlyAccountRecoveryAuthenticationConfirmation: {Account-recovery authentication confirmation: the Bloks app the search
answer pushes after the identifier is submitted
(com.bloks.www.caa.ar.authentication_confirmation). The recorded
submit_code call still reports the search screen as the client endpoint;
the platform catalog keeps that spelling.
ReadonlyAccountRecoveryEmailCode: {Last-resort-recovery code-entry screen ("Check your email"), the Bloks app
the login's identification-error flow opens
(com.bloks.www.ap.two_step_verification.code_entry), shown in the CDS
container (ap. namespace, unvetted). The skipped 451 login prelude ends
on it, and LoginHomepage.logIn opens it when the answer escalates.
ReadonlyAccountRecoverySearch: { appId: "com.bloks.www.caa.ar.search"; host: "screen"; kind: "bloks" }The same search screen once its content is shown, reported as the app id itself.
ReadonlyAccountRecoverySearchCds: { appId: "com.bloks.www.caa.ar.search"; host: "cds"; kind: "bloks" }Forgot-password account recovery: the email/username search screen while it
loads in the CDS container (IgCdsScreenNavigationLoggerModule:…ar.search).
ReadonlyAccountRecoverySuccessLocationPermission: {The location-permission prompt the Android 451 launch opens over the feed
after a successful account recovery: the 451 launch recording reports it in
front from its own screen fetch on, as chain entry 2 after the feed. The
app opens it as a Bloks app root, so its identity is the Bloks app id:
Android renders <appId>:<appId>, as the recording logs it, and iOS names
the same identity without a catalog entry of its own.
ReadonlyChallengeAccountSuspended: { kind: "navigation-unrecorded" }"We suspended your account, ‹username›": the suspended-account intro.
ReadonlyChallengeAccountTemporarilyLocked: { kind: "navigation-unrecorded" }"Your Account Has Been Temporarily Locked" with its Continue.
ReadonlyChallengeAddBirthday: { kind: "navigation-unrecorded" }"Add your own birthday — Enter your age".
ReadonlyChallengeAuthenticityWizard: { kind: "navigation-unrecorded" }The selfie / identity-verification wizard.
ReadonlyChallengeAwaitingReview: { kind: "navigation-unrecorded" }"You submitted an appeal": the review is pending.
ReadonlyChallengeContactPointCode: { kind: "navigation-unrecorded" }The confirmation-code entry for the contact point just set.
ReadonlyChallengeEscalationInformation: { kind: "navigation-unrecorded" }The informational escalation notice of a violation.
ReadonlyChallengeLoginReview: { kind: "navigation-unrecorded" }"Was this you?" review of a login.
ReadonlyChallengeRecaptcha: { kind: "navigation-unrecorded" }The UFAC reCAPTCHA.
ReadonlyChallengeReviewContactPointChange: { kind: "navigation-unrecorded" }"Is Your Profile Information Correct?"
ReadonlyChallengeScrapingWarning: { kind: "navigation-unrecorded" }"We've detected automated behavior on your account".
ReadonlyChallengeSelectVerifyMethod: { kind: "navigation-unrecorded" }"Choose how to confirm it's you": the navigation challenge's method choice.
ReadonlyChallengeSetContactPoint: { kind: "navigation-unrecorded" }"Add Phone Number to Get Back Into Instagram" (or the email variant).
ReadonlyChallengeSetNewPassword: { kind: "navigation-unrecorded" }The new-password entry of the navigation challenge.
ReadonlyChallengeSubmitPhone: { kind: "navigation-unrecorded" }The phone-number entry of the navigation challenge.
ReadonlyChallengeTextCaptcha: { kind: "navigation-unrecorded" }"Help us confirm it's you — Enter the code below" (text image captcha).
ReadonlyChallengeThanksForProvidingInfo: { kind: "navigation-unrecorded" }"Thanks for Providing Your Info" with its Done.
ReadonlyChallengeVerifyCode: { kind: "navigation-unrecorded" }The security-code entry of the navigation challenge.
ReadonlyChallengeWebRecaptcha: { kind: "navigation-unrecorded" }The web challenge's reCAPTCHA form.
ReadonlyChallengeWebSetNewPassword: { kind: "navigation-unrecorded" }"Change Your Password to Secure Your Account" (web form).
ReadonlyDirectCustomizeChat: { kind: "native" }Thread "Customize chat" screen (theme entry point).
ReadonlyDirectGroupNameAndPhotoEditor: { kind: "native" }A group thread's group name and photo editor, opened from the thread's shared media (451 chain).
ReadonlyDirectInbox: { kind: "native" }Direct inbox tab: the list of DM threads.
ReadonlyDirectRecipientPicker: { kind: "native" }"New message": the recipient picker opened from the inbox
(DirectRecipientPickerFragment:direct_recipient_picker, Android 451), a
search field over the people a message can be started with.
ReadonlyDirectThread: { kind: "native" }One DM thread, opened from the inbox, from a profile or for a person picked in "New message".
ReadonlyDirectThreadDetails: { kind: "native" }A DM thread's details hub (shared media, nicknames, …), opened from the thread header.
ReadonlyDirectThreadNicknameChange: { kind: "native" }One participant's nickname editor, opened from the nicknames list.
ReadonlyDirectThreadNicknames: { kind: "native" }Nicknames list of a DM thread, opened from the thread details.
ReadonlyDirectThreadSharedMedia: { kind: "native" }Shared media list of a DM thread, opened from the thread details.
ReadonlyDirectThreadThemePicker: { kind: "native" }Theme picker opened from Customize chat.
ReadonlyExplore: { kind: "native" }Explore tab (a bottom-tab switch into search starts here).
ReadonlyFeedTimeline: { kind: "native" }Main feed tab.
ReadonlyLandingScreen: {CAA landing screen: the config-sync host between the client-data redirect and the login home.
ReadonlyLoginHomeCds: { appId: "com.bloks.www.caa.login.login_homepage"; host: "cds"; kind: "bloks" }Login home opened inside the CDS screen container. The AVD capture fetches it from the landing screen through the CDS container, so its own screen fetch, phone prefill and oauth fetch report the CDS client endpoint.
ReadonlyLoginHomepage: {Login home, the logged-out process's root (Bloks: com.bloks.www.caa.login.login_homepage).
ReadonlyLoginTwoFactorEnterTotpCode: {Authenticator-app code entry of the 2FA flow, opened in the CDS container.
ReadonlyLoginTwoFactorEntrypoint: {Trusted-device / 2FA entrypoint, opened in the CDS container.
ReadonlyLoginTwoFactorMethodPicker: {"Try another way" method picker of the 2FA flow, opened in the CDS container.
ReadonlyMediaComments: { kind: "native" }Comment list / composer bottomsheet, opened over a feed media or reel.
ReadonlyMyProfile: { kind: "native" }The viewer's own profile (SelfFragment:self_profile, Android 451) — a
screen of its own, not a variant of UserProfile.
ReadonlyMyProfileMediaTab: { kind: "native" }The media grid tab inside the viewer's own profile (ProfileMediaTabFragment:self_profile, Android 451).
ReadonlyPostOpenedFromLink: { kind: "native" }Short-URL feed: one media opened full-screen, from a feed post or a shared short link (/p/<code>/).
ReadonlyProfileMediaTab: { kind: "native" }The media grid tab inside a profile (ProfileMediaTabFragment:profile, Android 451).
ReadonlyProfilePostsFeed: { kind: "native" }The posts feed of a profile's media grid: the media opened full-screen at
one item, swiped through (ContextualFeedFragment:feed_contextual, Android
451; the public name is ProfilePostsFeedScreen).
ReadonlyReelsViewer: { kind: "native" }Reels viewer: a clip opened full-screen and swiped through.
ReadonlyRegistrationBirthday: { appId: "com.bloks.www.bloks.caa.reg.birthday"; host: "cds"; kind: "bloks" }Registration's "What's your birthday?" screen, pushed by the accepted password.
ReadonlyRegistrationConfirmationCode: {Registration's "Enter the confirmation code" screen, pushed by the send-confirmation answer.
ReadonlyRegistrationName: {Registration's "What's your name?" screen, pushed by the accepted birthday.
ReadonlyRegistrationPassword: { appId: "com.bloks.www.bloks.caa.reg.password"; host: "cds"; kind: "bloks" }Registration's "Create a password" screen, pushed by the accepted confirmation code.
ReadonlyRegistrationPhoneNumber: {Registration's first screen, "What's your phone number?": the Bloks app
the login home's "Create new account" answer pushes in the CDS container
(com.bloks.www.bloks.caa.reg.contactpoint_phone). Every later
registration screen opens in the same container, and the recorded REST
calls of the whole registration report this screen as their client
endpoint (Android 429 sign-up recording of 2026-05-15).
ReadonlyRegistrationTermsOfService: { appId: "com.bloks.www.bloks.caa.reg.tos"; host: "cds"; kind: "bloks" }Registration's terms and policies screen ("I agree"), pushed by the accepted username.
ReadonlyRegistrationUsername: { appId: "com.bloks.www.bloks.caa.reg.username"; host: "cds"; kind: "bloks" }Registration's "Create a username" screen, pushed by the accepted name.
ReadonlyRepostNoteEditor: { kind: "native" }Repost composer of a short-url feed post: the note was created and its text
is typed here (the Android 450 chain's ordinal 3, RepostComposerFragment).
ReadonlySaveCredentials: {"Save your login info" prompt shown over the feed after a login.
ReadonlySearchInput: { kind: "native" }Typeahead search screen: the query field is being typed into.
ReadonlySearchResultsAccountsTab: { kind: "native" }The same SERP screen switched to its Accounts tab (Android 451).
ReadonlySearchResultsTopTab: { kind: "native" }Search-results (SERP) screen on its Top tab, opened on submit from the typeahead.
ReadonlyUserProfile: { kind: "native" }A user's profile (UserDetailFragment:profile, Android 451).
The screens the library models, by their meaning-only identity. A native screen's identity is not its module (two screens may log the same module:
UserDetailFragment:profileandProfileMediaTabFragment:profileare two screens); a Bloks screen's identity is the app the server loads, not how a platform spells it. Each platform names the screen in its own catalog (Android:packages/core/src/android/android.navigation.ts; iOS names only the screens a recording shows).A
ScreenIdis a stable public identity: callers name screens by it (MobileScreens.*,screenOf(id)), so renaming one is a breaking change of the public API. Navigation is process state and is never persisted, so a rename involves no snapshot migration.