Cefrium ships the Chromium 150 engine you build —

the modern web platform, on Android

Every demo below uses a web feature the Android System WebView often lags on by months or years. Scroll to see what shipping your own engine unlocks.

▼ scroll
Platform capabilities

What this engine actually supports

Live feature detection, evaluated on this engine right now — not a spec sheet. Open the same URL in Chrome, Brave, Firefox and Cefrium to compare what each supports.

Engine running this page

Modern web platform — shipped here, lagged or missing in System WebView

Frontier device & GPU APIs — absent in the System WebView

The Android System WebView exposes none of these. In a secure context this Cefrium build exposes most of them — WebGPU even returns a working adapter; the live results below show exactly which. Web Bluetooth, WebUSB and Web Serial are wired end-to-end (since 0.5.0): requestDevice()/requestPort() routes to the app via CefDeviceChooserHandler, so your code presents the picker. WebAuthn / passkeys also work end-to-end (Android 14+) through the system Credential Manager - create and sign in with a passkey, validated against webauthn.io. WebGPU returns a working adapter; WebHID and Built-in AI are not viable on Android.

Device & media — newly wired in Cefrium 0.3.0 (try the live demos below)

These need an Android permission bridge and capture/media plumbing to work in an embedded engine. Cefrium 0.3.0 wires them end-to-end — scroll down to grant a permission and see them run.

Scroll-driven animations

Reveal on scroll — zero JavaScript

Cards fade and rise as they enter the viewport via a CSS view() timeline. WebView: not supported.

Driven entirely by animation-timeline: view().
No IntersectionObserver, no animation library.
Runs on the compositor — smooth even under load.
Scroll-progress timeline

Parallax depth

A background layer drifts against the page via animation-timeline: scroll().

150
foreground content
Container queries

A component that adapts to its OWN size

Drag the handle at the bottom-right of the box to resize it. The card switches layout based on its width, not the viewport's.

Responsive to its container
Extra detail appears only when the card itself is wide enough — @container (min-width: 420px).
Anchor positioning

A tooltip that positions & flips itself

Pure CSS anchoring with position-try-fallbacks and an arrow that re-points itself using an anchored container query.

Popover + @starting-style

Top-layer dialog with enter/exit animation

The Popover API plus @starting-style, transition-behavior: allow-discrete and overlay.

Native overlay

In the top layer — no z-index wars, animated in and out.

View transitions

Morphing state changes

A same-document View Transition smoothly morphs the card between sizes. WebView lacks cross-document transitions entirely.

tap
:has() relational selector

Parents that react to children

The container restyles selected rows with no JavaScript — label:has(input:checked).

Pick your stack:

OKLCH + color-mix()

Wide-gamut, computed color

Swatches generated with oklch() and blended with color-mix(in oklch, …) — perceptually uniform color.

Web Speech API

Text-to-speech from JavaScript

Synthesize speech on-device via speechSynthesis.

Geolocation · new in Cefrium 0.3.0

Where am I? — device location

Tap to request your location. Cefrium routes the prompt through Android's permission system (you'll see a native Allow / Block dialog) and the OS location provider — the same flow a real browser uses. Nothing is stored.

WebRTC · getUserMedia · new in 0.3.0

Live camera & microphone

Tap to open the camera and mic. The preview is live and never leaves the device; tap Stop to release the hardware immediately. This is the same capture pipeline a video call uses.

Media Session · new in 0.3.0

Lock-screen media controls

Play the demo tone, then check your lock screen / notification shade — Cefrium surfaces play/pause controls with title and metadata via navigator.mediaSession.