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.
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
- 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 opensmyapp://product/123, entermyapp.Find your URI scheme in Xcode → Info → URL Types (iOS) or
AndroidManifest.xml→ intent-filter withandroid:scheme(Android). - Enable catch-all routing: in project Settings, scroll down to the Catch-all Routing section and toggle it on. Save the project.
How it works
When someone visits an unknown path on your subdomain, Flinku:
- Checks if the project has catch-all routing enabled.
- Constructs a deep link:
uriScheme://path. - Stores a fingerprint for deferred deep linking (same as a regular link).
- 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.
// Flutter: no changes needed, same match() callfinal result = await Flinku.match();if (result.matched) {// deepLink = e.g. 'myapp://profile/ahmed123'handleDeepLink(result.deepLink);}
// iOS SwiftFlinku.match { result inif result.matched, let deepLink = result.deepLink {// deepLink = 'myapp://profile/ahmed123'handleDeepLink(deepLink)}}
// Android KotlinFlinku.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:
// Flutter: generate a share URL for any contentString getShareUrl(String path) {return 'https://yourapp.flku.dev/' + path;}// ExamplesgetShareUrl('product/123'); // → yourapp.flku.dev/product/123getShareUrl('profile/ahmed'); // → yourapp.flku.dev/profile/ahmedgetShareUrl('order/ABC456'); // → yourapp.flku.dev/order/ABC456
Catch-all routing vs. API link creation
| Feature | Catch-all routing | API link creation |
|---|---|---|
| Setup | One toggle in settings | API call per link |
| Click analytics | Project-level only | Per-link analytics |
| QR codes | Not available | Auto-generated |
| Custom slugs | Path becomes the slug | Custom slugs supported |
| OG social preview | Project defaults | Per-link customizable |
| Deferred deep linking | ✅ Full support | ✅ Full support |
| Best for | High-volume dynamic content | Campaigns, 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/123and/category/food/item/456are supported. - Click limits apply. Catch-all clicks count toward your plan's monthly click limit the same as regular links.