{"_rev":"19-ed65ec8d1f75e8adb250376e8d832293","time":{"created":"2025-10-11T15:36:48.936Z","modified":"2025-10-11T15:36:49.588Z","0.0.1":"2025-10-10T22:14:29.403Z","0.0.2":"2025-10-11T10:31:26.104Z","0.0.3":"2025-10-11T11:19:52.520Z","0.0.4":"2025-10-11T11:57:05.499Z","0.0.5":"2025-10-11T12:53:48.235Z","0.0.6":"2025-10-11T13:53:59.479Z","0.0.7":"2025-10-11T15:18:19.632Z","0.0.8":"2025-10-11T15:36:49.245Z"},"_id":"@cometalabs/react-native-nitro-sensors","name":"@cometalabs/react-native-nitro-sensors","dist-tags":{"latest":"0.0.8"},"versions":{"0.0.8":{"name":"@cometalabs/react-native-nitro-sensors","version":"0.0.8","description":"A high-performance sensor library for React Native with native Swift/Kotlin implementations powered by Nitro Modules","main":"./lib/index","module":"./lib/index","types":"./lib/index.d.ts","react-native":"src/index","source":"./src/index","scripts":{"postinstall":"tsc || exit 0;","typecheck":"tsc --noEmit","clean":"rm -rf android/build node_modules/**/android/build lib","lint":"eslint \"**/*.{js,ts,tsx}\" --fix","lint-ci":"eslint \"**/*.{js,ts,tsx}\" -f @jamesacarr/github-actions","typescript":"tsc","specs":"typescript && nitrogen --logLevel=\"debug\""},"keywords":["react-native","nitro","nitro-modules","sensors","accelerometer","gyroscope","magnetometer","typescript","swift","kotlin","jsi"],"repository":{"type":"git","url":"git+https://github.com/CometaLabs/react-native-nitro-sensors.git"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"author":{"name":"Alexei Soliz","email":"alexei@cometalabs.io","url":"https://cometalabs.io"},"license":"MIT","bugs":{"url":"https://github.com/CometaLabs/react-native-nitro-sensors/issues"},"homepage":"https://cometalabs.io","devDependencies":{"@react-native/eslint-config":"0.81.1","@types/jest":"^29.5.12","@types/react":"^19.1.03","eslint":"^8.57.0","eslint-config-prettier":"^9.1.0","eslint-plugin-prettier":"^5.2.1","nitrogen":"*","prettier":"^3.3.3","react":"19.1.0","react-native":"0.81.1","react-native-nitro-modules":"*","typescript":"^5.8.3"},"peerDependencies":{"react":"*","react-native":"*","react-native-nitro-modules":"*"},"eslintConfig":{"root":true,"extends":["@react-native","prettier"],"plugins":["prettier"],"rules":{"prettier/prettier":["warn",{"quoteProps":"consistent","singleQuote":true,"tabWidth":2,"trailingComma":"es5","useTabs":false}]}},"eslintIgnore":["node_modules/","lib/"],"prettier":{"quoteProps":"consistent","singleQuote":true,"tabWidth":2,"trailingComma":"es5","useTabs":false,"semi":false},"_id":"@cometalabs/react-native-nitro-sensors@0.0.8","gitHead":"ea7fb9054e8efbb9008a3aa7ba429967ea2fa5be","_nodeVersion":"22.17.1","_npmVersion":"10.9.2","dist":{"integrity":"sha512-sj8hxGpdezAx8ZDDZYRKFAinH49grG/vcRxmqnQ48EQTjsjKdJNZ1I9A/gH19pIHDLKmTeOCO2CSdLjOMH4mNw==","shasum":"814feba0ad4377d0172f8cef3777028ab6ac9936","tarball":"https://registry.npmjs.org/@cometalabs/react-native-nitro-sensors/-/react-native-nitro-sensors-0.0.8.tgz","fileCount":150,"unpackedSize":332826,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCJ0xjucPCOzur/AwK8i+m+s6RB6yNcMdsNhdVT19GZqAIgfYShn5DizT7LPrK2L9Mwswfa4jFB4+x3RzgGblxdr/4="}]},"_npmUser":{"name":"emprecario","email":"alex@cometalabs.io"},"directories":{},"maintainers":[{"name":"emprecario","email":"alex@cometalabs.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/react-native-nitro-sensors_0.0.8_1760197009042_0.848093882306765"},"_hasShrinkwrap":false}},"maintainers":[{"name":"emprecario","email":"alex@cometalabs.io"}],"description":"A high-performance sensor library for React Native with native Swift/Kotlin implementations powered by Nitro Modules","homepage":"https://cometalabs.io","keywords":["react-native","nitro","nitro-modules","sensors","accelerometer","gyroscope","magnetometer","typescript","swift","kotlin","jsi"],"repository":{"type":"git","url":"git+https://github.com/CometaLabs/react-native-nitro-sensors.git"},"author":{"name":"Alexei Soliz","email":"alexei@cometalabs.io","url":"https://cometalabs.io"},"bugs":{"url":"https://github.com/CometaLabs/react-native-nitro-sensors/issues"},"license":"MIT","readme":"<a href=\"https://cometalabs.io\">\n  <picture>\n    <source srcset=\"https://cometalabs-assets.s3.amazonaws.com/nitro-sensors/assets/cometa-banner.png\" />\n    <img alt=\"Cometa\" src=\"https://cometalabs-assets.s3.amazonaws.com/nitro-sensors/assets/cometa-banner.png\" />\n  </picture>\n</a>\n\n<br />\n# 🚀 Nitro Sensors\n\n**nitro-sensors** is a high-performance sensor library for React Native. Built with Nitro Modules for zero-bridge overhead and native performance.\n\n## Features\n\n- ⚡️ Zero-bridge overhead using JSI/C++ through Nitro Modules\n- 📱 Native implementations in Swift (iOS) and Kotlin (Android)\n- 🎯 Full TypeScript support with auto-generated specs\n- 🔥 Powered by Nitro Modules\n\n## Installation\n\n### npm\n```bash\nnpm i @cometalabs/react-native-nitro-sensors react-native-nitro-modules\n```\n\n### pnpm\n```bash\npnpm add @cometalabs/react-native-nitro-sensors react-native-nitro-modules\n```\n\n### bun\n```bash\nbun add @cometalabs/react-native-nitro-sensors react-native-nitro-modules\n```\n\n> Nitro Modules requires react-native 0.75+ or higher\n\n## Usage\n\n### Accelerometer\n\nImport the `Accelerometer` from `@cometalabs/react-native-nitro-sensors`:\n\n```typescript\nimport { Accelerometer } from '@cometalabs/react-native-nitro-sensors'\n\n// Check availability\nconst available = Accelerometer.isAvailable()\nconst isActive = Accelerometer.isActive()\n\n// Request permissions (iOS requires Motion permission)\nconst permission = await Accelerometer.requestPermissions()\nif (!permission.granted) {\n  if (!permission.canRequestAgain) {\n    console.log('Please enable Motion & Fitness permission in Settings')\n  }\n  return\n}\n\n// Configure update interval (optional)\nAccelerometer.setUpdateInterval(16.67) // Update every 16.67ms (~60 Hz)\n\n// Subscribe to updates\nconst subscription = Accelerometer.addListener((data) => {\n  console.log(`x: ${data.x}, y: ${data.y}, z: ${data.z}`)\n  console.log(`timestamp: ${data.timestamp}`)\n})\n\n// Manual control (optional - listeners auto-start/stop)\nAccelerometer.startUpdates()\nAccelerometer.stopUpdates()\n\n// Remove all listeners\nAccelerometer.removeAllListeners()\n\n// Unsubscribe single listener\nsubscription.remove()\n```\n\n### Barometer\n\nImport the `Barometer` from `@cometalabs/react-native-nitro-sensors`:\n\n```typescript\nimport { Barometer } from '@cometalabs/react-native-nitro-sensors'\n\n// Check availability\nconst available = Barometer.isAvailable()\nconst hasRelativeAltitude = Barometer.isRelativeAltitudeAvailable()\nconst hasAbsoluteAltitude = Barometer.isAbsoluteAltitudeAvailable()\n\n// Request permissions (iOS requires Motion permission)\nconst permission = await Barometer.requestPermissions()\nif (!permission.granted) {\n  if (!permission.canRequestAgain) {\n    console.log('Please enable Motion & Fitness permission in Settings')\n  }\n  return\n}\n\n// Configure altitude mode (optional, iOS 15+ only for absolute)\nif (hasAbsoluteAltitude) {\n  Barometer.setAltitudeMode('absolute') // GPS-based altitude\n} else {\n  Barometer.setAltitudeMode('relative') // Pressure-based altitude (default)\n}\n\n// Configure update interval (optional)\nBarometer.setUpdateInterval(100) // Update every 100ms\n\n// Set reference altitude for relative measurements (optional)\nBarometer.setReferenceAltitude(0) // Reset to current position\n\n// Subscribe to updates\nconst subscription = Barometer.addListener((data) => {\n  // In 'relative' mode (default):\n  console.log(`Pressure: ${data.pressure} hPa`)\n  console.log(`Relative Altitude: ${data.relativeAltitude} m`)\n  \n  // In 'absolute' mode (iOS 15+ only):\n  // - absoluteAltitude contains GPS-based altitude\n  // - pressure and relativeAltitude will be 0 (not available in this mode)\n  if (data.absoluteAltitude !== undefined) {\n    console.log(`Absolute Altitude: ${data.absoluteAltitude} m (GPS)`)\n  }\n  \n  console.log(`Timestamp: ${data.timestamp}`)\n})\n\n// Manual control\nBarometer.startUpdates()\nBarometer.stopUpdates()\n\n// Unsubscribe\nsubscription.remove()\n```\n\n### Magnetometer\n\nImport the `Magnetometer` from `@cometalabs/react-native-nitro-sensors`:\n\n```typescript\nimport { Magnetometer } from '@cometalabs/react-native-nitro-sensors'\n\n// Check availability\nconst available = Magnetometer.isAvailable()\nconst isActive = Magnetometer.isActive()\n\n// Request permissions (iOS requires Motion permission)\nconst permission = await Magnetometer.requestPermissions()\nif (!permission.granted) {\n  if (!permission.canRequestAgain) {\n    console.log('Please enable Motion & Fitness permission in Settings')\n  }\n  return\n}\n\n// Configure update interval\n// iOS: applies CMMotionManager.magnetometerUpdateInterval\n// Android: software throttling\nMagnetometer.setUpdateInterval(16.67)\n\n// Subscribe to updates (values in microteslas, µT)\nconst subscription = Magnetometer.addListener((data) => {\n  console.log(`x: ${data.x} µT, y: ${data.y} µT, z: ${data.z} µT`)\n  console.log(`timestamp: ${data.timestamp}`)\n})\n\n// Manual control (optional - listeners auto-start/stop)\nMagnetometer.startUpdates()\nMagnetometer.stopUpdates()\n\n// Remove listeners\nMagnetometer.removeAllListeners()\nsubscription.remove()\n```\n\n### Sensor Control\n\nAll sensors support manual lifecycle control:\n\n```typescript\n// Check if sensor is currently active\nconst isActive = Accelerometer.isActive()\n\n// Manual start/stop\nAccelerometer.startUpdates()\nAccelerometer.stopUpdates()\n\n// Configure update interval\nAccelerometer.setUpdateInterval(16.67) // ~60 Hz\n```\n\n### Permissions\n\nAll sensors support a unified permission system:\n\n```typescript\n// Request permissions\nconst response = await Accelerometer.requestPermissions()\n\n// Check permission response\nif (response.granted) {\n  console.log('Permission granted!')\n} else {\n  console.log(`Status: ${response.status}`) // 'granted' | 'denied' | 'restricted' | 'undetermined'\n  \n  if (!response.canRequestAgain) {\n    console.log('User denied permission. Direct them to Settings.')\n  }\n}\n\n// Get current status without requesting\nconst currentStatus = await Accelerometer.requestPermissions()\n```\n\n**Permission Response:**\n```typescript\ninterface PermissionResponse {\n  granted: boolean            // Convenience boolean\n  status: PermissionStatus    // 'granted' | 'denied' | 'restricted' | 'undetermined'\n  canRequestAgain: boolean    // If false, user must go to Settings\n}\n```\n\n**Platform Notes:**\n- **iOS**: Requires `NSMotionUsageDescription` in Info.plist for Motion & Fitness permission\n- **Android**: No permissions required for basic sensors (accelerometer, barometer)\n\n### API Overview and Platform Notes\n\n- Accelerometer\n  - **Data**: x, y, z (m/s²), timestamp (ms)\n  - **setUpdateInterval**: iOS native interval, Android throttling\n  - **Permissions**: iOS Motion (required), Android granted\n\n- Barometer\n  - **Data**: pressure (hPa), relativeAltitude (m), optional absoluteAltitude (m on iOS 15+ absolute mode)\n  - **Modes**: `relative` (default, both platforms), `absolute` (iOS 15+ only)\n  - In `absolute` mode (iOS), `pressure` and `relativeAltitude` are 0.0 by design\n  - **setUpdateInterval**: iOS not applicable, Android throttling\n  - **Permissions**: iOS Motion (required), Android granted\n\n- Magnetometer\n  - **Data**: x, y, z (µT), timestamp (ms)\n  - **setUpdateInterval**: iOS native interval, Android throttling\n  - **Permissions**: iOS Motion (required), Android granted\n\n- Gyroscope\n  - **Data**: x, y, z (rad/s), timestamp (ms)\n  - **setUpdateInterval**: iOS native interval, Android throttling\n  - **Permissions**: iOS Motion (required), Android granted\n\n## Supported Sensors\n\n- ✅ Accelerometer (x, y, z acceleration data)\n- ✅ Barometer (pressure + relative altitude; absolute altitude on iOS 15+)\n- ✅ Magnetometer (magnetic field x, y, z in µT)\n- ✅ Gyroscope (angular velocity x, y, z in rad/s)\n - 🚧 Pedometer (step counting) — coming soon\n - 🚧 Light Sensor (ambient light/illuminance) — coming soon\n - 🚧 Device Motion (fused motion data) — coming soon\n - 🚧 Fall Detection — coming soon\n - 🚧 Fitness Data — coming soon\n - 🚧 Water Submersion — coming soon\n\n## Cometa Labs\n\nNitro Sensors is built with ☄️ by [Cometa Labs](https://cometalabs.io).\n\n## Authors\n\n- [Alexei Soliz](https://github.com/emprecario)\n\n## License\n\nMIT - © 2025 Cometa Labs\n","readmeFilename":"README.md"}