Repository navigation
NewDot wildcard deeplinks #99412
Description
Sub-issue of #98153, tracking the NewDot wildcard deeplink change from #99347 (+ Mobile-Expensify#14073).
Problem
The set of new.expensify.com / staging.new.expensify.com paths that open the app is a hand-maintained allowlist duplicated across the iOS AASA and Android manifests (App + Mobile-Expensify). Every new NewDot route requires a native change to be deep-linkable, and any path not in the list opens in the browser instead of the app.
Solution
Replace the hand-maintained NewDot deeplink path allowlists with a wildcard, so every new.expensify.com / staging.new.expensify.com path opens the app and new routes need no native change:
- iOS: AASA
componentscollapsed to{"/": "*"}. - Android:
pathPrefixentries replaced by host-only<data>, mirrored in Mobile-Expensify. - Expensify Classic (
www.expensify.com/expensify.com) links are unchanged — the wildcard must not leak into the Classic domains.
Test steps
Note on iOS: the AASA is fetched from the server, so the wildcard only takes effect once this branch's
.well-known/apple-app-site-associationis deployed tonew.expensify.com/staging.new.expensify.com. To test before deploy, append?mode=developerto theapplinks:entries in the entitlements and enable Settings > Developer > Associated Domains Development on the device.
1. Android — previously unlisted NewDot path opens the app (standalone + HybridApp)
- Open a path that was not in the old allowlist, e.g.
https://new.expensify.com/workspace/<policyID>/members→ verify the app opens directly on the Workspace members page (not Chrome). - Open a path that was already in the allowlist, e.g.
https://new.expensify.com/r/<reportID>→ verify the report opens in the app exactly as before (no regression). - Open an unsupported path, e.g.
https://new.expensify.com/some-unsupported-path→ verify the app opens on theNot foundpage.
2. Android — Expensify Classic links are unchanged (HybridApp)
- Open
https://www.expensify.com/inbox→ verify the app opens on the OldDot Inbox (unchanged). - Open
https://www.expensify.com/expensify-classic/hubs/getting-started/(a Classic path not in the OldDot allowlist) → verify it opens in the browser and not the app (wildcard did not leak into Classic domains).
3. iOS — universal links resolve to the app (standalone + HybridApp)
- Build/install with the AASA wildcard available (see note above).
- Long-press a
https://new.expensify.com/settings/profilelink in Notes/Messages → verify "Open in New Expensify" is offered and opens Settings > Profile in the app. - Repeat with a previously unlisted path such as
https://new.expensify.com/workspace/<policyID>/members→ verify it opens in the app rather than Safari. - On HybridApp, tap
https://www.expensify.com/inbox→ verify it opens the OldDot Inbox as before (www.expensify.comserves its own AASA, unchanged by this work).
QA steps
Same as tests, Android only. iOS relies on the server-deployed AASA, so verify on staging/production once the .well-known/apple-app-site-association change is deployed.
Activity
war-in commentedon Aug 25, 2026
@MelvinBot assign @Julesssss and @aimane-chnaif
MelvinBot commentedon Aug 25, 2026
🤖 Done — assigned
Julesssssandaimane-chnaifto this issue.view run
melvin-bot commentedon Aug 31, 2026
@Julesssss, @war-in, @aimane-chnaif Eep! 4 days overdue now. Issues have feelings too...
aimane-chnaif commentedon Aug 31, 2026
Not overdue
16 remaining items
war-in commentedon Sep 9, 2026
@mallenexpensify PRs are still in draft, so we're definitely not ready for payment
[-][Due for payment 2026-09-07] NewDot wildcard deeplinks[/-][+]NewDot wildcard deeplinks[/+]melvin-bot commentedon Sep 15, 2026
@Julesssss, @war-in, @aimane-chnaif Huh... This is 4 days overdue. Who can take care of this?
Julesssss commentedon Sep 17, 2026
Related issue in progress
melvin-bot commentedon Oct 12, 2026
This issue has not been updated in over 15 days. @Julesssss, @war-in, @aimane-chnaif eroding to Monthly issue.
P.S. Is everyone reading this sure this is really a near-term priority? Be brave: if you disagree, go ahead and close it out. If someone disagrees, they'll reopen it, and if they don't: one less thing to do!
Julesssss commentedon Oct 21, 2026
PR still in testing