Documentation
Every language and framework
Capacitor, Ionic, Cordova, React Native, Flutter, native Swift, native Kotlin and the web. For each: whether the SDK covers it, what you write, and what you do yourself.
All eight of these work. What differs is whether you import a package or write two HTTP calls, and this page says which — for every one, on one screen, so that nobody has to conclude from silence that their language is unsupported.
| Language or framework | What we give you | What you write | What you do yourself |
|---|---|---|---|
| CapacitorSDK, and run in a real app | The package, and it is the platform it was built against. | Two lines: init, and a handler that routes on the link. | Nothing beyond your own routing. Universal links and App Links still need the platform setup every deep link needs, which is the same work for everybody. |
| IonicRuns on CapacitorSDK, and run in a real app | The same package. Ionic Angular, React and Vue are all covered by it. | The same two lines, in whichever framework you build the UI with. | Route the link through your own router — Angular’s Router, React Router or Vue Router. The SDK hands you the link; where it goes is your application’s business. |
| CordovaSDK, not yet run in a real app | The package, with a Cordova platform layer that handles both link routes. | The same two lines, plus two lines in index.html. | Add the buffer in index.html above your bundle. Cordova can announce a link before your JavaScript exists, and nothing inside the SDK can recover a call that happened before it was there. |
| React NativeSDK, not yet run in a real app | The package, with a platform layer that takes storage and Linking from you. | The two lines, plus a storage adapter and one global assignment. | Pass in AsyncStorage and Linking. We cannot import them without making the package refuse to install in a Capacitor project.The link arrives through React Native’s own Linking module. |
| Web JavaScript and TypeScriptSDK, not yet run in a real app | The package. The page address is the link, so there is nothing to receive. | The two lines. | Nothing. localStorage is used automatically, and there is no deferred case on the web because there is no install. |
| Flutter and DartREST API — no package for this language | The REST API, which is what the package calls anyway. There is no Dart package. | Two HTTP calls with package:http, and the deferred sequence if you want it. | Receive the incoming URL, hold an install token between launches, and build the deferred first-launch handshake — that one is a sequence rather than an endpoint.The link arrives through app_links or uni_links, neither of them ours. |
| Native iOS — Swift and Objective-CREST API — no package for this language | The REST API, and the association file your app needs is already served. | Two URLSession calls, and the deferred sequence if you want it. | Handle the NSUserActivity your app already receives, keep an install token in the keychain or UserDefaults, and build the deferred handshake yourself.The link arrives through the continueUserActivity delegate method you already implement. |
| Native Android — Kotlin and JavaREST API — no package for this language | The REST API, and the Digital Asset Links file your app needs is already served. | Two HTTP calls, and the deferred sequence if you want it. | Read the intent data your activity already receives, keep an install token in SharedPreferences, and build the deferred handshake yourself.The link arrives through the Intent your launch activity already gets. |
What the three labels mean
- SDK, and run in a real app
- The package covers this, and it has been run inside a real application of this kind. Note the honest limit even here: no mobile platform has been run on a physical device by us — see the readiness note below.
- SDK, not yet run in a real app
- The package covers this and is unit-tested against a simulation of the platform’s documented behaviour. That proves our decisions are right if the platform behaves as documented. It does not prove that it does. You would be the first, and we would rather tell you than let you find out.
- REST API — no package for this language
- There is no package you can import, and the product works: the REST API is what the package calls anyway, and it is documented, versioned and covered by the same compatibility guarantee. You write the calls.
The limit that applies to all of them
We have not run any mobile platform on a physical device. What is proved by a running test is the file we serve, the matching behind it, and the whole web path end to end in a real browser. The tap itself — on an iPhone or on an Android handset — has been settled by neither of us, and the checklists for doing it are written and open.
That is not a caveat about your language. It applies equally to Capacitor, which is the best-covered thing on this page. We would rather say it than have you discover it.
If your language is not on this list
It still works, and the answer is the same as for Swift and Kotlin: the REST API is what the package calls anyway. Two POSTs with a publishable key resolve a link and record an event, in any language that can make an HTTP request.
If a package for your language would decide it for you, write to [email protected] and say so. What people ask for is what gets built, and we would rather hear it than guess.
Ask the documentation
It answers from these pages only, and links what it used. If the answer is not here it says so rather than guessing — then email [email protected].