Flinku Docs

Catch-all routing

Automatically turn any URL on your subdomain into a deep link. No need to create links manually. Perfect for apps that generate dynamic content like user profiles, products, orders, or businesses.

Available on Indie and Studio plans.

The problem it solves

Standard Flinku links are created one at a time in the dashboard or via API. This works great for marketing campaigns and fixed destinations, but not for dynamic content. If your app has thousands of products, user profiles, or restaurant listings, you can't pre-create a link for each one.

Catch-all routing solves this. Once enabled, any path on your subdomain that doesn't match an existing link is automatically handled as a deep link using your app's URI scheme. Your app can generate share URLs freely. Flinku handles the rest.

// User shares a profile link from your app

yourapp.flku.dev/profile/ahmed123

// App installed → opens immediately

yourscheme://profile/ahmed123

// App not installed → App Store → on first launch

Flinku.match() returns "yourscheme://profile/ahmed123"

Setup

  1. Set your URI scheme: in the iOS and Android sections of project settings, enter your app's custom URL scheme (the part before ://). For example, if your app opens myapp://product/123, enter myapp.

    Find your URI scheme in Xcode → Info → URL Types (iOS) or AndroidManifest.xml → intent-filter with android:scheme (Android).

  2. Enable catch-all routing: in project Settings, scroll down to the Catch-all Routing section and toggle it on. Save the project.
ℹ️Info
Catch-all routing only fires for paths that don't match an existing Flinku link. Existing links always take priority.

How it works

When someone visits an unknown path on your subdomain, Flinku:

  1. Checks if the project has catch-all routing enabled.
  2. Constructs a deep link: uriScheme://path.
  3. Stores a fingerprint for deferred deep linking (same as a regular link).
  4. Serves the deepview page with your app icon, colors, and branding.

On desktop, visitors see a store download page. On mobile, they see the deepview page and can open the app directly or go to the store to download it.

Deferred deep linking

Catch-all routing fully supports deferred deep linking. When a user without the app clicks a catch-all URL, installs the app, and opens it for the first time, Flinku.match() returns the original deep link. No changes needed in your SDK integration.

dart
// Flutter: no changes needed, same match() call
final result = await Flinku.match();
if (result.matched) {
// deepLink = e.g. 'myapp://profile/ahmed123'
handleDeepLink(result.deepLink);
}
swift
// iOS Swift
Flinku.match { result in
if result.matched, let deepLink = result.deepLink {
// deepLink = 'myapp://profile/ahmed123'
handleDeepLink(deepLink)
}
}
kotlin
// Android Kotlin
Flinku.match(this) { result ->
if (result.matched) {
// result.deepLink = 'myapp://profile/ahmed123'
handleDeepLink(result.deepLink)
}
}

Generating share URLs in your app

With catch-all routing enabled, your app constructs share URLs on the fly with no API calls needed. Just build the URL using your subdomain and the path for your content:

dart
// Flutter: generate a share URL for any content
String getShareUrl(String path) {
return 'https://yourapp.flku.dev/' + path;
}
 
// Examples
getShareUrl('product/123'); // → yourapp.flku.dev/product/123
getShareUrl('profile/ahmed'); // → yourapp.flku.dev/profile/ahmed
getShareUrl('order/ABC456'); // → yourapp.flku.dev/order/ABC456
💡Tip
If you have a custom domain configured (Indie or Studio plan), use that instead of the flku.dev subdomain: https://links.yourapp.com/product/123

Catch-all routing vs. API link creation

FeatureCatch-all routingAPI link creation
SetupOne toggle in settingsAPI call per link
Click analyticsProject-level onlyPer-link analytics
QR codesNot availableAuto-generated
Custom slugsPath becomes the slugCustom slugs supported
OG social previewProject defaultsPer-link customizable
Deferred deep linking✅ Full support✅ Full support
Best forHigh-volume dynamic contentCampaigns, influencer links

Important notes

  • URI scheme is required. If catch-all is enabled without a URI scheme set, the deepview page shows but the app won't open. Set your scheme in iOS and Android settings first.
  • Existing links take priority. If a path matches an existing Flinku link, that link's configuration applies. Catch-all only handles unknown paths.
  • Multi-segment paths work. Both /product/123 and /category/food/item/456 are supported.
  • Click limits apply. Catch-all clicks count toward your plan's monthly click limit the same as regular links.