Android WebView supports nearly all modern HTML, CSS and JavaScript: storage (localStorage, IndexedDB), fetch and WebSockets, Canvas, WebGL, WebAssembly, Web Audio, video, and camera and location when the app grants permission. It does not support Web Push or notifications, Web Share, Bluetooth, USB, NFC or Serial, file downloads or built-in PDF viewing.
Support table
| Feature | In an HTML APK | Notes |
|---|---|---|
| HTML5, CSS Grid, Flexbox, custom properties | Yes | Same engine as Chrome |
:has(), container queries, dvh units | Yes | On up-to-date WebView (Chromium 105–108+) |
prefers-color-scheme | Yes | Follows the system theme |
| localStorage / sessionStorage | Yes | Per app; survives updates |
| IndexedDB | Yes | Large data, blobs |
| ES modules, dynamic import | Yes | Served over https origin, not file:// |
| fetch / XHR | Yes | Remote APIs need CORS for the app origin |
| WebSockets | Yes | |
| Canvas 2D, WebGL, WebGL 2 | Yes | GPU-dependent on old phones |
| WebAssembly | Yes | Game engines, codecs |
Web Audio, <audio>, <video> | Yes | Autoplay with sound needs a tap |
| Camera / microphone (getUserMedia) | With permission | App must declare it; user must allow |
| Geolocation | With permission | Foreground only |
| Clipboard write | Usually | From a user gesture; reading is restricted |
<input type=file> | Depends on app shell | Needs the app to open Android's picker |
window.open, target=_blank | Depends on app shell | Test on your build |
| Fullscreen API, orientation lock | Depends on app shell | Choose full-screen/orientation in the builder instead |
| Vibration API | May be ignored | Treat as optional |
| Notification API, Web Push | No | Use native push from the app shell |
| Web Share API | No | Copy link, or share-URL links |
| File downloads, PDF viewer | No | Open the link in the browser |
| Web Bluetooth, WebUSB, Web NFC, Web Serial, WebHID | No | Native code required |
| Payment Request API | No | Use a web checkout page |
| Background sync, periodic sync | No | App is paused in the background |
Feature-detect, don't assume
const can = {
share: 'share' in navigator,
vibrate: 'vibrate' in navigator,
camera: !!(navigator.mediaDevices && navigator.mediaDevices.getUserMedia),
notifications: 'Notification' in window,
};
if (!can.share) shareButton.textContent = 'Copy link';Old phones
WebView updates through Google Play, so most phones run a recent version. Devices without Play services, or that never update, can lag years behind — keep a sensible fallback for newer CSS and avoid shipping untranspiled cutting-edge syntax if your audience uses old devices.
Frequently asked questions
Is Android WebView the same as Chrome?
It is built from the same Chromium code and updated on a similar schedule, but it lacks browser features such as tabs, downloads, the share sheet and push notifications.
Do service workers work in an HTML APK?
They can be registered on https origins, but a bundled app rarely needs one — its files are already on the device.