{"_id":"@capgo/capacitor-uwb","_rev":"6-d8e8b46c92fdd69a5659613059d8a1bc","name":"@capgo/capacitor-uwb","dist-tags":{"latest":"8.0.5"},"versions":{"8.0.1":{"name":"@capgo/capacitor-uwb","version":"8.0.1","keywords":["capacitor","uwb","ultra-wideband","nearby-interaction","ranging"],"author":{"name":"Martin Donadieu","email":"martin@capgo.app"},"license":"MPL-2.0","_id":"@capgo/capacitor-uwb@8.0.1","maintainers":[{"name":"riderx","email":"martin.donadieu@hey.com"}],"homepage":"https://github.com/Cap-go/capacitor-uwb","bugs":{"url":"https://github.com/Cap-go/capacitor-uwb/issues"},"dist":{"shasum":"289223cfa63e6654d4d535668c976f6c5732f71f","tarball":"https://registry.npmjs.org/@capgo/capacitor-uwb/-/capacitor-uwb-8.0.1.tgz","fileCount":27,"integrity":"sha512-lIodF8pDgA+HPSnKJAPXdVuVxauXGX5i3klqCFAx36lp+udY/GqO2ijwqc3DWqglcWJdvAD4lXtQ+LnXARr2sg==","signatures":[{"sig":"MEUCIQCrVSNYQM6PsddC7oKqE8be51I039D4/0B2eKEpKR/TuwIgcoMGWD4xgW1sf3tkDSbrWrQU76izkmCTDsYeSzWJH1o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@capgo%2fcapacitor-uwb@8.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":131744},"main":"dist/plugin.cjs.js","types":"dist/esm/index.d.ts","unpkg":"dist/plugin.js","module":"dist/esm/index.js","gitHead":"d7ca9921f9a4b4b0bb2a763b0e8273cf82666bd0","scripts":{"fmt":"bun run eslint -- --fix && bun run prettier -- --write && bun run swiftlint -- --fix --format","lint":"bun run eslint && bun run prettier -- --check && bun run swiftlint -- lint","build":"bun run clean && bun run docgen && tsc && rollup -c rollup.config.mjs","clean":"rimraf ./dist","watch":"tsc --watch","docgen":"docgen --api CapacitorUwbPlugin --output-readme README.md --output-json dist/docs.json","eslint":"eslint \"**/*.ts\"","verify":"bun run verify:ios && bun run verify:android && bun run verify:web","prettier":"prettier-pretty-check \"**/*.{css,html,ts,js,java}\" --plugin=prettier-plugin-java","swiftlint":"node-swiftlint","verify:ios":"xcodebuild -scheme CapgoCapacitorUwb -destination generic/platform=iOS","verify:web":"bun run build","check:wiring":"node scripts/check-capacitor-plugin-wiring.mjs","example:build":"bun run build && cd example-app && bun install --frozen-lockfile && bun run build","prepublishOnly":"bun run build","verify:android":"cd android && ./gradlew clean build test && cd ..","example:install":"cd example-app && bun install --frozen-lockfile"},"_npmUser":{"name":"riderx","email":"martin.donadieu@hey.com"},"prettier":"@ionic/prettier-config","capacitor":{"ios":{"src":"ios"},"android":{"src":"android"}},"swiftlint":"@ionic/swiftlint-config","repository":{"url":"git+https://github.com/Cap-go/capacitor-uwb.git","type":"git"},"_npmVersion":"11.16.0","description":"Capacitor plugin for Ultra-Wideband (UWB) ranging on iOS and Android.","directories":{},"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^10.4.0","rimraf":"^6.1.3","rollup":"^4.60.4","prettier":"^3.8.3","swiftlint":"^2.0.0","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^25.9.1","@capacitor/cli":"^8.3.4","@capacitor/ios":"^8.3.4","@capacitor/core":"^8.3.4","@capacitor/docgen":"^0.3.1","typescript-eslint":"^8.59.4","@capacitor/android":"^8.3.4","eslint-plugin-import":"^2.32.0","prettier-plugin-java":"^2.9.2","prettier-pretty-check":"^0.2.0","@ionic/prettier-config":"^4.0.0","eslint-config-prettier":"^10.1.8","@ionic/swiftlint-config":"^2.0.0"},"peerDependencies":{"@capacitor/core":">=8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/capacitor-uwb_8.0.1_1782943152656_0.8365169850618495","host":"s3://npm-registry-packages-npm-production"}},"8.0.2":{"name":"@capgo/capacitor-uwb","version":"8.0.2","keywords":["capacitor","uwb","ultra-wideband","nearby-interaction","ranging"],"author":{"name":"Martin Donadieu","email":"martin@capgo.app"},"license":"MPL-2.0","_id":"@capgo/capacitor-uwb@8.0.2","maintainers":[{"name":"riderx","email":"martin.donadieu@hey.com"}],"homepage":"https://capgo.app/docs/plugins/uwb/","bugs":{"url":"https://github.com/Cap-go/capacitor-uwb/issues"},"dist":{"shasum":"5b15a9e29c695fd2285103fc4b88131a3fbee2f4","tarball":"https://registry.npmjs.org/@capgo/capacitor-uwb/-/capacitor-uwb-8.0.2.tgz","fileCount":27,"integrity":"sha512-Daho+d05ruugcWLTzOzN5FujSE6RTwgxEP95DrsBNeAnxMwdwk1/gsUpBfpLgL7jfFlil5W1XyOQyhwMBGjHWg==","signatures":[{"sig":"MEUCIHpvgKfR9P/rzDMIn3krjSDtsTA+qntP+KFmA0JKP5U1AiEA+oUrRhctyHnNnTpzvGjKLozUCuiVSMFf5j0kOSm565A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@capgo%2fcapacitor-uwb@8.0.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":123018},"main":"dist/plugin.cjs.js","types":"dist/esm/index.d.ts","unpkg":"dist/plugin.js","module":"dist/esm/index.js","gitHead":"dde2961dd9b6a964b19304047c1d99f3b3e4180d","scripts":{"fmt":"bun run eslint -- --fix && bun run prettier -- --write && bun run swiftlint -- --fix --format","lint":"bun run eslint && bun run prettier -- --check && bun run swiftlint -- lint","build":"bun run clean && bun run docgen && tsc && rollup -c rollup.config.mjs","clean":"rimraf ./dist","watch":"tsc --watch","docgen":"docgen --api CapacitorUwbPlugin --output-readme README.md --output-json dist/docs.json","eslint":"eslint \"**/*.ts\"","verify":"bun run verify:ios && bun run verify:android && bun run verify:web","prettier":"prettier-pretty-check \"**/*.{css,html,ts,js,java}\" --plugin=prettier-plugin-java","swiftlint":"node-swiftlint","verify:ios":"xcodebuild -scheme CapgoCapacitorUwb -destination generic/platform=iOS","verify:web":"bun run build","check:wiring":"node scripts/check-capacitor-plugin-wiring.mjs","example:build":"bun run build && cd example-app && bun install --frozen-lockfile && bun run build","prepublishOnly":"bun run build","verify:android":"cd android && ./gradlew clean build test && cd ..","example:install":"cd example-app && bun install --frozen-lockfile"},"_npmUser":{"name":"riderx","email":"martin.donadieu@hey.com"},"prettier":"@ionic/prettier-config","capacitor":{"ios":{"src":"ios"},"android":{"src":"android"}},"swiftlint":"@ionic/swiftlint-config","repository":{"url":"git+https://github.com/Cap-go/capacitor-uwb.git","type":"git"},"_npmVersion":"11.13.0","description":"Capacitor plugin for Ultra-Wideband (UWB) ranging on iOS and Android.","directories":{},"_nodeVersion":"24.17.0","_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^10.4.0","rimraf":"^6.1.3","rollup":"^4.60.4","prettier":"^3.8.3","swiftlint":"^2.0.0","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^25.9.1","@capacitor/cli":"^8.3.4","@capacitor/ios":"^8.3.4","@capacitor/core":"^8.3.4","@capacitor/docgen":"^0.3.1","typescript-eslint":"^8.59.4","@capacitor/android":"^8.3.4","eslint-plugin-import":"^2.32.0","prettier-plugin-java":"^2.9.2","prettier-pretty-check":"^0.2.0","@ionic/prettier-config":"^4.0.0","eslint-config-prettier":"^10.1.8","@ionic/swiftlint-config":"^2.0.0"},"peerDependencies":{"@capacitor/core":">=8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/capacitor-uwb_8.0.2_1782980056041_0.44608476847623835","host":"s3://npm-registry-packages-npm-production"}},"8.0.3":{"name":"@capgo/capacitor-uwb","version":"8.0.3","keywords":["capacitor","uwb","ultra-wideband","nearby-interaction","ranging"],"author":{"name":"Martin Donadieu","email":"martin@capgo.app"},"license":"MPL-2.0","_id":"@capgo/capacitor-uwb@8.0.3","maintainers":[{"name":"riderx","email":"martin.donadieu@hey.com"}],"homepage":"https://capgo.app/docs/plugins/uwb/","bugs":{"url":"https://github.com/Cap-go/capacitor-uwb/issues"},"dist":{"shasum":"cdf923a4bf5e3099ef81aa9470c817ed0bda5f0f","tarball":"https://registry.npmjs.org/@capgo/capacitor-uwb/-/capacitor-uwb-8.0.3.tgz","fileCount":27,"integrity":"sha512-0QNaRTuOHfT7F0Apf0WQBQmsPCmnszzY7GSbQX6OaTjfN21PsGJ7R7vbnLrRKBXM4+CeZu+7bqCDdFawoz6qwQ==","signatures":[{"sig":"MEQCIGc1hE4RPL2TocXnNJaXObbIFV9nFqA8u3ZAf7XCEkmjAiAXc88Hn14JJEjkZtGlgYoUehM2tquc+CyME6lBdrPbVQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@capgo%2fcapacitor-uwb@8.0.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":123080},"main":"dist/plugin.cjs.js","types":"dist/esm/index.d.ts","unpkg":"dist/plugin.js","module":"dist/esm/index.js","gitHead":"f76e8f56b42fb816e71c61d5cefa9f8427f706ef","scripts":{"fmt":"bun run eslint -- --fix && bun run prettier -- --write && bun run swiftlint -- --fix --format","lint":"bun run eslint && bun run prettier -- --check && bun run swiftlint -- lint","build":"bun run clean && bun run docgen && tsc && rollup -c rollup.config.mjs","clean":"rimraf ./dist","watch":"tsc --watch","docgen":"docgen --api CapacitorUwbPlugin --output-readme README.md --output-json dist/docs.json","eslint":"eslint \"**/*.ts\"","verify":"bun run verify:ios && bun run verify:android && bun run verify:web","prettier":"prettier-pretty-check \"**/*.{css,html,ts,js,java}\" --plugin=prettier-plugin-java","swiftlint":"node-swiftlint","verify:ios":"xcodebuild -scheme CapgoCapacitorUwb -destination generic/platform=iOS","verify:web":"bun run build","changelog:ai":"node scripts/generate-ai-changelog.mjs","check:wiring":"node scripts/check-capacitor-plugin-wiring.mjs","example:build":"bun run build && cd example-app && bun install --frozen-lockfile && bun run build","prepublishOnly":"bun run build","verify:android":"cd android && ./gradlew clean build test && cd ..","example:install":"cd example-app && bun install --frozen-lockfile"},"_npmUser":{"name":"riderx","email":"martin.donadieu@hey.com"},"prettier":"@ionic/prettier-config","capacitor":{"ios":{"src":"ios"},"android":{"src":"android"}},"swiftlint":"@ionic/swiftlint-config","repository":{"url":"git+https://github.com/Cap-go/capacitor-uwb.git","type":"git"},"_npmVersion":"11.16.0","description":"Capacitor plugin for Ultra-Wideband (UWB) ranging on iOS and Android.","directories":{},"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^10.4.0","rimraf":"^6.1.3","rollup":"^4.60.4","prettier":"^3.8.3","swiftlint":"^2.0.0","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^25.9.1","@capacitor/cli":"^8.3.4","@capacitor/ios":"^8.3.4","@capacitor/core":"^8.3.4","@capacitor/docgen":"^0.3.1","typescript-eslint":"^8.59.4","@capacitor/android":"^8.3.4","eslint-plugin-import":"^2.32.0","prettier-plugin-java":"^2.9.2","prettier-pretty-check":"^0.2.0","@ionic/prettier-config":"^4.0.0","eslint-config-prettier":"^10.1.8","@ionic/swiftlint-config":"^2.0.0"},"peerDependencies":{"@capacitor/core":">=8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/capacitor-uwb_8.0.3_1783767051273_0.26342931285959903","host":"s3://npm-registry-packages-npm-production"}},"8.0.4":{"name":"@capgo/capacitor-uwb","version":"8.0.4","keywords":["capacitor","uwb","ultra-wideband","nearby-interaction","ranging"],"author":{"name":"Martin Donadieu","email":"martin@capgo.app"},"license":"MPL-2.0","_id":"@capgo/capacitor-uwb@8.0.4","maintainers":[{"name":"riderx","email":"martin.donadieu@hey.com"},{"name":"torichancapgo","email":"tori@capgo.app"}],"homepage":"https://capgo.app/docs/plugins/uwb/","bugs":{"url":"https://github.com/Cap-go/capacitor-uwb/issues"},"dist":{"shasum":"b869a63f6d75ce401255da203ce29c61268006aa","tarball":"https://registry.npmjs.org/@capgo/capacitor-uwb/-/capacitor-uwb-8.0.4.tgz","fileCount":27,"integrity":"sha512-ZvWD56slp6X25u/QDaBuZNJqZM8gBWEzi/Ou+O0ABigOtR5HAbLI5hMPEy25ockhmn69kIcRmxbtrfmuE+PWJQ==","signatures":[{"sig":"MEQCIDEKX9IaUXdoLutjvGl9pDT65Kwy8A/SxxAXLkTJkUAhAiBx8WVD/LSmAih47SlHvsOjOdj1bQG2WF9QCuY25HSEBA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@capgo%2fcapacitor-uwb@8.0.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":123080},"main":"dist/plugin.cjs.js","types":"dist/esm/index.d.ts","unpkg":"dist/plugin.js","module":"dist/esm/index.js","gitHead":"7ce0e8d925f76d7e39d82362c60de7e6b0dbc6b9","scripts":{"fmt":"bun run eslint -- --fix && bun run prettier -- --write && bun run swiftlint -- --fix --format","lint":"bun run eslint && bun run prettier -- --check && bun run swiftlint -- lint","build":"bun run clean && bun run docgen && tsc && rollup -c rollup.config.mjs","clean":"rimraf ./dist","watch":"tsc --watch","docgen":"docgen --api CapacitorUwbPlugin --output-readme README.md --output-json dist/docs.json","eslint":"eslint \"**/*.ts\"","verify":"bun run verify:ios && bun run verify:android && bun run verify:web","prettier":"prettier-pretty-check \"**/*.{css,html,ts,js,java}\" --plugin=prettier-plugin-java","swiftlint":"node-swiftlint","verify:ios":"xcodebuild -scheme CapgoCapacitorUwb -destination generic/platform=iOS","verify:web":"bun run build","changelog:ai":"node scripts/generate-ai-changelog.mjs","check:wiring":"node scripts/check-capacitor-plugin-wiring.mjs","example:build":"bun run build && cd example-app && bun install --frozen-lockfile && bun run build","prepublishOnly":"bun run build","verify:android":"cd android && ./gradlew clean build test && cd ..","example:install":"cd example-app && bun install --frozen-lockfile"},"_npmUser":{"name":"torichancapgo","email":"tori@capgo.app","approver":{"name":"torichancapgo","email":"tori@capgo.app"}},"prettier":"@ionic/prettier-config","capacitor":{"ios":{"src":"ios"},"android":{"src":"android"}},"swiftlint":"@ionic/swiftlint-config","repository":{"url":"git+https://github.com/Cap-go/capacitor-uwb.git","type":"git"},"_npmVersion":"11.19.0","description":"Capacitor plugin for Ultra-Wideband (UWB) ranging on iOS and Android.","directories":{},"_nodeVersion":"24.19.0","_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^10.4.0","rimraf":"^6.1.3","rollup":"^4.60.4","prettier":"^3.8.3","swiftlint":"^2.0.0","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^25.9.1","@capacitor/cli":"^8.3.4","@capacitor/ios":"^8.3.4","@capacitor/core":"^8.3.4","@capacitor/docgen":"^0.3.1","typescript-eslint":"^8.59.4","@capacitor/android":"^8.3.4","eslint-plugin-import":"^2.32.0","prettier-plugin-java":"^2.9.2","prettier-pretty-check":"^0.2.0","@ionic/prettier-config":"^4.0.0","eslint-config-prettier":"^10.1.8","@ionic/swiftlint-config":"^2.0.0"},"peerDependencies":{"@capacitor/core":">=8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/capacitor-uwb_8.0.4_1787223101120_0.5302338042412125","host":"s3://npm-registry-packages-npm-production"}},"8.0.5":{"_id":"@capgo/capacitor-uwb@8.0.5","bugs":{"url":"https://github.com/Cap-go/capacitor-uwb/issues"},"dist":{"shasum":"bc9446059010dd3e31df8d4091498def151f4015","tarball":"https://registry.npmjs.org/@capgo/capacitor-uwb/-/capacitor-uwb-8.0.5.tgz","integrity":"sha512-O5bZ6GWqIF9IoFnCAozsvTazyS5oiN+M/2uf48eIkqEK9sRATyzUzbgce3VbOS4fatf+ydmBT+sZmjMfrHqrSw==","fileCount":27,"unpackedSize":123151,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@capgo%2fcapacitor-uwb@8.0.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIEwF04Zg7ertg94Bxd60C7+uEF30J8eJGI5gBbamd5BMAiEAtFxfKTCMO7QJgGCPetZo0sgwGAYge95AaewGseS6w+4="}]},"main":"dist/plugin.cjs.js","name":"@capgo/capacitor-uwb","types":"dist/esm/index.d.ts","unpkg":"dist/plugin.js","author":{"name":"Martin Donadieu","email":"martin@capgo.app"},"module":"dist/esm/index.js","gitHead":"b5e9bb31b2d8545616aef57cf604326c4893b659","license":"MPL-2.0","scripts":{"fmt":"bun run eslint -- --fix && bun run prettier -- --write && bun run swiftlint -- --fix --format","lint":"bun run eslint && bun run prettier -- --check && bun run swiftlint -- lint","build":"bun run clean && bun run docgen && tsc && rollup -c rollup.config.mjs","clean":"rimraf ./dist","watch":"tsc --watch","docgen":"docgen --api CapacitorUwbPlugin --output-readme README.md --output-json dist/docs.json","eslint":"eslint \"**/*.ts\"","verify":"bun run verify:ios && bun run verify:android && bun run verify:web","prettier":"prettier-pretty-check \"**/*.{css,html,ts,js,java}\" --plugin=prettier-plugin-java","swiftlint":"node-swiftlint","verify:ios":"xcodebuild -scheme CapgoCapacitorUwb -destination generic/platform=iOS","verify:web":"bun run build","changelog:ai":"node scripts/generate-ai-changelog.mjs","check:wiring":"node scripts/check-capacitor-plugin-wiring.mjs","example:build":"bun run build && cd example-app && bun install --frozen-lockfile && bun run build","prepublishOnly":"bun run build","verify:android":"cd android && ./gradlew clean build test && cd ..","example:install":"cd example-app && bun install --frozen-lockfile","check:cap9-deprecated":"node scripts/check-cap9-deprecated.mjs"},"version":"8.0.5","_npmUser":{"name":"torichancapgo","email":"tori@capgo.app","approver":{"name":"torichancapgo","email":"tori@capgo.app"}},"homepage":"https://capgo.app/docs/plugins/uwb/","keywords":["capacitor","uwb","ultra-wideband","nearby-interaction","ranging"],"prettier":"@ionic/prettier-config","capacitor":{"ios":{"src":"ios"},"android":{"src":"android"}},"swiftlint":"@ionic/swiftlint-config","repository":{"url":"git+https://github.com/Cap-go/capacitor-uwb.git","type":"git"},"_npmVersion":"11.19.1","description":"Capacitor plugin for Ultra-Wideband (UWB) ranging on iOS and Android.","directories":{},"maintainers":[{"name":"riderx","email":"martin.donadieu@hey.com"},{"name":"torichancapgo","email":"tori@capgo.app"}],"_nodeVersion":"24.20.0","devDependencies":{"husky":"^9.1.7","eslint":"^10.4.0","rimraf":"^6.1.3","rollup":"^4.60.4","prettier":"^3.8.3","swiftlint":"^2.0.0","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^25.9.1","@capacitor/cli":"^8.3.4","@capacitor/ios":"^8.3.4","@capacitor/core":"^8.3.4","@capacitor/docgen":"^0.3.1","typescript-eslint":"^8.59.4","@capacitor/android":"^8.3.4","eslint-plugin-import":"^2.32.0","prettier-plugin-java":"^2.9.2","prettier-pretty-check":"^0.2.0","@ionic/prettier-config":"^4.0.0","eslint-config-prettier":"^10.1.8","@ionic/swiftlint-config":"^2.0.0"},"peerDependencies":{"@capacitor/core":">=8.0.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/capacitor-uwb_8.0.5_1789494621325_0.303445409162594"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-01T21:59:12.521Z","modified":"2026-09-15T17:50:21.817Z","8.0.1":"2026-07-01T21:59:12.789Z","8.0.2":"2026-07-02T08:14:16.173Z","8.0.3":"2026-07-11T10:50:51.425Z","8.0.4":"2026-08-20T10:51:41.205Z","8.0.5":"2026-09-15T17:50:21.422Z"},"bugs":{"url":"https://github.com/Cap-go/capacitor-uwb/issues"},"author":{"name":"Martin Donadieu","email":"martin@capgo.app"},"license":"MPL-2.0","homepage":"https://capgo.app/docs/plugins/uwb/","keywords":["capacitor","uwb","ultra-wideband","nearby-interaction","ranging"],"repository":{"url":"git+https://github.com/Cap-go/capacitor-uwb.git","type":"git"},"description":"Capacitor plugin for Ultra-Wideband (UWB) ranging on iOS and Android.","maintainers":[{"name":"riderx","email":"martin.donadieu@hey.com"},{"name":"torichancapgo","email":"tori@capgo.app"}],"readme":"# @capgo/capacitor-uwb\n\n<a href=\"https://capgo.app/\"><img src=\"https://capgo.app/readme-banner.svg?repo=Cap-go/capacitor-uwb\" alt=\"Capgo - Instant updates for Capacitor\" /></a>\n\n<div align=\"center\">\n  <h2><a href=\"https://capgo.app/?ref=plugin_uwb\"> ➡️ Get Instant updates for your App with Capgo</a></h2>\n  <h2><a href=\"https://capgo.app/consulting/?ref=plugin_uwb\"> Missing a feature? We'll build the plugin for you 💪</a></h2>\n</div>\n\nCapacitor plugin for Ultra-Wideband (UWB) ranging on iOS and Android.\n\n## Why this plugin\n\nThis plugin wraps the native UWB ranging APIs on iOS and Android so a Capacitor app can:\n\n- Check whether the current device supports UWB ranging.\n- Run peer-to-peer ranging on iOS with Apple's Nearby Interaction framework.\n- Run controller/controlee ranging sessions on Android with Jetpack `androidx.core.uwb`.\n- Receive distance, direction, and session lifecycle updates through plugin listeners.\n\nOn iOS, peers exchange `NIDiscoveryToken` values out-of-band, then call `startPeerSession()`.\nOn Android, the controller shares ranging parameters out-of-band before the controlee starts its session.\n\n## Platform support\n\n| Platform | Support |\n|----------|---------|\n| iOS      | ✅ Nearby Interaction peer ranging with distance and direction |\n| Android  | ✅ Jetpack UWB controller/controlee sessions (Android 12+, UWB hardware) |\n| Web      | ❌ Not available |\n\n## Compatibility\n\n| Plugin version | Capacitor compatibility | Maintained |\n| -------------- | ----------------------- | ---------- |\n| v8.*.*         | v8.*.*                  | ✅         |\n| v7.*.*         | v7.*.*                  | On demand  |\n| v6.*.*         | v6.*.*                  | On demand  |\n\n> The plugin major version follows the Capacitor major version.\n\n## Install\n\nYou can use our AI-Assisted Setup to install the plugin. Add the Capgo skills to your AI tool using the following command:\n\n```bash\nnpx skills add https://github.com/cap-go/capacitor-skills --skill capacitor-plugins\n```\n\nThen use the following prompt:\n\n```text\nUse the `capacitor-plugins` skill from `cap-go/capacitor-skills` to install the `@capgo/capacitor-uwb` plugin in my project.\n```\n\nIf you prefer Manual Setup, install the plugin by running the following commands and follow the platform-specific instructions below:\n\n```bash\nbun add @capgo/capacitor-uwb\nbunx cap sync\n```\n\n## Usage\n\n```typescript\nimport { CapacitorUwb } from '@capgo/capacitor-uwb';\n\nconst availability = await CapacitorUwb.isAvailable();\nif (!availability.available) {\n  return;\n}\n\nawait CapacitorUwb.addListener('rangingUpdate', (update) => {\n  console.log(update.distanceMeters, update.direction);\n});\n\n// iOS: exchange discovery tokens out-of-band, then start ranging\nconst { discoveryToken } = await CapacitorUwb.getDiscoveryToken();\nawait CapacitorUwb.startPeerSession({ peerDiscoveryToken: '<peer-token-base64>' });\n\n// Android: controller shares ranging parameters out-of-band\nconst controller = await CapacitorUwb.startControllerSession();\nawait CapacitorUwb.startControleeSession({\n  rangingParameters: {\n    ...controller.rangingParameters,\n    peerAddress: controller.localAddress,\n  },\n});\n\nawait CapacitorUwb.stopSession();\n```\n\n## Notes\n\n- Test on real UWB hardware. Simulators and most desktop browsers do not expose UWB radios.\n- **iOS:** Add the Nearby Interaction capability in Xcode and set `NSNearbyInteractionUsageDescription` in `Info.plist`.\n- **Android:** The plugin declares `android.permission.UWB_RANGING`. Exchange ranging parameters out-of-band between controller and controlee before starting sessions.\n- **Web:** `isAvailable()` returns `supported: false`.\n\nFull setup guides: [capgo.app/docs/plugins/uwb](https://capgo.app/docs/plugins/uwb/)\n\n## Example app\n\nThe `example-app/` folder contains a small Vite demo for checking availability, exchanging session parameters, listening for ranging updates, and stopping sessions.\n\n## API\n\n<docgen-index>\n\n* [`isAvailable()`](#isavailable)\n* [`getDiscoveryToken()`](#getdiscoverytoken)\n* [`startPeerSession(...)`](#startpeersession)\n* [`startControllerSession(...)`](#startcontrollersession)\n* [`startControleeSession(...)`](#startcontroleesession)\n* [`stopSession()`](#stopsession)\n* [`addListener('rangingUpdate', ...)`](#addlistenerrangingupdate-)\n* [`addListener('sessionStateChanged', ...)`](#addlistenersessionstatechanged-)\n* [`removeAllListeners()`](#removealllisteners)\n* [`getPluginVersion()`](#getpluginversion)\n* [Interfaces](#interfaces)\n* [Type Aliases](#type-aliases)\n\n</docgen-index>\n\n<docgen-api>\n<!--Update the source file JSDoc comments and rerun docgen to update the docs below-->\n\nCapacitor plugin for Ultra-Wideband (UWB) ranging on iOS and Android.\n\niOS uses Apple's Nearby Interaction framework for peer-to-peer ranging.\nAndroid uses Jetpack `androidx.core.uwb` for controller/controlee sessions.\n\nBoth platforms require exchanging discovery tokens or ranging parameters\nout-of-band (for example over Bluetooth LE or a backend).\n\n### isAvailable()\n\n```typescript\nisAvailable() => Promise<UwbAvailabilityResult>\n```\n\nCheck whether UWB is supported and currently available on the device.\n\n**Returns:** <code>Promise&lt;<a href=\"#uwbavailabilityresult\">UwbAvailabilityResult</a>&gt;</code>\n\n**Since:** 8.0.0\n\n--------------------\n\n\n### getDiscoveryToken()\n\n```typescript\ngetDiscoveryToken() => Promise<DiscoveryTokenResult>\n```\n\nGet the local Nearby Interaction discovery token on iOS.\n\nShare the returned token with a peer out-of-band, then call\n`startPeerSession()` with the peer token.\n\n**Returns:** <code>Promise&lt;<a href=\"#discoverytokenresult\">DiscoveryTokenResult</a>&gt;</code>\n\n**Since:** 8.0.0\n\n--------------------\n\n\n### startPeerSession(...)\n\n```typescript\nstartPeerSession(options: StartPeerSessionOptions) => Promise<void>\n```\n\nStart a Nearby Interaction peer session on iOS.\n\n| Param         | Type                                                                        |\n| ------------- | --------------------------------------------------------------------------- |\n| **`options`** | <code><a href=\"#startpeersessionoptions\">StartPeerSessionOptions</a></code> |\n\n**Since:** 8.0.0\n\n--------------------\n\n\n### startControllerSession(...)\n\n```typescript\nstartControllerSession(options?: StartControllerSessionOptions | undefined) => Promise<AndroidControllerSessionResult>\n```\n\nStart an Android UWB controller session and return shareable parameters.\n\n| Param         | Type                                                                                    |\n| ------------- | --------------------------------------------------------------------------------------- |\n| **`options`** | <code><a href=\"#startcontrollersessionoptions\">StartControllerSessionOptions</a></code> |\n\n**Returns:** <code>Promise&lt;<a href=\"#androidcontrollersessionresult\">AndroidControllerSessionResult</a>&gt;</code>\n\n**Since:** 8.0.0\n\n--------------------\n\n\n### startControleeSession(...)\n\n```typescript\nstartControleeSession(options: StartControleeSessionOptions) => Promise<void>\n```\n\nStart an Android UWB controlee session with parameters from the controller.\n\n| Param         | Type                                                                                  |\n| ------------- | ------------------------------------------------------------------------------------- |\n| **`options`** | <code><a href=\"#startcontroleesessionoptions\">StartControleeSessionOptions</a></code> |\n\n**Since:** 8.0.0\n\n--------------------\n\n\n### stopSession()\n\n```typescript\nstopSession() => Promise<void>\n```\n\nStop the active UWB ranging session.\n\n**Since:** 8.0.0\n\n--------------------\n\n\n### addListener('rangingUpdate', ...)\n\n```typescript\naddListener(eventName: 'rangingUpdate', listenerFunc: (event: RangingUpdateEvent) => void) => Promise<PluginListenerHandle>\n```\n\nListen for distance and direction updates from an active session.\n\n| Param              | Type                                                                                  |\n| ------------------ | ------------------------------------------------------------------------------------- |\n| **`eventName`**    | <code>'rangingUpdate'</code>                                                          |\n| **`listenerFunc`** | <code>(event: <a href=\"#rangingupdateevent\">RangingUpdateEvent</a>) =&gt; void</code> |\n\n**Returns:** <code>Promise&lt;<a href=\"#pluginlistenerhandle\">PluginListenerHandle</a>&gt;</code>\n\n**Since:** 8.0.0\n\n--------------------\n\n\n### addListener('sessionStateChanged', ...)\n\n```typescript\naddListener(eventName: 'sessionStateChanged', listenerFunc: (event: SessionStateChangedEvent) => void) => Promise<PluginListenerHandle>\n```\n\nListen for session lifecycle changes.\n\n| Param              | Type                                                                                              |\n| ------------------ | ------------------------------------------------------------------------------------------------- |\n| **`eventName`**    | <code>'sessionStateChanged'</code>                                                                |\n| **`listenerFunc`** | <code>(event: <a href=\"#sessionstatechangedevent\">SessionStateChangedEvent</a>) =&gt; void</code> |\n\n**Returns:** <code>Promise&lt;<a href=\"#pluginlistenerhandle\">PluginListenerHandle</a>&gt;</code>\n\n**Since:** 8.0.0\n\n--------------------\n\n\n### removeAllListeners()\n\n```typescript\nremoveAllListeners() => Promise<void>\n```\n\nRemove all registered listeners for this plugin.\n\n**Since:** 8.0.0\n\n--------------------\n\n\n### getPluginVersion()\n\n```typescript\ngetPluginVersion() => Promise<PluginVersionResult>\n```\n\nGet the current native plugin version.\n\n**Returns:** <code>Promise&lt;<a href=\"#pluginversionresult\">PluginVersionResult</a>&gt;</code>\n\n**Since:** 8.0.0\n\n--------------------\n\n\n### Interfaces\n\n\n#### UwbAvailabilityResult\n\nResult returned by `isAvailable()`.\n\n| Prop            | Type                                     | Description                                                         | Since |\n| --------------- | ---------------------------------------- | ------------------------------------------------------------------- | ----- |\n| **`supported`** | <code>boolean</code>                     | Whether the device hardware supports UWB ranging.                   | 8.0.0 |\n| **`available`** | <code>boolean</code>                     | Whether UWB is currently available and ready for a ranging session. | 8.0.0 |\n| **`platform`**  | <code>'ios' \\| 'android' \\| 'web'</code> | Platform label returned by the native or web implementation.        | 8.0.0 |\n\n\n#### DiscoveryTokenResult\n\nResult returned by `getDiscoveryToken()` on iOS.\n\n| Prop                 | Type                | Description                                                         | Since |\n| -------------------- | ------------------- | ------------------------------------------------------------------- | ----- |\n| **`discoveryToken`** | <code>string</code> | Base64-encoded `NIDiscoveryToken` to share with a peer out-of-band. | 8.0.0 |\n\n\n#### StartPeerSessionOptions\n\nOptions for `startPeerSession()` on iOS.\n\n| Prop                            | Type                 | Description                                                   | Since |\n| ------------------------------- | -------------------- | ------------------------------------------------------------- | ----- |\n| **`peerDiscoveryToken`**        | <code>string</code>  | Base64-encoded peer `NIDiscoveryToken`.                       | 8.0.0 |\n| **`isCameraAssistanceEnabled`** | <code>boolean</code> | Whether to enable camera assistance when supported (iOS 16+). | 8.0.0 |\n\n\n#### AndroidControllerSessionResult\n\nParameters returned when starting an Android controller session.\n\n| Prop                    | Type                                                                          | Description                                                 | Since |\n| ----------------------- | ----------------------------------------------------------------------------- | ----------------------------------------------------------- | ----- |\n| **`rangingParameters`** | <code><a href=\"#androidrangingparameters\">AndroidRangingParameters</a></code> | Ranging parameters to share with the controlee out-of-band. | 8.0.0 |\n| **`localAddress`**      | <code>string</code>                                                           | Local UWB address as a base64-encoded byte array.           | 8.0.0 |\n\n\n#### AndroidRangingParameters\n\nAndroid ranging parameters exchanged out-of-band between controller and controlee.\n\n| Prop                     | Type                                                            | Description                                                   | Since |\n| ------------------------ | --------------------------------------------------------------- | ------------------------------------------------------------- | ----- |\n| **`sessionId`**          | <code>number</code>                                             | Session identifier shared by both peers.                      | 8.0.0 |\n| **`sessionKeyInfo`**     | <code>string</code>                                             | Optional base64-encoded session key info.                     | 8.0.0 |\n| **`subSessionId`**       | <code>number</code>                                             | Optional sub-session identifier for provisioned STS.          | 8.0.0 |\n| **`subSessionKeyInfo`**  | <code>string</code>                                             | Optional base64-encoded sub-session key info.                 | 8.0.0 |\n| **`complexChannel`**     | <code><a href=\"#uwbcomplexchannel\">UwbComplexChannel</a></code> | Channel configuration for the ranging session.                | 8.0.0 |\n| **`peerAddress`**        | <code>string</code>                                             | Peer UWB address as a base64-encoded byte array.              | 8.0.0 |\n| **`uwbConfigType`**      | <code>number</code>                                             | UWB config type. Defaults to unicast DS-TWR on Android.       | 8.0.0 |\n| **`slotDurationMillis`** | <code>number</code>                                             | Slot duration in milliseconds.                                | 8.0.0 |\n| **`updateRateType`**     | <code>number</code>                                             | Ranging update rate type from `RangingParameters` on Android. | 8.0.0 |\n\n\n#### UwbComplexChannel\n\nAndroid UWB complex channel exchanged out-of-band with a peer.\n\n| Prop                | Type                | Description                                  | Since |\n| ------------------- | ------------------- | -------------------------------------------- | ----- |\n| **`channel`**       | <code>number</code> | UWB channel number.                          | 8.0.0 |\n| **`preambleIndex`** | <code>number</code> | Preamble index used for the ranging session. | 8.0.0 |\n\n\n#### StartControllerSessionOptions\n\nOptions for `startControllerSession()` on Android.\n\n| Prop                     | Type                                                            | Description                                                                | Since |\n| ------------------------ | --------------------------------------------------------------- | -------------------------------------------------------------------------- | ----- |\n| **`sessionId`**          | <code>number</code>                                             | Session identifier shared with the controlee.                              | 8.0.0 |\n| **`sessionKeyInfo`**     | <code>string</code>                                             | Optional base64-encoded session key info.                                  | 8.0.0 |\n| **`subSessionId`**       | <code>number</code>                                             | Optional sub-session identifier.                                           | 8.0.0 |\n| **`subSessionKeyInfo`**  | <code>string</code>                                             | Optional base64-encoded sub-session key info.                              | 8.0.0 |\n| **`complexChannel`**     | <code><a href=\"#uwbcomplexchannel\">UwbComplexChannel</a></code> | UWB channel configuration.                                                 | 8.0.0 |\n| **`uwbConfigType`**      | <code>number</code>                                             | UWB config type. Defaults to unicast DS-TWR.                               | 8.0.0 |\n| **`slotDurationMillis`** | <code>number</code>                                             | Slot duration in milliseconds.                                             | 8.0.0 |\n| **`updateRateType`**     | <code>number</code>                                             | Ranging update rate type from `RangingParameters` on Android.              | 8.0.0 |\n| **`peerAddress`**        | <code>string</code>                                             | Optional controlee UWB address. When provided, ranging starts immediately. | 8.0.0 |\n\n\n#### StartControleeSessionOptions\n\nOptions for `startControleeSession()` on Android.\n\n| Prop                    | Type                                                                          | Description                                                  | Since |\n| ----------------------- | ----------------------------------------------------------------------------- | ------------------------------------------------------------ | ----- |\n| **`rangingParameters`** | <code><a href=\"#androidrangingparameters\">AndroidRangingParameters</a></code> | Ranging parameters received from the controller out-of-band. | 8.0.0 |\n\n\n#### PluginListenerHandle\n\n| Prop         | Type                                      |\n| ------------ | ----------------------------------------- |\n| **`remove`** | <code>() =&gt; Promise&lt;void&gt;</code> |\n\n\n#### RangingUpdateEvent\n\nPayload emitted by the `rangingUpdate` listener.\n\n| Prop                         | Type                                                  | Description                                                  | Since |\n| ---------------------------- | ----------------------------------------------------- | ------------------------------------------------------------ | ----- |\n| **`distanceMeters`**         | <code>number</code>                                   | Estimated distance to the peer in meters.                    | 8.0.0 |\n| **`direction`**              | <code><a href=\"#uwbdirection\">UwbDirection</a></code> | Direction vector toward the peer when available.             | 8.0.0 |\n| **`azimuthRadians`**         | <code>number</code>                                   | Azimuth angle in radians when available.                     | 8.0.0 |\n| **`elevationRadians`**       | <code>number</code>                                   | Elevation angle in radians when available.                   | 8.0.0 |\n| **`horizontalAngleRadians`** | <code>number</code>                                   | Horizontal angle in radians when available.                  | 8.0.0 |\n| **`timestamp`**              | <code>number</code>                                   | Unix timestamp in milliseconds when the update was received. | 8.0.0 |\n\n\n#### UwbDirection\n\n3D direction vector reported by UWB ranging.\n\n| Prop    | Type                | Description                          | Since |\n| ------- | ------------------- | ------------------------------------ | ----- |\n| **`x`** | <code>number</code> | X component of the direction vector. | 8.0.0 |\n| **`y`** | <code>number</code> | Y component of the direction vector. | 8.0.0 |\n| **`z`** | <code>number</code> | Z component of the direction vector. | 8.0.0 |\n\n\n#### SessionStateChangedEvent\n\nPayload emitted by the `sessionStateChanged` listener.\n\n| Prop         | Type                                                        | Description                                          | Since |\n| ------------ | ----------------------------------------------------------- | ---------------------------------------------------- | ----- |\n| **`state`**  | <code><a href=\"#uwbsessionstate\">UwbSessionState</a></code> | Current session state.                               | 8.0.0 |\n| **`reason`** | <code>string</code>                                         | Optional human-readable reason or error description. | 8.0.0 |\n\n\n#### PluginVersionResult\n\nResult returned when requesting the plugin version.\n\n| Prop          | Type                | Description                   | Since |\n| ------------- | ------------------- | ----------------------------- | ----- |\n| **`version`** | <code>string</code> | Native plugin version string. | 8.0.0 |\n\n\n### Type Aliases\n\n\n#### UwbSessionState\n\nSession lifecycle states reported by the plugin.\n\n<code>'initialized' | 'running' | 'suspended' | 'resumed' | 'invalidated' | 'stopped' | 'peerDisconnected'</code>\n\n</docgen-api>\n","readmeFilename":"README.md"}