{"_id":"@capawesome/capacitor-grafana-faro","_rev":"4-e4601b9c081e180b414f3938d53418ad","name":"@capawesome/capacitor-grafana-faro","dist-tags":{"dev":"0.0.1-dev.f4af2049.1779796690","latest":"0.1.2"},"versions":{"0.0.1-dev.f4af2049.1779796690":{"name":"@capawesome/capacitor-grafana-faro","version":"0.0.1-dev.f4af2049.1779796690","keywords":["capacitor","faro","grafana","monitoring","native","observability","plugin","rum","telemetry"],"author":{"name":"Robin Genz","email":"mail@robingenz.dev"},"license":"Apache-2.0","_id":"@capawesome/capacitor-grafana-faro@0.0.1-dev.f4af2049.1779796690","maintainers":[{"name":"robingenz","email":"mail@robingenz.dev"}],"homepage":"https://github.com/capawesome-team/capacitor-plugins#readme","bugs":{"url":"https://github.com/capawesome-team/capacitor-plugins/issues"},"dist":{"shasum":"6a55deb6f91f141b3ef2ac8dff9766f8b09c6cc6","tarball":"https://registry.npmjs.org/@capawesome/capacitor-grafana-faro/-/capacitor-grafana-faro-0.0.1-dev.f4af2049.1779796690.tgz","fileCount":68,"integrity":"sha512-QO9UNXfCYWr9YU4lvcmVNHfxNcReOi3TMutV5oHJfxzgjVXoq6KovYKtQ2IDBdNapApWthZTnS5KOwlDimdh8Q==","signatures":[{"sig":"MEUCIQCRK1YAeHKOp0SLZx3MeU97+05HNs5Ol1o/CMbNsIO1JQIgWFwwXhgJgQ7SesrSRSxW0Q1Ze+8H1CqOx0XESQw6dh4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":250768},"main":"dist/plugin.cjs.js","types":"dist/esm/index.d.ts","unpkg":"dist/plugin.js","module":"dist/esm/index.js","funding":[{"url":"https://github.com/sponsors/capawesome-team/","type":"github"},{"url":"https://opencollective.com/capawesome","type":"opencollective"}],"gitHead":"f4af2049c193afad7186548aedfe54d544e2e9a3","scripts":{"fmt":"npm run eslint -- --fix && npm run prettier -- --write && npm run swiftlint -- --fix --format","lint":"npm run eslint && npm run prettier -- --check && npm run swiftlint -- lint","build":"npm run clean && npm run docgen && tsc && rollup -c rollup.config.mjs","clean":"rimraf ./dist","watch":"tsc --watch","docgen":"docgen --api GrafanaFaroPlugin --output-readme README.md --output-json dist/docs.json","eslint":"eslint . --ext ts","verify":"npm run verify:ios && npm run verify:android && npm run verify:web","prettier":"prettier \"**/*.{css,html,ts,js,java}\"","swiftlint":"node-swiftlint","verify:ios":"cd ios && pod install && xcodebuild -workspace Plugin.xcworkspace -scheme Plugin -destination generic/platform=iOS && cd ..","verify:web":"npm run build","prepublishOnly":"npm run build","verify:android":"cd android && ./gradlew clean build test && cd ..","ios:pod:install":"cd ios && pod install --repo-update && cd ..","ios:spm:install":"cd ios && swift package resolve && cd .."},"_npmUser":{"name":"robingenz","email":"mail@robingenz.dev"},"capacitor":{"ios":{"src":"ios"},"android":{"src":"android"}},"swiftlint":"@ionic/swiftlint-config","repository":{"url":"git+https://github.com/capawesome-team/capacitor-plugins.git","type":"git"},"_npmVersion":"11.12.1","description":"Unofficial Capacitor plugin for Grafana Faro.","directories":{},"_nodeVersion":"24.15.0","eslintConfig":{"extends":"@ionic/eslint-config/recommended"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"8.57.0","rimraf":"6.1.2","rollup":"4.53.3","prettier":"3.4.2","swiftlint":"2.0.0","typescript":"5.9.3","@capacitor/cli":"8.0.0","@capacitor/ios":"8.0.0","@capacitor/core":"8.0.0","@capacitor/docgen":"0.3.1","@capacitor/android":"8.0.0","@ionic/eslint-config":"0.4.0","prettier-plugin-java":"2.6.7","@grafana/faro-web-sdk":"2.6.3","@ionic/swiftlint-config":"2.0.0"},"peerDependencies":{"@capacitor/core":">=8.0.0","@grafana/faro-web-sdk":">=2.0.0"},"peerDependenciesMeta":{"@grafana/faro-web-sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/capacitor-grafana-faro_0.0.1-dev.f4af2049.1779796690_1779797034705_0.3302787068704258","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"@capawesome/capacitor-grafana-faro","version":"0.1.0","keywords":["capacitor","faro","grafana","monitoring","native","observability","plugin","rum","telemetry"],"author":{"name":"Robin Genz","email":"mail@robingenz.dev"},"license":"Apache-2.0","_id":"@capawesome/capacitor-grafana-faro@0.1.0","maintainers":[{"name":"robingenz","email":"mail@robingenz.dev"}],"homepage":"https://github.com/capawesome-team/capacitor-plugins#readme","bugs":{"url":"https://github.com/capawesome-team/capacitor-plugins/issues"},"dist":{"shasum":"c107df6b212531e48102f5ee48405ac2164b4dfc","tarball":"https://registry.npmjs.org/@capawesome/capacitor-grafana-faro/-/capacitor-grafana-faro-0.1.0.tgz","fileCount":68,"integrity":"sha512-f74GFfUf2Fuvq9GZGLwLfg/PHn/HtF2nJ50HVYWR+4MaxB5TEkfb3j3wwhP6jXx7wIV4g+alAQwQ2b8cP+R/uw==","signatures":[{"sig":"MEQCIEEpBEag9o6eKS+lcTXBHrWfiKZ+3Pj+bjEMijzg7IZLAiAI9mQIwrAsG3RxiRvfRWxklUfndOOszoM5rKU/Cps2bg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@capawesome%2fcapacitor-grafana-faro@0.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":251122},"main":"dist/plugin.cjs.js","types":"dist/esm/index.d.ts","unpkg":"dist/plugin.js","module":"dist/esm/index.js","funding":[{"url":"https://github.com/sponsors/capawesome-team/","type":"github"},{"url":"https://opencollective.com/capawesome","type":"opencollective"}],"gitHead":"bdc4184e52896b70cc68ea7945bdee4b66aad473","scripts":{"fmt":"npm run eslint -- --fix && npm run prettier -- --write && npm run swiftlint -- --fix --format","lint":"npm run eslint && npm run prettier -- --check && npm run swiftlint -- lint","build":"npm run clean && npm run docgen && tsc && rollup -c rollup.config.mjs","clean":"rimraf ./dist","watch":"tsc --watch","docgen":"docgen --api GrafanaFaroPlugin --output-readme README.md --output-json dist/docs.json","eslint":"eslint . --ext ts","verify":"npm run verify:ios && npm run verify:android && npm run verify:web","prettier":"prettier \"**/*.{css,html,ts,js,java}\"","swiftlint":"node-swiftlint","verify:ios":"cd ios && pod install && xcodebuild -workspace Plugin.xcworkspace -scheme Plugin -destination generic/platform=iOS && cd ..","verify:web":"npm run build","prepublishOnly":"npm run build","verify:android":"cd android && ./gradlew clean build test && cd ..","ios:pod:install":"cd ios && pod install --repo-update && cd ..","ios:spm:install":"cd ios && swift package resolve && cd .."},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:70ecf7d3-1344-43ac-82c8-6a2e39dc7f20"}},"capacitor":{"ios":{"src":"ios"},"android":{"src":"android"}},"swiftlint":"@ionic/swiftlint-config","repository":{"url":"git+https://github.com/capawesome-team/capacitor-plugins.git","type":"git"},"_npmVersion":"11.12.1","description":"Unofficial Capacitor plugin for Grafana Faro.","directories":{},"_nodeVersion":"24.15.0","eslintConfig":{"extends":"@ionic/eslint-config/recommended"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"8.57.0","rimraf":"6.1.2","rollup":"4.53.3","prettier":"3.4.2","swiftlint":"2.0.0","typescript":"5.9.3","@capacitor/cli":"8.0.0","@capacitor/ios":"8.0.0","@capacitor/core":"8.0.0","@capacitor/docgen":"0.3.1","@capacitor/android":"8.0.0","@ionic/eslint-config":"0.4.0","prettier-plugin-java":"2.6.7","@grafana/faro-web-sdk":"2.6.3","@ionic/swiftlint-config":"2.0.0"},"peerDependencies":{"@capacitor/core":">=8.0.0","@grafana/faro-web-sdk":">=2.0.0"},"peerDependenciesMeta":{"@grafana/faro-web-sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/capacitor-grafana-faro_0.1.0_1779866838819_0.42593358649066215","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@capawesome/capacitor-grafana-faro","version":"0.1.1","keywords":["capacitor","plugin","native","ionic","android","ios","grafana","faro","capacitor-plugin","grafana faro","real user monitoring","rum","observability","crash reporting","error tracking","frontend monitoring"],"author":{"name":"Robin Genz","email":"mail@robingenz.dev"},"license":"Apache-2.0","_id":"@capawesome/capacitor-grafana-faro@0.1.1","maintainers":[{"name":"robingenz","email":"mail@robingenz.dev"}],"homepage":"https://capawesome.io/docs/sdks/capacitor/grafana-faro/","bugs":{"url":"https://github.com/capawesome-team/capacitor-plugins/issues"},"dist":{"shasum":"e2dc50f0f9d5c7f3e3136a6dcab9caab02cdef43","tarball":"https://registry.npmjs.org/@capawesome/capacitor-grafana-faro/-/capacitor-grafana-faro-0.1.1.tgz","fileCount":69,"integrity":"sha512-R8GD/emLwRuko5qnMuhKSkf5NsOIiQuzfgATq/zkuInCxNEgIGsal/ktHwvBryDIs92bO9ap6qoh/1g8IZ2NAw==","signatures":[{"sig":"MEUCIQCAXOEc1BFCDDEr9mQituTHRNsWgMm2eBavAUMXKH4ObwIgZmTnGLcXaHkPjG3klhTHNlPMTadwVQHlIorGTDkwKWA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@capawesome%2fcapacitor-grafana-faro@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":267680},"main":"dist/plugin.cjs.js","types":"dist/esm/index.d.ts","unpkg":"dist/plugin.js","module":"dist/esm/index.js","funding":[{"url":"https://github.com/sponsors/capawesome-team/","type":"github"},{"url":"https://opencollective.com/capawesome","type":"opencollective"}],"gitHead":"3e61f4b412f9f3f512c21169bb135bbb23a67e6d","scripts":{"fmt":"npm run eslint -- --fix && npm run prettier -- --write && npm run swiftlint -- --fix --format","lint":"npm run eslint && npm run prettier -- --check && npm run swiftlint -- lint","build":"npm run clean && npm run docgen && tsc && rollup -c rollup.config.mjs","clean":"rimraf ./dist","watch":"tsc --watch","docgen":"docgen --api GrafanaFaroPlugin --output-readme README.md --output-json dist/docs.json","eslint":"eslint . --ext ts","verify":"npm run verify:ios && npm run verify:android && npm run verify:web","prettier":"prettier \"**/*.{css,html,ts,js,java}\"","swiftlint":"node-swiftlint","verify:ios":"cd ios && pod install && xcodebuild -workspace Plugin.xcworkspace -scheme Plugin -destination generic/platform=iOS && cd ..","verify:web":"npm run build","prepublishOnly":"npm run build","verify:android":"cd android && ./gradlew clean build test && cd ..","ios:pod:install":"cd ios && pod install --repo-update && cd ..","ios:spm:install":"cd ios && swift package resolve && cd .."},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:70ecf7d3-1344-43ac-82c8-6a2e39dc7f20"}},"capacitor":{"ios":{"src":"ios"},"android":{"src":"android"}},"repository":{"url":"git+https://github.com/capawesome-team/capacitor-plugins.git","type":"git"},"_npmVersion":"11.16.0","description":"Unofficial Capacitor plugin for Grafana Faro on Android, iOS, and Web.","directories":{},"_nodeVersion":"24.18.0","eslintConfig":{"extends":"@ionic/eslint-config/recommended"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"8.57.0","rimraf":"6.1.2","rollup":"4.53.3","swiftlint":"2.0.0","typescript":"5.9.3","@capacitor/cli":"8.0.0","@capacitor/ios":"8.0.0","@capacitor/core":"8.0.0","@capacitor/docgen":"0.3.1","@capacitor/android":"8.0.0","@ionic/eslint-config":"0.4.0","prettier-plugin-java":"2.6.7","@grafana/faro-web-sdk":"2.6.3"},"peerDependencies":{"@capacitor/core":">=8.0.0","@grafana/faro-web-sdk":">=2.0.0"},"peerDependenciesMeta":{"@grafana/faro-web-sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/capacitor-grafana-faro_0.1.1_1784102972352_0.44096022013582825","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@capawesome/capacitor-grafana-faro","version":"0.1.2","description":"Unofficial Capacitor plugin for Grafana Faro on Android, iOS, and Web.","main":"dist/plugin.cjs.js","module":"dist/esm/index.js","types":"dist/esm/index.d.ts","unpkg":"dist/plugin.js","author":{"name":"Robin Genz","email":"mail@robingenz.dev"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/capawesome-team/capacitor-plugins.git"},"bugs":{"url":"https://github.com/capawesome-team/capacitor-plugins/issues"},"funding":[{"type":"github","url":"https://github.com/sponsors/capawesome-team/"},{"type":"opencollective","url":"https://opencollective.com/capawesome"}],"homepage":"https://capawesome.io/docs/sdks/capacitor/grafana-faro/","keywords":["capacitor","plugin","native","ionic","android","ios","grafana","faro","capacitor-plugin","grafana faro","real user monitoring","rum","observability","crash reporting","error tracking","frontend monitoring"],"scripts":{"verify":"npm run verify:ios && npm run verify:android && npm run verify:web","verify:ios":"cd ios && pod install && xcodebuild -workspace Plugin.xcworkspace -scheme Plugin -destination generic/platform=iOS && cd ..","verify:android":"cd android && ./gradlew clean build test && cd ..","verify:web":"npm run build","lint":"npm run eslint && npm run prettier -- --check && npm run swiftlint -- lint","fmt":"npm run eslint -- --fix && npm run prettier -- --write && npm run swiftlint -- --fix --format","eslint":"eslint . --ext ts","prettier":"prettier \"**/*.{css,html,ts,js,java}\"","swiftlint":"node-swiftlint","docgen":"docgen --api GrafanaFaroPlugin --output-readme README.md --output-json dist/docs.json","build":"npm run clean && npm run docgen && tsc && rollup -c rollup.config.mjs","clean":"rimraf ./dist","watch":"tsc --watch","ios:pod:install":"cd ios && pod install --repo-update && cd ..","ios:spm:install":"cd ios && swift package resolve && cd ..","prepublishOnly":"npm run build"},"devDependencies":{"@capacitor/android":"8.0.0","@capacitor/cli":"8.4.2","@capacitor/core":"8.0.0","@capacitor/docgen":"0.3.1","@capacitor/ios":"8.0.0","@grafana/faro-web-sdk":"2.6.3","@ionic/eslint-config":"0.4.0","eslint":"8.57.0","prettier-plugin-java":"2.9.7","rimraf":"6.1.2","rollup":"4.62.3","swiftlint":"2.0.0","typescript":"5.9.3"},"peerDependencies":{"@capacitor/core":">=8.0.0","@grafana/faro-web-sdk":">=2.0.0"},"peerDependenciesMeta":{"@grafana/faro-web-sdk":{"optional":true}},"eslintConfig":{"extends":"@ionic/eslint-config/recommended"},"capacitor":{"ios":{"src":"ios"},"android":{"src":"android"}},"publishConfig":{"access":"public"},"gitHead":"7c1937ed10b7de86ca2c1cdc3539a2735fd69a00","_id":"@capawesome/capacitor-grafana-faro@0.1.2","_nodeVersion":"24.19.0","_npmVersion":"11.17.0","dist":{"integrity":"sha512-sW1uIcaBeUn92LpGbvaVWhWSZNMpqe3IfMyiILqyaWJ1NjC8LhPxcoMBOJ8ZU47+1hJ8r/LPLipYWwWy+2N/aw==","shasum":"a315b01db987fd0354462ab150f14f899a321f5f","tarball":"https://registry.npmjs.org/@capawesome/capacitor-grafana-faro/-/capacitor-grafana-faro-0.1.2.tgz","fileCount":69,"unpackedSize":267733,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@capawesome%2fcapacitor-grafana-faro@0.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIFZQrnH/xhkVSKxhkeoMgEcKy+8ozC/V8h9P1KUvklyoAiEAia88EzbGv3PS5W+gofT/0kJdoIUSDqPZ7sQJuyNwhr0="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:70ecf7d3-1344-43ac-82c8-6a2e39dc7f20"}},"directories":{},"maintainers":[{"name":"robingenz","email":"mail@robingenz.dev"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/capacitor-grafana-faro_0.1.2_1788337350041_0.754037435205893"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-26T12:03:54.548Z","modified":"2026-09-02T08:22:30.569Z","0.0.1-dev.f4af2049.1779796690":"2026-05-26T12:03:54.866Z","0.1.0":"2026-05-27T07:27:18.962Z","0.1.1":"2026-07-15T08:09:32.528Z","0.1.2":"2026-09-02T08:22:30.198Z"},"bugs":{"url":"https://github.com/capawesome-team/capacitor-plugins/issues"},"author":{"name":"Robin Genz","email":"mail@robingenz.dev"},"license":"Apache-2.0","homepage":"https://capawesome.io/docs/sdks/capacitor/grafana-faro/","keywords":["capacitor","plugin","native","ionic","android","ios","grafana","faro","capacitor-plugin","grafana faro","real user monitoring","rum","observability","crash reporting","error tracking","frontend monitoring"],"repository":{"type":"git","url":"git+https://github.com/capawesome-team/capacitor-plugins.git"},"description":"Unofficial Capacitor plugin for Grafana Faro on Android, iOS, and Web.","maintainers":[{"name":"robingenz","email":"mail@robingenz.dev"}],"readme":"# Capacitor Grafana Faro Plugin\n\nUnofficial Capacitor plugin for [Grafana Faro](https://grafana.com/oss/faro/).[^1]\n\n> ⚠️ **Experimental:** This plugin is in early development. APIs may change between minor versions. Feedback and bug reports are very welcome — please [open an issue](https://github.com/capawesome-team/capacitor-plugins/issues).\n\n<div class=\"capawesome-z29o10a\">\n  <a href=\"https://cloud.capawesome.io/\" target=\"_blank\">\n    <img alt=\"Deliver Live Updates to your Capacitor app with Capawesome Cloud\" src=\"https://cloud.capawesome.io/assets/banners/cloud-build-and-deploy-capacitor-apps.png?t=1\" />\n  </a>\n</div>\n\n## Features\n\nThe Capacitor Grafana Faro plugin is one of the most complete frontend observability solutions for Capacitor apps. Here are some of the key features:\n\n- 🖥️ **Cross-platform**: Supports Android, iOS and Web.\n- 📝 **Logs**: Capture log messages with severity levels and structured context.\n- 📡 **Events**: Track custom events with attributes and a platform domain.\n- 💥 **Errors**: Capture errors with optional stack frames (compatible with [`stacktrace.js`](https://www.stacktracejs.com/)).\n- 📊 **Measurements**: Record numeric metrics for performance and business KPIs.\n- 👤 **User, Session and View Metadata**: Attach user, session and view information to every signal.\n- 🛡️ **Native Crash Reporting**: Capture native crashes via [PLCrashReporter](https://github.com/microsoft/plcrashreporter) on iOS and [`ApplicationExitInfo`](https://developer.android.com/reference/android/app/ApplicationExitInfo) on Android.\n- 🐌 **ANR Detection**: Detect Application Not Responding events on the Android main thread.\n- 🌐 **Web Auto-Instrumentation**: Automatically capture uncaught errors, console output, Core Web Vitals, route changes and network performance on Web.\n- ⏯️ **Pause and Resume**: Pause and resume telemetry on demand.\n- 🎯 **Session Sampling**: Sample sessions with a configurable rate to control data volume.\n- 🤝 **Compatibility**: Works alongside the [Firebase Analytics](https://capawesome.io/docs/sdks/capacitor/firebase/analytics/) and [PostHog](https://capawesome.io/docs/sdks/capacitor/posthog/) plugins.\n\n## Use Cases\n\nThe Grafana Faro plugin is typically used to monitor Capacitor apps in production, for example:\n\n- **Crash and error monitoring**: Capture JavaScript errors as well as native crashes on Android and iOS and analyze them in Grafana.\n- **Performance monitoring**: Record Core Web Vitals and network performance on Web, or push custom measurements such as startup or sign-in durations.\n- **Usage analytics**: Track custom events with attributes to understand how users move through your app.\n- **Centralized logging**: Send log messages with severity levels and structured context to your Faro collector.\n- **Stability monitoring on Android**: Detect Application Not Responding (ANR) events on the main thread.\n\n## Compatibility\n\n| Plugin Version | Capacitor Version | Status         |\n| -------------- | ----------------- | -------------- |\n| 0.1.x          | >=8.x.x           | Active support |\n\n## Installation\n\nYou can use our **AI-Assisted Setup** to install the plugin.\nAdd the [Capawesome Skills](https://github.com/capawesome-team/skills) to your AI tool using the following command:\n\n```bash\nnpx skills add capawesome-team/skills --skill capacitor-plugins\n```\n\nThen use the following prompt:\n\n```\n Use the `capacitor-plugins` skill from `capawesome-team/skills` to install the `@capawesome/capacitor-grafana-faro` 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\nnpm install @capawesome/capacitor-grafana-faro @grafana/faro-web-sdk\nnpx cap sync\n```\n\n### iOS\n\n#### Minimum Deployment Target\n\nThis plugin depends on [PLCrashReporter](https://github.com/microsoft/plcrashreporter) for native crash reporting. Make sure that your iOS deployment target is set to at least `15.0` in your Xcode project settings (usually in `ios/App/App.xcodeproj`):\n\n```diff\n-IPHONEOS_DEPLOYMENT_TARGET = 14.0\n+IPHONEOS_DEPLOYMENT_TARGET = 15.0\n```\n\nIf you are using **CocoaPods**, make sure that your iOS deployment target is set to at least `15.0` in your `Podfile`:\n\n```ruby\nplatform :ios, '15.0'\n```\n\n#### Conflicts with other crash reporters\n\nPLCrashReporter installs global crash handlers. Running this plugin alongside another crash reporter that also installs handlers (e.g. Firebase Crashlytics, Sentry) can lead to one or both reporters losing crash reports. Enable `instrumentations.nativeCrashReporting` only when no other crash reporter is active.\n\n## Configuration\n\n<docgen-config>\n<!--Update the source file JSDoc comments and rerun docgen to update the docs below-->\n\nBuild-time configuration for the Grafana Faro plugin.\n\nWhen `url` and `appName` are both provided, the native plugin\nauto-initializes during app startup. This allows native crash and ANR\nhandlers to be installed before any JavaScript code runs. Calling\n`GrafanaFaro.initialize(...)` from JavaScript afterwards is not required\nand will fail with an `already initialized` error.\n\nOnly applies to Android and iOS.\n\n| Prop                   | Type                                                                    | Description                                                                                                                | Since |\n| ---------------------- | ----------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | ----- |\n| **`apiKey`**           | <code>string</code>                                                     | The API key sent as the `x-api-key` header.                                                                                | 0.1.0 |\n| **`appEnvironment`**   | <code>string</code>                                                     | The environment of the application (e.g. `production`, `staging`).                                                         | 0.1.0 |\n| **`appName`**          | <code>string</code>                                                     | The name of the application.                                                                                               | 0.1.0 |\n| **`appNamespace`**     | <code>string</code>                                                     | The namespace of the application.                                                                                          | 0.1.0 |\n| **`appVersion`**       | <code>string</code>                                                     | The version of the application.                                                                                            | 0.1.0 |\n| **`instrumentations`** | <code>{ anrTracking?: boolean; nativeCrashReporting?: boolean; }</code> | Toggles for built-in automatic instrumentations. Only the toggles that apply at build time on Android and iOS are honored. | 0.1.0 |\n| **`url`**              | <code>string</code>                                                     | The Faro collector endpoint URL.                                                                                           | 0.1.0 |\n\n### Examples\n\nIn `capacitor.config.json`:\n\n```json\n{\n  \"plugins\": {\n    \"GrafanaFaro\": {\n      \"apiKey\": undefined,\n      \"appEnvironment\": undefined,\n      \"appName\": undefined,\n      \"appNamespace\": undefined,\n      \"appVersion\": undefined,\n      \"instrumentations\": undefined,\n      \"url\": 'https://faro-collector-prod.grafana.net/collect/<token>'\n    }\n  }\n}\n```\n\nIn `capacitor.config.ts`:\n\n```ts\n/// <reference types=\"@capawesome/capacitor-grafana-faro\" />\n\nimport { CapacitorConfig } from '@capacitor/cli';\n\nconst config: CapacitorConfig = {\n  plugins: {\n    GrafanaFaro: {\n      apiKey: undefined,\n      appEnvironment: undefined,\n      appName: undefined,\n      appNamespace: undefined,\n      appVersion: undefined,\n      instrumentations: undefined,\n      url: 'https://faro-collector-prod.grafana.net/collect/<token>',\n    },\n  },\n};\n\nexport default config;\n```\n\n</docgen-config>\n\n## Usage\n\nThe following examples show how to initialize the Faro SDK, send log messages, track custom events, capture errors, record measurements, and attach user and view metadata.\n\n### Initialize the Faro SDK\n\nCall `initialize(...)` before any other method to connect the plugin to your Faro collector endpoint. Alternatively, provide the `url` and `appName` options in the [Configuration](#configuration) so that the native plugin auto-initializes during app startup:\n\n```typescript\nimport { GrafanaFaro } from '@capawesome/capacitor-grafana-faro';\n\nconst initialize = async () => {\n  await GrafanaFaro.initialize({\n    app: {\n      environment: 'production',\n      name: 'my-app',\n      version: '1.0.0',\n    },\n    instrumentations: {\n      anrTracking: true,\n      console: true,\n      errors: true,\n      nativeCrashReporting: true,\n      performance: true,\n      view: true,\n      webVitals: true,\n    },\n    url: 'https://faro-collector-prod-us-central-0.grafana.net/collect/REPLACE_ME',\n  });\n};\n```\n\n### Send log messages\n\nCapture log messages with a severity level and an optional structured context:\n\n```typescript\nimport { GrafanaFaro } from '@capawesome/capacitor-grafana-faro';\n\nconst pushLog = async () => {\n  await GrafanaFaro.pushLog({\n    level: 'info',\n    message: 'User pressed sign-in button',\n  });\n};\n```\n\n### Track custom events\n\nTrack user interactions or business events with custom attributes:\n\n```typescript\nimport { GrafanaFaro } from '@capawesome/capacitor-grafana-faro';\n\nconst pushEvent = async () => {\n  await GrafanaFaro.pushEvent({\n    attributes: { provider: 'google' },\n    name: 'sign_in_started',\n  });\n};\n```\n\n### Capture errors\n\nPush errors with an optional pre-parsed stack trace. Use a library like `stacktrace-js` to parse the stack into structured frames:\n\n```typescript\nimport { GrafanaFaro } from '@capawesome/capacitor-grafana-faro';\n\nconst pushError = async (error: Error) => {\n  await GrafanaFaro.pushError({\n    type: error.name,\n    value: error.message,\n  });\n};\n\nconst pushErrorWithStacktrace = async (error: Error) => {\n  // Use `stacktrace-js` (or any equivalent) to parse the stack into\n  // structured frames.\n  const StackTrace = await import('stacktrace-js');\n  const stackFrames = await StackTrace.fromError(error);\n  await GrafanaFaro.pushError({\n    type: error.name,\n    value: error.message,\n    stackFrames: stackFrames.map(frame => ({\n      columnNumber: frame.columnNumber,\n      fileName: frame.fileName,\n      functionName: frame.functionName,\n      lineNumber: frame.lineNumber,\n    })),\n  });\n};\n```\n\n### Record measurements\n\nRecord numeric metrics, for example performance timings or business KPIs:\n\n```typescript\nimport { GrafanaFaro } from '@capawesome/capacitor-grafana-faro';\n\nconst pushMeasurement = async () => {\n  await GrafanaFaro.pushMeasurement({\n    type: 'sign_in_duration',\n    values: { duration_ms: 320 },\n  });\n};\n```\n\n### Attach user and view metadata\n\nAttach user and view information to every signal:\n\n```typescript\nimport { GrafanaFaro } from '@capawesome/capacitor-grafana-faro';\n\nconst setUser = async () => {\n  await GrafanaFaro.setUser({\n    email: 'jane@example.com',\n    id: 'user-123',\n    username: 'jane',\n  });\n};\n\nconst setView = async () => {\n  await GrafanaFaro.setView({ name: 'SignInView' });\n};\n```\n\n## API\n\n<docgen-index>\n\n* [`getSession()`](#getsession)\n* [`getView()`](#getview)\n* [`initialize(...)`](#initialize)\n* [`pause()`](#pause)\n* [`pushError(...)`](#pusherror)\n* [`pushEvent(...)`](#pushevent)\n* [`pushLog(...)`](#pushlog)\n* [`pushMeasurement(...)`](#pushmeasurement)\n* [`resetSession()`](#resetsession)\n* [`resetUser()`](#resetuser)\n* [`setSession(...)`](#setsession)\n* [`setUser(...)`](#setuser)\n* [`setView(...)`](#setview)\n* [`unpause()`](#unpause)\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\n### getSession()\n\n```typescript\ngetSession() => Promise<GetSessionResult>\n```\n\nGet the current session.\n\n**Returns:** <code>Promise&lt;<a href=\"#getsessionresult\">GetSessionResult</a>&gt;</code>\n\n**Since:** 0.1.0\n\n--------------------\n\n\n### getView()\n\n```typescript\ngetView() => Promise<GetViewResult>\n```\n\nGet the current view.\n\n**Returns:** <code>Promise&lt;<a href=\"#getviewresult\">GetViewResult</a>&gt;</code>\n\n**Since:** 0.1.0\n\n--------------------\n\n\n### initialize(...)\n\n```typescript\ninitialize(options: InitializeOptions) => Promise<void>\n```\n\nInitialize the Faro SDK.\n\n**Attention**: This method must be called before any other method.\n\n| Param         | Type                                                            |\n| ------------- | --------------------------------------------------------------- |\n| **`options`** | <code><a href=\"#initializeoptions\">InitializeOptions</a></code> |\n\n**Since:** 0.1.0\n\n--------------------\n\n\n### pause()\n\n```typescript\npause() => Promise<void>\n```\n\nPause sending telemetry. New signals are still buffered locally.\n\n**Since:** 0.1.0\n\n--------------------\n\n\n### pushError(...)\n\n```typescript\npushError(options: PushErrorOptions) => Promise<void>\n```\n\nPush an error/exception.\n\n| Param         | Type                                                          |\n| ------------- | ------------------------------------------------------------- |\n| **`options`** | <code><a href=\"#pusherroroptions\">PushErrorOptions</a></code> |\n\n**Since:** 0.1.0\n\n--------------------\n\n\n### pushEvent(...)\n\n```typescript\npushEvent(options: PushEventOptions) => Promise<void>\n```\n\nPush a custom event.\n\n| Param         | Type                                                          |\n| ------------- | ------------------------------------------------------------- |\n| **`options`** | <code><a href=\"#pusheventoptions\">PushEventOptions</a></code> |\n\n**Since:** 0.1.0\n\n--------------------\n\n\n### pushLog(...)\n\n```typescript\npushLog(options: PushLogOptions) => Promise<void>\n```\n\nPush a log message.\n\n| Param         | Type                                                      |\n| ------------- | --------------------------------------------------------- |\n| **`options`** | <code><a href=\"#pushlogoptions\">PushLogOptions</a></code> |\n\n**Since:** 0.1.0\n\n--------------------\n\n\n### pushMeasurement(...)\n\n```typescript\npushMeasurement(options: PushMeasurementOptions) => Promise<void>\n```\n\nPush a measurement (numeric metric).\n\n| Param         | Type                                                                      |\n| ------------- | ------------------------------------------------------------------------- |\n| **`options`** | <code><a href=\"#pushmeasurementoptions\">PushMeasurementOptions</a></code> |\n\n**Since:** 0.1.0\n\n--------------------\n\n\n### resetSession()\n\n```typescript\nresetSession() => Promise<void>\n```\n\nClear the current session and start a new one.\n\n**Since:** 0.1.0\n\n--------------------\n\n\n### resetUser()\n\n```typescript\nresetUser() => Promise<void>\n```\n\nClear the current user.\n\n**Since:** 0.1.0\n\n--------------------\n\n\n### setSession(...)\n\n```typescript\nsetSession(options: SetSessionOptions) => Promise<void>\n```\n\nSet the current session.\n\n| Param         | Type                                                            |\n| ------------- | --------------------------------------------------------------- |\n| **`options`** | <code><a href=\"#setsessionoptions\">SetSessionOptions</a></code> |\n\n**Since:** 0.1.0\n\n--------------------\n\n\n### setUser(...)\n\n```typescript\nsetUser(options: SetUserOptions) => Promise<void>\n```\n\nSet the current user.\n\n| Param         | Type                                                  |\n| ------------- | ----------------------------------------------------- |\n| **`options`** | <code><a href=\"#usermetadata\">UserMetadata</a></code> |\n\n**Since:** 0.1.0\n\n--------------------\n\n\n### setView(...)\n\n```typescript\nsetView(options: SetViewOptions) => Promise<void>\n```\n\nSet the current view (e.g. screen / route name).\n\n| Param         | Type                                                  |\n| ------------- | ----------------------------------------------------- |\n| **`options`** | <code><a href=\"#viewmetadata\">ViewMetadata</a></code> |\n\n**Since:** 0.1.0\n\n--------------------\n\n\n### unpause()\n\n```typescript\nunpause() => Promise<void>\n```\n\nResume sending telemetry.\n\n**Since:** 0.1.0\n\n--------------------\n\n\n### Interfaces\n\n\n#### GetSessionResult\n\n| Prop             | Type                                    | Description                     | Since |\n| ---------------- | --------------------------------------- | ------------------------------- | ----- |\n| **`attributes`** | <code>{ [key: string]: string; }</code> | The current session attributes. | 0.1.0 |\n| **`id`**         | <code>string</code>                     | The current session ID.         | 0.1.0 |\n\n\n#### GetViewResult\n\n| Prop       | Type                | Description            | Since |\n| ---------- | ------------------- | ---------------------- | ----- |\n| **`name`** | <code>string</code> | The current view name. | 0.1.0 |\n\n\n#### InitializeOptions\n\n| Prop                      | Type                                                                        | Description                                                         | Default            | Since |\n| ------------------------- | --------------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------ | ----- |\n| **`apiKey`**              | <code>string</code>                                                         | API key sent as the `x-api-key` header to the collector.            |                    | 0.1.0 |\n| **`app`**                 | <code><a href=\"#appmetadata\">AppMetadata</a></code>                         | Application metadata attached to every signal.                      |                    | 0.1.0 |\n| **`ignoreErrors`**        | <code>string[]</code>                                                       | Error message patterns to ignore.                                   |                    | 0.1.0 |\n| **`ignoreUrls`**          | <code>string[]</code>                                                       | URL patterns to ignore when instrumenting network calls.            |                    | 0.1.0 |\n| **`instrumentations`**    | <code><a href=\"#instrumentationsoptions\">InstrumentationsOptions</a></code> | Toggles for built-in automatic instrumentations.                    |                    | 0.1.0 |\n| **`paused`**              | <code>boolean</code>                                                        | Start in a paused state. Telemetry must be resumed via `unpause()`. | <code>false</code> | 0.1.0 |\n| **`sessionAttributes`**   | <code>{ [key: string]: string; }</code>                                     | Initial session attributes.                                         |                    | 0.1.0 |\n| **`sessionSamplingRate`** | <code>number</code>                                                         | Session sampling rate in `[0, 1]`. `1` = all sessions, `0` = none.  | <code>1</code>     | 0.1.0 |\n| **`url`**                 | <code>string</code>                                                         | The Faro collector endpoint URL.                                    |                    | 0.1.0 |\n| **`user`**                | <code><a href=\"#usermetadata\">UserMetadata</a></code>                       | Initial user metadata.                                              |                    | 0.1.0 |\n| **`view`**                | <code><a href=\"#viewmetadata\">ViewMetadata</a></code>                       | Initial view metadata.                                              |                    | 0.1.0 |\n\n\n#### AppMetadata\n\n| Prop              | Type                | Description                                                        | Since |\n| ----------------- | ------------------- | ------------------------------------------------------------------ | ----- |\n| **`environment`** | <code>string</code> | The environment of the application (e.g. `production`, `staging`). | 0.1.0 |\n| **`name`**        | <code>string</code> | The name of the application.                                       | 0.1.0 |\n| **`namespace`**   | <code>string</code> | The namespace of the application.                                  | 0.1.0 |\n| **`version`**     | <code>string</code> | The version of the application.                                    | 0.1.0 |\n\n\n#### InstrumentationsOptions\n\nToggles for built-in automatic instrumentations.\n\nNote: some toggles only apply on specific platforms.\nThe plugin silently ignores toggles that do not apply on the current platform.\n\n| Prop                       | Type                 | Description                                                                                | Default            | Since |\n| -------------------------- | -------------------- | ------------------------------------------------------------------------------------------ | ------------------ | ----- |\n| **`anrTracking`**          | <code>boolean</code> | Detect Application Not Responding events on the main thread. Only available for Android.   | <code>false</code> | 0.1.0 |\n| **`console`**              | <code>boolean</code> | Capture `console.warn` and `console.error` calls. Only available for Web.                  | <code>true</code>  | 0.1.0 |\n| **`errors`**               | <code>boolean</code> | Capture uncaught errors and unhandled promise rejections. Only available for Web.          | <code>true</code>  | 0.1.0 |\n| **`nativeCrashReporting`** | <code>boolean</code> | Capture native crashes (reported on the next session). Only available for Android and iOS. | <code>false</code> | 0.1.0 |\n| **`performance`**          | <code>boolean</code> | Capture `fetch` and `XHR` performance entries. Only available for Web.                     | <code>true</code>  | 0.1.0 |\n| **`view`**                 | <code>boolean</code> | Capture History API navigation as view changes. Only available for Web.                    | <code>true</code>  | 0.1.0 |\n| **`webVitals`**            | <code>boolean</code> | Capture Core Web Vitals (LCP, FID, CLS, INP, TTFB). Only available for Web.                | <code>true</code>  | 0.1.0 |\n\n\n#### UserMetadata\n\n| Prop             | Type                                    | Description                                   | Since |\n| ---------------- | --------------------------------------- | --------------------------------------------- | ----- |\n| **`attributes`** | <code>{ [key: string]: string; }</code> | Additional key-value attributes for the user. | 0.1.0 |\n| **`email`**      | <code>string</code>                     | The user's email address.                     | 0.1.0 |\n| **`fullName`**   | <code>string</code>                     | The user's full name.                         | 0.1.0 |\n| **`id`**         | <code>string</code>                     | The user's ID.                                | 0.1.0 |\n| **`username`**   | <code>string</code>                     | The user's username.                          | 0.1.0 |\n\n\n#### ViewMetadata\n\n| Prop       | Type                | Description           | Since |\n| ---------- | ------------------- | --------------------- | ----- |\n| **`name`** | <code>string</code> | The name of the view. | 0.1.0 |\n\n\n#### PushErrorOptions\n\n| Prop              | Type                                    | Description                                           | Default            | Since |\n| ----------------- | --------------------------------------- | ----------------------------------------------------- | ------------------ | ----- |\n| **`context`**     | <code>{ [key: string]: string; }</code> | Additional context attached to the error.             |                    | 0.1.0 |\n| **`fatal`**       | <code>boolean</code>                    | Mark the error as fatal (e.g. caused a crash).        | <code>false</code> | 0.1.0 |\n| **`stackFrames`** | <code>StackFrame[]</code>               | Pre-parsed stack frames generated by `stacktrace.js`. |                    | 0.1.0 |\n| **`type`**        | <code>string</code>                     | The error type (e.g. `'TypeError'`).                  |                    | 0.1.0 |\n| **`value`**       | <code>string</code>                     | The error message.                                    |                    | 0.1.0 |\n\n\n#### StackFrame\n\nSubset of the stacktrace generated by `stacktrace.js`.\n\n| Prop               | Type                | Since |\n| ------------------ | ------------------- | ----- |\n| **`columnNumber`** | <code>number</code> | 0.1.0 |\n| **`fileName`**     | <code>string</code> | 0.1.0 |\n| **`functionName`** | <code>string</code> | 0.1.0 |\n| **`lineNumber`**   | <code>number</code> | 0.1.0 |\n\n\n#### PushEventOptions\n\n| Prop             | Type                                    | Description                                                                                      | Since |\n| ---------------- | --------------------------------------- | ------------------------------------------------------------------------------------------------ | ----- |\n| **`attributes`** | <code>{ [key: string]: string; }</code> | Key-value attributes attached to the event.                                                      | 0.1.0 |\n| **`domain`**     | <code>string</code>                     | Logical grouping for the event. Defaults to the platform domain (`'web'`, `'android'`, `'ios'`). | 0.1.0 |\n| **`name`**       | <code>string</code>                     | The name of the event.                                                                           | 0.1.0 |\n\n\n#### PushLogOptions\n\n| Prop          | Type                                          | Description                             | Default             | Since |\n| ------------- | --------------------------------------------- | --------------------------------------- | ------------------- | ----- |\n| **`context`** | <code>{ [key: string]: string; }</code>       | Additional context attached to the log. |                     | 0.1.0 |\n| **`level`**   | <code><a href=\"#loglevel\">LogLevel</a></code> | The log level.                          | <code>'info'</code> | 0.1.0 |\n| **`message`** | <code>string</code>                           | The log message.                        |                     | 0.1.0 |\n\n\n#### PushMeasurementOptions\n\n| Prop          | Type                                    | Description                                     | Since |\n| ------------- | --------------------------------------- | ----------------------------------------------- | ----- |\n| **`context`** | <code>{ [key: string]: string; }</code> | Additional context attached to the measurement. | 0.1.0 |\n| **`type`**    | <code>string</code>                     | The measurement type (e.g. `'custom_latency'`). | 0.1.0 |\n| **`values`**  | <code>{ [key: string]: number; }</code> | Key-value numeric measurements.                 | 0.1.0 |\n\n\n#### SetSessionOptions\n\n| Prop             | Type                                    | Description                                               | Since |\n| ---------------- | --------------------------------------- | --------------------------------------------------------- | ----- |\n| **`attributes`** | <code>{ [key: string]: string; }</code> | The session attributes.                                   | 0.1.0 |\n| **`id`**         | <code>string</code>                     | Optional session ID. A UUID v4 is generated when omitted. | 0.1.0 |\n\n\n### Type Aliases\n\n\n#### LogLevel\n\n<code>'debug' | 'error' | 'info' | 'log' | 'trace' | 'warn'</code>\n\n\n#### SetUserOptions\n\n<code><a href=\"#usermetadata\">UserMetadata</a></code>\n\n\n#### SetViewOptions\n\n<code><a href=\"#viewmetadata\">ViewMetadata</a></code>\n\n</docgen-api>\n\n## FAQ\n\n### Is this an official Grafana Labs plugin?\n\nNo, this is an unofficial plugin maintained by Capawesome. The project is not affiliated with, endorsed by, sponsored by, or approved by Grafana Labs or any of their affiliates or subsidiaries. It integrates [Grafana Faro](https://grafana.com/oss/faro/) into Capacitor apps.\n\n### Can I use this plugin together with Firebase Crashlytics or Sentry?\n\nOnly with care. The plugin uses PLCrashReporter for native crash reporting on iOS, which installs global crash handlers. Running it alongside another crash reporter that also installs handlers (for example Firebase Crashlytics or Sentry) can lead to one or both reporters losing crash reports. Enable the `instrumentations.nativeCrashReporting` toggle only when no other crash reporter is active.\n\n### Why does the plugin fail with an `already initialized` error?\n\nIf you provide the `url` and `appName` options in the plugin [configuration](#configuration), the native plugin auto-initializes during app startup so that native crash and ANR handlers are installed before any JavaScript code runs. In that case, calling `GrafanaFaro.initialize(...)` from JavaScript is not required and will fail with an `already initialized` error.\n\n### How does native crash reporting work?\n\nNative crashes are captured via [PLCrashReporter](https://github.com/microsoft/plcrashreporter) on iOS and [`ApplicationExitInfo`](https://developer.android.com/reference/android/app/ApplicationExitInfo) on Android and are reported on the next session. The `instrumentations.nativeCrashReporting` toggle is disabled by default, and on iOS your deployment target must be set to at least `15.0` (see [Installation](#installation)).\n\n### How can I reduce the amount of telemetry that is sent?\n\nYou can set the `sessionSamplingRate` option to a value between `0` and `1` to only report a subset of sessions. You can also pause and resume telemetry on demand using the `pause()` and `unpause()` methods, or start in a paused state with the `paused` option.\n\n### Can I use this plugin with Ionic, React, Vue or Angular?\n\nYes, the plugin is framework-agnostic. It works in any Capacitor app regardless of the web framework, including Ionic with Angular, React, or Vue, as well as plain JavaScript projects.\n\n## Related Plugins\n\n- [Firebase Analytics](https://capawesome.io/docs/sdks/capacitor/firebase/analytics/): Unofficial Capacitor plugin for Firebase Analytics.\n- [Firebase Crashlytics](https://capawesome.io/docs/sdks/capacitor/firebase/crashlytics/): Unofficial Capacitor plugin for Firebase Crashlytics crash reporting.\n- [Firebase Performance Monitoring](https://capawesome.io/docs/sdks/capacitor/firebase/performance-monitoring/): Unofficial Capacitor plugin for Firebase Performance Monitoring.\n- [PostHog](https://capawesome.io/docs/sdks/capacitor/posthog/): Unofficial Capacitor plugin for the PostHog product analytics platform.\n\n## Newsletter\n\nStay up to date with the latest news and updates about the Capawesome, Capacitor, and Ionic ecosystem by subscribing to our [Capawesome Newsletter](https://cloud.capawesome.io/newsletter/).\n\n## Changelog\n\nSee [CHANGELOG.md](https://github.com/capawesome-team/capacitor-plugins/blob/main/packages/grafana-faro/CHANGELOG.md).\n\n## License\n\nSee [LICENSE](https://github.com/capawesome-team/capacitor-plugins/blob/main/packages/grafana-faro/LICENSE).\n\n[^1]: This project is not affiliated with, endorsed by, sponsored by, or approved by Grafana Labs or any of their affiliates or subsidiaries.\n","readmeFilename":"README.md"}