Skip to content
All projects

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.

Personal
  • iOS
  • Android
  • npm package
Role
Author & maintainer
Company
Open source
Year
2026
Stack
TypeScriptSwiftKotlinReact Native (Turbo Modules)Jest
Published on npm
150+ downloads in its first month
Used in production by GoSIM
npm i react-native-esim-compatibility-checker
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 returns false on 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 the telephony.euicc feature 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.
Next projectEfficy — store audits & performance scoring