← Chrome 148 reference

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 inChrome 148 (desktop); previously in origin trial since Chrome 142
StatusEnabled by default
FlagNone
Standards positionW3C Web Authentication Level 3 (WebAuthn)
SpecWeb Authentication Level 3 — uiMode
ChromeStatus5164322780872704 — 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.

Source: Chrome for Developers — Immediate UI mode blog post and chromestatus motivation, May 2026.

shape of the API

A single new option on the existing navigator.credentials.get() call:

OptionTypeDescription
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

BrowserSupport
Chrome 148+ (desktop)Enabled by default
EdgePlanned
FirefoxNo position yet
SafariNo position yet
Source: chromestatus.com standards positions, May 2026.

see also