2026 · Open source
react-native-esim-compatibility-checker
Open-source React Native library that asks the device itself whether it supports eSIM — native Swift and Kotlin, tested, and running in production in GoSIM.
- iOS
- Android
- npm package
- Role
- Author & maintainer
- Company
- Open source
- Year
- 2026
- Stack
- TypeScriptSwiftKotlinReact Native (Turbo Modules)Jest
const result = await checkEsimSupport()
// 'supported' | 'unsupported' | 'unknown'
if (result.state === 'supported') {
startEsimFlow()
}Context
Every eSIM app has the same support problem: users buy a plan, then discover their phone can't install it. The usual advice — "dial *#06# and look for an EID" — confuses users, and many apps guess from a hard-coded list of models.
Role
Design, implementation, tests, npm publication, and integration into the GoSIM app.
Challenge
- No single API tells the truth. Apple's
supportsCellularPlan()depends on carrier entitlements and returnsfalseon many eSIM-capable iPhones; Android signals depend on OS version and carrier builds. - Both errors are costly. Blocking a capable device loses a sale; allowing an incapable one creates a refund.
Approach
Three answers, not two
Returns supported, unsupported or unknown — unknown means "ask the user" instead of guessing.
Per-platform rules
- iPhone: hardware generation numbers split exactly where eSIM starts — a comparison that stays correct for future models.
- iPad: a small table of eSIM-capable families plus cellular-radio detection, since Wi-Fi models share identifiers.
- Android:
EuiccManager.isEnabled()from Android 9 and thetelephony.euiccfeature from Android 13 — either positive wins.
Each result reports which signal decided and warns when signals disagree.
A catalog that updates without releases
Bundled, searchable catalog of eSIM devices for "supported devices" screens; works offline, refreshable from a URL, and malformed updates are rejected.
Results
- Published on npm with native Swift and Kotlin modules and a Jest test suite.
- 150+ downloads in the first month.
- Powers GoSIM's pre-checkout compatibility screen in production.