{"_id":"@aastrika_npmjs/capacitor-browser","_rev":"2-682a2aed58eb06db06a549abfabf7882","name":"@aastrika_npmjs/capacitor-browser","dist-tags":{"latest":"0.0.2"},"versions":{"0.0.1":{"name":"@aastrika_npmjs/capacitor-browser","version":"0.0.1","keywords":["capacitor","plugin","native","webview","in-app-browser","microphone"],"author":{"name":"Aastrika"},"license":"MIT","_id":"@aastrika_npmjs/capacitor-browser@0.0.1","maintainers":[{"name":"aastrika_npmjs","email":"srinivas@aastrika.org"}],"homepage":"https://github.com/Sphere/capacitor-browser#readme","bugs":{"url":"https://github.com/Sphere/capacitor-browser/issues"},"dist":{"shasum":"e1684fde81029aad558e324dd252139ab25e08e1","tarball":"https://registry.npmjs.org/@aastrika_npmjs/capacitor-browser/-/capacitor-browser-0.0.1.tgz","fileCount":26,"integrity":"sha512-qiOZRDBWYXM5gSswxpjSYNBbMTHiuYJ+E+Qh2Rci53ldh5McwcR/LA2vB9/cqyZk02WfCysDoBuBX43eMq5hRA==","signatures":[{"sig":"MEQCIB/zbg0gzS4Ll9+bNatW+R0rsqIu0Uu01u0jFH6PjhHzAiAjkEbmBON22/9TY1Lpz2vPfupT8A+b+kvIFW2qg7xdvA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":80461},"main":"dist/plugin.cjs.js","types":"dist/esm/index.d.ts","unpkg":"dist/plugin.js","module":"dist/esm/index.js","gitHead":"4322f01b63f14c3da8a824555e78e34cd768baa8","scripts":{"build":"npm run clean && tsc && rollup -c rollup.config.mjs","clean":"rimraf ./dist","watch":"tsc --watch","prepare":"npm run build"},"_npmUser":{"name":"aastrika_npmjs","email":"srinivas@aastrika.org"},"capacitor":{"ios":{"src":"ios"},"android":{"src":"android"}},"repository":{"url":"git+https://github.com/Sphere/capacitor-browser.git","type":"git"},"_npmVersion":"10.8.2","description":"Chromeless in-app browser (iOS WKWebView / Android WebView) with microphone & camera capture — no toolbar/action buttons, single close button.","directories":{},"_nodeVersion":"20.19.2","_hasShrinkwrap":false,"devDependencies":{"rimraf":"^5.0.5","rollup":"^4.9.0","typescript":"~4.9.5","@capacitor/core":"^8.0.0"},"peerDependencies":{"@capacitor/core":"^8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/capacitor-browser_0.0.1_1785832825964_0.06886346676818622","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"@aastrika_npmjs/capacitor-browser","version":"0.0.2","description":"Chromeless in-app browser (iOS WKWebView / Android WebView) with microphone & camera capture — no toolbar/action buttons, single close button.","main":"dist/plugin.cjs.js","module":"dist/esm/index.js","types":"dist/esm/index.d.ts","unpkg":"dist/plugin.js","author":{"name":"Aastrika"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/Sphere/capacitor-browser.git"},"keywords":["capacitor","plugin","native","webview","in-app-browser","microphone"],"scripts":{"build":"npm run clean && tsc && rollup -c rollup.config.mjs","clean":"rimraf ./dist","watch":"tsc --watch","prepare":"npm run build"},"devDependencies":{"@capacitor/core":"^8.0.0","rimraf":"^5.0.5","rollup":"^4.9.0","typescript":"~4.9.5"},"peerDependencies":{"@capacitor/core":"^8.0.0"},"capacitor":{"ios":{"src":"ios"},"android":{"src":"android"}},"_id":"@aastrika_npmjs/capacitor-browser@0.0.2","gitHead":"bac7948c1db51126944c4c20a77cd975194bafd6","bugs":{"url":"https://github.com/Sphere/capacitor-browser/issues"},"homepage":"https://github.com/Sphere/capacitor-browser#readme","_nodeVersion":"20.19.2","_npmVersion":"10.8.2","dist":{"integrity":"sha512-YtwRLopkll3fHwKfV+oyI9xoJw3r6aT2yl5KwcBEHGNzSnqcqj0TG00ZFlcUI/JYMXFdcse50m/91Qq63T1gHA==","shasum":"086f3b29072c7699402e27a5d59aa9dfd9beca32","tarball":"https://registry.npmjs.org/@aastrika_npmjs/capacitor-browser/-/capacitor-browser-0.0.2.tgz","fileCount":27,"unpackedSize":85382,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCwNCj6tUhC2rcf4EDykZ0ggB9QtnJmdxkcZKXMa+A6xAIhAJ2o4w/kmbOYXC11GhVHODiYLl1gBUR8/msuMqPMvu42"}]},"_npmUser":{"name":"aastrika_npmjs","email":"srinivas@aastrika.org"},"directories":{},"maintainers":[{"name":"aastrika_npmjs","email":"srinivas@aastrika.org"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/capacitor-browser_0.0.2_1785905244920_0.6603575824213541"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-04T08:40:25.738Z","modified":"2026-08-05T04:47:25.196Z","0.0.1":"2026-08-04T08:40:26.118Z","0.0.2":"2026-08-05T04:47:25.063Z"},"bugs":{"url":"https://github.com/Sphere/capacitor-browser/issues"},"author":{"name":"Aastrika"},"license":"MIT","homepage":"https://github.com/Sphere/capacitor-browser#readme","keywords":["capacitor","plugin","native","webview","in-app-browser","microphone"],"repository":{"type":"git","url":"git+https://github.com/Sphere/capacitor-browser.git"},"description":"Chromeless in-app browser (iOS WKWebView / Android WebView) with microphone & camera capture — no toolbar/action buttons, single close button.","maintainers":[{"name":"aastrika_npmjs","email":"srinivas@aastrika.org"}],"readme":"# @aastrika_npmjs/capacitor-browser\n\nA chromeless in-app browser for Capacitor 8 — **iOS (WKWebView)** and **Android (WebView)** — with **no toolbar / action buttons**, an optional single close (✕) button, and **microphone/camera capture** (`getUserMedia`) working out of the box.\n\nBuilt because:\n- `@capacitor/browser` uses `SFSafariViewController` — its toolbar cannot be hidden.\n- Cordova/Capgo in-app browsers either don't grant `getUserMedia` on iOS or fight the shared `AVAudioSession`.\n\n> **Why this plugin exists** — the full comparison of `@capacitor/browser`,\n> `@awesome-cordova-plugins/in-app-browser`, `@capgo/inappbrowser`, iframe, and why each was\n> blocked, is documented in [DECISION.md](./DECISION.md).\n> For a focused side-by-side with `@capacitor/browser` (architecture, permissions, speech,\n> when to use which), see [COMPARISON.md](./COMPARISON.md).\n> For a structural reference — module map, class responsibilities, and permission/data flow\n> across TS/Android/iOS — see [ARCHITECTURE.md](./ARCHITECTURE.md).\n\n## Install\n\n```bash\nnpm install @aastrika_npmjs/capacitor-browser\nnpx cap sync\n```\n\n## API\n\n```ts\nimport { AiBrowser } from '@aastrika_npmjs/capacitor-browser';\n\n// open a full-screen, chromeless webview\nawait AiBrowser.open({ url: 'https://example.com', showCloseButton: true });\n\n// close programmatically\nawait AiBrowser.close();\n\n// know when the user closed it\nAiBrowser.addListener('browserClosed', () => console.log('closed'));\n\n// know when the page tries to open a new tab/window (target=\"_blank\" / window.open()) —\n// navigation still stays inside this webview; this is purely informational\nAiBrowser.addListener('browserRedirect', ({ url }) => console.log('redirect to', url));\n```\n\n### `open(options)`\n| Option | Type | Default | Notes |\n|---|---|---|---|\n| `url` | `string` | — | required |\n| `showCloseButton` | `boolean` | `true` | floating ✕ top-right |\n\n### `close()` — dismiss the webview.\n### `addListener('browserClosed', cb)` — fired on close-button tap, back-out, or `close()`.\n### `addListener('browserRedirect', ({ url }) => ...)` — fired when the page tries to open a new tab/window (`target=\"_blank\"` link click or `window.open()`). The navigation is kept inside this webview (unchanged); this listener is purely informational so the host app can react to the destination URL.\n\n## Native permission requirements (in the consuming app)\n\n**iOS** — add to `Info.plist`:\n- `NSMicrophoneUsageDescription`\n- `NSSpeechRecognitionUsageDescription` — enables the plugin's live speech-to-text\n  (Web Speech API shim backed by `SFSpeechRecognizer`). Without it, the plugin hides the Web\n  Speech API and voice-enabled sites use their `getUserMedia` recording fallback instead.\n- `NSCameraUsageDescription` (only if you use the camera)\n\n**Android** — the plugin's manifest already declares `RECORD_AUDIO` / `CAMERA`; the plugin requests them at runtime when the web content calls `getUserMedia`.\n\n## Platform behavior\n\n| Platform | Implementation |\n|---|---|\n| iOS | `WKWebView` in a full-screen VC; `requestMediaCapturePermissionFor → .grant`; sets `AVAudioSession` to `.playAndRecord` (defeats output-only sessions set by other audio plugins); provides a Web Speech API shim backed by native `SFSpeechRecognizer` for live speech-to-text — the same behavior sites get in real Safari — falling back to hiding the API (→ sites' `getUserMedia` path) when speech recognition is unavailable (see [DECISION.md](./DECISION.md)) |\n| Android | Full-screen `Activity` + `WebView`; `WebChromeClient.onPermissionRequest` grants after obtaining the runtime permission; `windowSoftInputMode=\"adjustResize\"` (opted out of forced edge-to-edge via a custom theme) so the embedded page's own `visualViewport`/CSS keyboard-avoidance sees a real resize and keeps the focused input above the keyboard — see [ARCHITECTURE.md](./ARCHITECTURE.md#keyboard-aware-resize) |\n| Web | Fallback: opens the URL in a new tab (no chromeless mode on web) |\n\n## License\nMIT\n","readmeFilename":"README.md"}