RORK LABJP
MAX — Rork Max is built on Claude Code and Claude Opus 4.6, generating native Swift apps directly instead of React NativeAPPLE — Rork Max targets the whole Apple ecosystem: iPhone, iPad, Apple Watch, Apple TV, Vision Pro, and iMessageWORKFLOW — In practice, users settle into letting the AI scaffold while they rewrite the state management and data layer themselvesSEED — Rork raised a $15M seed led by Left Lane Capital in April, with Peak XV, True Ventures, and a16z Speedrun joiningPAPERLINE — Rork acquired app builder Paperline and says it will stay acquisitive to bring in engineering talentREVIEW — Three-month revisit reviews are growing, clarifying where the tool shines and where it doesn'tMAX — Rork Max is built on Claude Code and Claude Opus 4.6, generating native Swift apps directly instead of React NativeAPPLE — Rork Max targets the whole Apple ecosystem: iPhone, iPad, Apple Watch, Apple TV, Vision Pro, and iMessageWORKFLOW — In practice, users settle into letting the AI scaffold while they rewrite the state management and data layer themselvesSEED — Rork raised a $15M seed led by Left Lane Capital in April, with Peak XV, True Ventures, and a16z Speedrun joiningPAPERLINE — Rork acquired app builder Paperline and says it will stay acquisitive to bring in engineering talentREVIEW — Three-month revisit reviews are growing, clarifying where the tool shines and where it doesn't
Articles/Dev Tools
Dev Tools/2026-06-16Advanced

Landing Users on the Right Screen Right After Install — Deferred Deep Links for Rork Apps

When someone follows a campaign link and installs through the store, the 'where did they come from' context is gone by launch time. Here is how to implement deferred deep linking in a Rork-built app without any third-party SDK.

Rork502Deep Link2Expo139Universal Links2Onboarding8Attribution5

Premium Article

Someone taps "Open in app" on a page showcasing a specific wallpaper theme, installs, launches — and lands on the plain home screen. They came for that theme, and now they have to hunt for it from scratch. When I started running campaigns as a solo developer, this was exactly what I was leaking.

The cause is simple. When a user taps a link but the app isn't installed, they get bounced to the App Store / Google Play first. The app installed and launched from the store no longer receives any "which link did they come from" context. The link's query parameters disappear the moment the store steps in between.

Deferred deep linking bridges that break. An SDK like Branch or AppsFlyer solves it in one shot, but those SDKs hoard a lot of personal data for attribution and carry a monthly cost. For both privacy and cost reasons, I chose to build a lightweight version myself. Here is that design, written for a Rork (Expo / React Native) app.

Start by sorting out "there are three paths"

Recovering a deferred deep link has three paths with different reliability. Conflating them makes the implementation needlessly complex.

  1. Already-installed users (Universal Links / App Links work directly — most reliable)
  2. iOS installs from the same browser (via clipboard — conditionally reliable)
  3. Everything else (server-side fingerprint matching — probabilistic)

Path 1 isn't deferred at all; it's a normal deep link, so I won't cover it here. The problem is paths 2 and 3. To carry information across the "break" that installation creates, you have to stash it temporarily outside the app — on a server or in the clipboard.

In my setup, iOS uses path 2 primarily with path 3 as a fallback. Android gets its path officially from Google Play's Install Referrer API, so I use that. The fact that the mechanisms differ entirely by platform is worth internalizing up front.

Stash a "fingerprint" on your server from the landing page

Without a third-party SDK, you record the moment-of-tap context on your own backend — only loose, non-identifying features (a fingerprint).

// landing.ts — call this the moment the landing page is tapped
async function recordClick(targetPath: string) {
  const fp = {
    target: targetPath,                  // the screen to land on (e.g. /theme/aurora)
    platform: /iphone|ipad/i.test(navigator.userAgent) ? "ios" : "other",
    lang: navigator.language,
    tzOffset: new Date().getTimezoneOffset(),
    screen: `${screen.width}x${screen.height}`,
    ts: Date.now(),
  };
  // On iOS, also keep a copy in the clipboard (the primary path-2 mechanism)
  try {
    await navigator.clipboard.writeText(`rork-dl:${targetPath}`);
  } catch {
    // If clipboard is unavailable, defer to path-3 server matching
  }
  await fetch("https://api.example.com/dl/click", {
    method: "POST",
    headers: { "content-type": "application/json" },
    body: JSON.stringify(fp),
  });
  location.href = "https://apps.apple.com/app/idXXXXXXXX"; // off to the store
}

Writing to the clipboard is the highest-confidence clue on iOS — it's roughly equivalent to "a first launch coming from the same Safari session." But if the user overwrites the clipboard with another action, it's gone, so keep it as the primary mechanism only and run server matching alongside as insurance.

Thank you for reading this far.

Continue Reading

What follows includes implementation code, benchmarks, and practical content we hope you'll find useful. This site runs without ads — server and development costs are supported entirely by members like you. If it's been helpful, we'd be truly grateful for your support.

WHAT YOU'LL LEARN
Why link context vanishes through the store, and how to choose among three recovery paths
Recovering the destination with your own backend + fingerprint matching, no third-party SDK
The matching window and confidence threshold that prevent wrong-screen landings
Secure payment via Stripe · Cancel anytime

Unlock This Article

Get full access to the rest of this article. Buy once, read anytime. This site is ad-free — your support goes directly toward keeping it running.

or
Unlock all articles with Membership →
Share

Thank You for Reading

Rork Lab is ad-free, supported entirely by members like you. We publish practical guides daily with implementation code, benchmarks, and production-ready patterns. If you've found it useful, we'd love to have you on board.

  • Copy-paste ready implementation code
  • New advanced guides published daily
  • $5/mo or $10 for lifetime access
View Membership →

Related Articles

Dev Tools2026-06-13
You Only Get to Ask Once — Implementing a Notification Soft-Ask in Your Rork App to Lift Opt-In
On iOS, once a user denies the notification prompt you can never show it again. In a Rork (Expo) app, instead of firing the system prompt on launch, we add our own soft-ask screen and only request permission once the value has landed. Built with expo-notifications, covering Android 13 POST_NOTIFICATIONS, a recovery path after denial, and opt-in measurement.
Dev Tools2026-07-10
Adding React Compiler to Expo Let Me Delete 41 Hand-Written memo Calls
I enabled React Compiler on Rork-generated React Native screens and measured the rerender counts with Profiler. Here is how I decided which memo and useCallback calls were safe to delete, how to find the components the compiler bailed out on, and how to catch regressions in CI.
Dev Tools2026-07-10
Every Key You Ship Is Public: Secret Boundaries and Rotation for Rork-Generated Apps
Unzip your own .ipa, run strings, and your environment variables are right there in plain text. Here is how I sort keys into three tiers, move the dangerous ones behind an edge proxy, and keep a rotation runbook that assumes leakage.
📚RECOMMENDED BOOKS
Build a Large Language Model (From Scratch)
Sebastian Raschka
LLM Dev
Prompt Engineering for LLMs
Berryman & Ziegler
Prompting
AI Engineering
Chip Huyen
AI Eng
* Contains affiliate links
See all →