v148 · web api · shipped
Web Authentication Immediate UI mode
A new uiMode: "immediate" option for navigator.credentials.get() that shows a sign-in dialog instantly when the user clicks a button — if the browser has a passkey or saved password for the site. If no credential exists, the call rejects with NotAllowedError rather than showing an empty or confusing UI.
at a glance
| Shipped in | Chrome 148 (desktop); previously in origin trial since Chrome 142 |
|---|---|
| Status | Enabled by default |
| Flag | None |
| Standards position | W3C Web Authentication Level 3 (WebAuthn) |
| Spec | Web Authentication Level 3 — uiMode |
| ChromeStatus | 5164322780872704 — Web Authentication Immediate UI mode |
why it exists
The existing mediation: "conditional" flow shows passkey suggestions in the browser's native autofill UI — good for sign-in forms with a username field. But some flows (single-button sign-in, checkout, re-authentication) have no username field; they just need an immediate credential picker. uiMode: "immediate" triggers that picker directly on a user gesture, succeeds only when a credential exists, and fails fast when none does — so the site can fall back to a registration flow without showing a confusing empty dialog.
shape of the API
A single new option on the existing navigator.credentials.get() call:
| Option | Type | Description |
|---|---|---|
uiMode |
"default" | "immediate" |
"immediate" — show the credential picker immediately on a user gesture. Rejects with NotAllowedError if no credential is available. "default" is the existing behaviour. |
Capability detection
Before using immediate mode, check that the browser supports it:
const caps = await PublicKeyCredential.getClientCapabilities();
if (caps.immediateGet) {
// Safe to use uiMode: 'immediate'
}
Source: Chrome for Developers — Immediate UI mode documentation, May 2026.
example
One-click sign-in with passkey
signInBtn.addEventListener('click', async () => {
const caps = await PublicKeyCredential.getClientCapabilities();
if (!caps?.immediateGet) {
// Fall back to conditional UI or form-based flow
return startConditionalUI();
}
try {
const credential = await navigator.credentials.get({
uiMode: 'immediate',
publicKey: {
challenge: await fetchChallengeFromServer(),
rpId: location.hostname,
userVerification: 'required'
}
});
// credential is a PublicKeyCredential; send to server to verify
await verifyOnServer(credential);
} catch (err) {
if (err.name === 'NotAllowedError') {
// No passkey available — offer registration
startRegistrationFlow();
} else {
throw err;
}
}
});
Password credential support
const credential = await navigator.credentials.get({
uiMode: 'immediate',
password: true // also accept saved passwords
});
Source: Chrome for Developers — Immediate UI mode blog, chromestatus, and WebAuthn spec, May 2026.
browser support
| Browser | Support |
|---|---|
| Chrome 148+ (desktop) | Enabled by default |
| Edge | Planned |
| Firefox | No position yet |
| Safari | No position yet |