For AI agents: fetch the complete documentation index at /llms.txt, the full documentation corpus at /llms-full.txt, the agent skill at /skill.md, or this page as Markdown at /docs/mobile/deep-links.md (or send Accept: text/markdown).
Deep links and app configuration
The URL scheme, the screen route map, and the bundled configuration contract.
One env value derives the scheme
EXPO_PUBLIC_APP_SCHEME feeds apps/mobile/app.config.ts, which derives the deep-link scheme and the production allowed origins through the same mobile auth configuration the sign-in flow uses. The value is validated — lowercase scheme characters only — and reserved schemes such as http, https, file, javascript, data, exp, and exps are refused. The shipped default is supastack.
Both identifiers ship as com.supastack.app in app.json (ios.bundleIdentifier and android.package); rename them before the first store upload alongside the scheme.
# apps/mobile/.env.local
EXPO_PUBLIC_APP_SCHEME=supastackLink shapes the app accepts
Deep links are custom-scheme only: <scheme>://auth/callback completes a sign-in handoff, and <scheme>://invite/<token> opens the invite screen, which posts the token to the invitations accept route. Universal links are not configured — app.json declares no associatedDomains — so every link resolves through the scheme.
The expo-router map under apps/mobile/app: index is the sign-in screen, onboarding and new-organization handle first-run setup, paywall presents purchases, and feedback is a standalone screen that works signed out. Inside the (app) group the tabs are home, chat, notifications, and settings; content, commerce, and assistant are hidden screens reached from home quick actions, and settings holds its own sub-stack of screens.
Bundled means both sides must agree
Public Expo values are baked into the distributed binary, while the server validates mobile callbacks against MOBILE_ALLOWED_ORIGINS per request. The pair must match: a scheme or origin change means a new app build and a server deploy, never one or the other.
No over-the-air channel
The kit ships no expo-updates dependency and no updates configuration — JavaScript changes reach users only through new store builds. Keep the API compatible with the oldest supported build, or gate new capability behind server-driven state.
Verification and troubleshooting
Test cold-start links, links arriving while the app runs in the background, and a link received while signed out. If a link opens a store listing or a browser instead of the app, the installed build's scheme does not match EXPO_PUBLIC_APP_SCHEME.