Chrome 148: the Prompt API brings an on-device language model to the web, and CSS levels up
Chrome 148 reached the stable channel on May 5, 2026, for Android, ChromeOS, Linux, macOS and Windows. Reading the release notes, the release splits into two stories: artificial intelligence running inside the browser, and CSS getting more expressive. Both matter to anyone building for the web, so it’s worth a careful look.
Prompt API: a language model provided by the browser
The headline is the Prompt API. It gives web developers access to a language model provided by the browser itself and run on the device. The first version accepts text, image and audio input, and lets you constrain the response to formats defined by a regular expression or a JSON Schema.
That last point is what excites me most. Anyone who has tried to pull structured data out of a model knows how much defensive code goes into “what if the JSON comes back broken?”. With the constraint applied at generation time, a page can ask for a classification, a field extraction or a fixed-format summary and trust the shape of what comes back a lot more. It doesn’t remove validation, but it changes the kind of error you deal with.
There is also an origin trial for Prompt API sampling parameters, temperature and topK. In other words: the basics are in stable, and fine-tuning is still being tested.
The practical impact is running light AI tasks without sending data to a server, without per-token cost and without depending on the network. The less pretty side is that it ties the feature to a model you don’t choose and that only exists in that browser, so feature detection and a fallback path remain mandatory.
CSS: less boilerplate and more control over the cascade
On the CSS side, the release brings several small improvements that add up:
- Name-only container queries.
@containercan now match oncontainer-namealone, without requiring acontainer-type. Previously the type was required. at-rule()inside@supports. Lets you detect whether the browser supports a specific at-rule.- The
revert-rulekeyword. Rolls the cascade back to the previous matching rule, similar torevert-layer. The notes point out that it pairs well withif(), to drop a rule when a condition fails. text-decoration-skip-ink: all. Applies ink skipping to all glyphs, including CJK, which theautovalue skips.- avar2. Version 2 of the variable-font avar table lets one variation axis influence another, which enables “meta sliders” and smaller font files.
A simple example: styling cards just because they sit inside a container named sidebar, without declaring container-type:
.sidebar {
container-name: sidebar;
}
@container sidebar {
.card {
font-size: 0.875rem;
}
}
Outside pure CSS, the loading attribute arrived on <video> and <audio>: loading="lazy" defers media loading until the element nears the viewport, as already happened with <img> and <iframe>. It’s an almost free performance win on media-heavy pages.
Android, WebGPU and authentication
The Web Serial API came to Android, including USB and Bluetooth devices that emulate a serial port. SharedWorker was re-enabled on Android while its process lifecycle behavior is investigated, and the constructor now accepts extendedLifetime: true, which keeps the worker alive after all clients unload.
In WebGPU, linear_indexing adds two built-in values for compute shaders. In WebAuthn, the Immediate UI mode of navigator.credentials.get() shows sign-in UI if a credential is known or rejects with NotAllowedError if none exists, which makes it easier to decide quickly between a passkey and a traditional form. And manifest localization lets web apps translate their name, description, icons and shortcuts according to the user’s language.
Origin trials worth watching
The origin trial list is long and hints at where the platform is heading: Container Timing (a containertiming attribute that reports when a marked section is first painted), HTML-in-canvas (drawing elements into 2D, WebGL and WebGPU contexts), Connection Allowlists (the server sends a list of allowed connections through an HTTP header), declarative CSS module scripts for declarative shadow roots, an HTML element for installing web apps, and OpaqueRange, which represents a live span of text inside a form field. Origin trials are experiments: they’re for testing and feedback, not for building a product on top of.
My take
The Prompt API in stable is the kind of change that looks small in a changelog and big in practice. JSON Schema-constrained output turns the local model into a predictable component, not just an embedded chatbot. But I’d treat it as progressive enhancement: detect it, use it when it exists and fall back to something else when it doesn’t.
In CSS, revert-rule and name-only container queries are the kind of improvements you only realize you were missing after using them. If I had to pick one thing to try this week, it would be loading="lazy" on videos, because the win is immediate and the risk is practically zero.