// the find
kingstinct/react-native-healthkit
HealthKit bindings for React Native with TypeScript
HealthKit bindings for React Native, now built on react-native-nitro-modules after a v9 rewrite. Covers the full HealthKit surface — quantity types, category types, workouts, ECGs, medications, clinical records — with TypeScript types that mirror the native naming conventions. Target audience is iOS health/fitness app developers who want to avoid writing their own Swift bridge.
The nitro-modules migration in v9 is the right call — JSI-based, no more bridge overhead, and the codegen from nitro.json means the TypeScript specs and Swift implementations stay in sync. Anchor-based sync support (queryQuantitySamplesWithAnchor) is genuinely useful for apps that need incremental delta fetches rather than re-querying everything. The type coverage is unusually thorough: 100+ quantity types, 63 category types, and workout proxies that expose methods like getWorkoutRoutes rather than just raw data blobs. The Expo config plugin handles plist and capability setup automatically, which eliminates most of the manual Xcode fumbling.
Clinical records support is stranded on a 3.x branch and has been for a while — the README acknowledges they haven't had time to fix it, which is honest but a real gap if you need FHIR data. Android is explicitly out of scope, so this is iOS-only; the README points you at separate libraries, which means a cross-platform health app needs two completely different integration surfaces. The crash-on-missing-authorization behavior is a landmine — if you render a hook before the permission request resolves, your app crashes silently rather than returning null or throwing a typed error, which will bite every new adopter at least once. No web/SSR stub, so if you're using Expo Router with universal rendering you'll need to add your own no-op shim.