Skip to content

NewDot wildcard deeplinks #99412

Open
Open

Description

@MelvinBot

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 components collapsed to {"/": "*"}.
  • Android: pathPrefix entries 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-association is deployed to new.expensify.com / staging.new.expensify.com. To test before deploy, append ?mode=developer to the applinks: 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)

  1. 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).
  2. 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).
  3. Open an unsupported path, e.g. https://new.expensify.com/some-unsupported-path → verify the app opens on the Not found page.

2. Android — Expensify Classic links are unchanged (HybridApp)

  1. Open https://www.expensify.com/inbox → verify the app opens on the OldDot Inbox (unchanged).
  2. 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)

  1. Build/install with the AASA wildcard available (see note above).
  2. Long-press a https://new.expensify.com/settings/profile link in Notes/Messages → verify "Open in New Expensify" is offered and opens Settings > Profile in the app.
  3. Repeat with a previously unlisted path such as https://new.expensify.com/workspace/<policyID>/members → verify it opens in the app rather than Safari.
  4. On HybridApp, tap https://www.expensify.com/inbox → verify it opens the OldDot Inbox as before (www.expensify.com serves 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.

Issue OwnerCurrent Issue Owner: @aimane-chnaif

Activity

  1. added
    ImprovementItem broken or needs improvement.
    InternalRequires API changes or must be handled by Expensify staff
    on Aug 25, 2026
  2. war-in commented on Aug 25, 2026

    @war-in
    Contributor
  3. MelvinBot commented on Aug 25, 2026

    @MelvinBot
    ContributorAuthor

    🤖 Done — assigned Julesssss and aimane-chnaif to this issue.


    view run

  4. melvin-bot commented on Aug 31, 2026

    @melvin-bot

    @Julesssss, @war-in, @aimane-chnaif Eep! 4 days overdue now. Issues have feelings too...

  5. aimane-chnaif commented on Aug 31, 2026

    @aimane-chnaif
    Contributor

    Not overdue

  6. 16 remaining items

  7. war-in commented on Sep 9, 2026

    @war-in
    Contributor

    @mallenexpensify PRs are still in draft, so we're definitely not ready for payment

  8. changed the title [-][Due for payment 2026-09-07] NewDot wildcard deeplinks[/-] [+]NewDot wildcard deeplinks[/+] on Sep 10, 2026
  9. removed their assignment
    on Sep 10, 2026
  10. melvin-bot commented on Sep 15, 2026

    @melvin-bot

    @Julesssss, @war-in, @aimane-chnaif Huh... This is 4 days overdue. Who can take care of this?

  11. Julesssss commented on Sep 17, 2026

    @Julesssss
    Contributor

    Related issue in progress

  12. melvin-bot commented on Oct 12, 2026

    @melvin-bot

    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!

  13. Julesssss commented on Oct 21, 2026

    @Julesssss
    Contributor

    PR still in testing

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

EngineeringImprovementItem broken or needs improvement.InternalRequires API changes or must be handled by Expensify staffMonthlyKSv2ReviewingHas a PR in review

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions