Back to blog
6 min read

How do you plan reliable browser AI with LiteRT.js?

Design a local photo-quality check around capability detection, model loading, device measurement, transparent data paths, and a declared fallback.

  • #LiteRT.js
  • #Browser AI
  • #WebGPU
  • #Privacy
Miniature browser with local hardware for AI processing.
Share

Short answer

LiteRT.js is Google's JavaScript binding for local machine-learning inference in a browser. It can use WebAssembly on the central processing unit, WebGPU on the graphics processor, and an emerging WebNN path for neural accelerators. Local inference can reduce network data transfer, but production use still needs capability checks, device benchmarks, transparent telemetry, and a declared fallback.

A dependable local-inference path

Open each stage to follow one photo-quality check across different browser capabilities.

  1. Detect

    Check browser and accelerator support before promising that the photo check can run locally.

  2. Load

    Fetch and compile the approved model with visible progress, cancellation, and asset-error handling.

  3. Run

    Process the selected photo on device and measure quality, memory, latency, and thermal behavior.

  4. Fallback

    Offer an explicit supported alternative when local inference cannot start or meet the quality threshold.

A photo-upload page needs to warn visitors when an image is too dark, blurred, or too small before they submit it. The team wants the first quality check to run in the browser so the original photo does not need to leave the device. The product still needs an honest plan for unsupported hardware, failed model loading, and surrounding telemetry.

Google announced LiteRT.js on July 9, 2026 as a JavaScript binding for running compatible models in web browsers. It brings the LiteRT runtime to the web through WebAssembly and adds accelerator paths for graphics and neural hardware. That capability creates a local option, not a universal guarantee.

Define the photo-quality contract first

State what the feature must decide and what it must never imply. Our check evaluates brightness, blur, and minimum dimensions, then returns an actionable message. It does not identify a person, diagnose image content, or guarantee that a later upload will succeed.

Define the supported input size, model version, output threshold, and maximum wait before implementation. Specify whether the original photo remains local during the check. List every separate network path, including analytics, error reporting, model downloads, and the final upload after consent.

This bounded contract follows the same practice as vibe coding: ask for one observable feature, then test its complete behavior. Do not begin with a claim that browser AI is private or fast; those properties depend on the actual system.

Detect capabilities before loading the model

LiteRT.js can use WebAssembly with CPU acceleration, WebGPU for supported graphics processors, and an emerging WebNN path for neural processing units. Browser and device support vary, so capability detection belongs at the start of the flow. A feature should not download a large model before it knows which execution path can compile it.

For the photo check, detect the available backend and compare it with the feature's supported matrix. Record the chosen path for diagnostics without recording the photo. If no supported path exists, show the declared fallback immediately.

Do not use browser brand alone as a capability test. Operating system, driver, hardware, browser version, and policy settings can change accelerator availability. Test the API and handle rejection at runtime.

Load and compile with visible states

The model and runtime are product assets with download, cache, and compilation behavior. Show progress that describes the current stage, provide cancellation, and set a timeout based on measured devices. A blank spinner gives no useful recovery path.

Handle first visit, cached return, interrupted download, corrupted asset, compilation failure, and low-memory termination. Keep the rest of the page usable while loading when the product allows it. If the quality check blocks submission, explain why and offer a supported alternative.

Model size affects both initial wait and memory. Quantization can reduce size, but it may also change output quality. Validate the exact exported model instead of assuming that conversion preserves every threshold.

Run the check locally and explain its result

After a visitor selects a photo, decode it at a bounded resolution and prepare the model input. Run the selected backend, release intermediate resources, and convert the output into three understandable checks. The interface might say “Increase lighting,” “Hold the camera steady,” or “Choose a larger image.”

Avoid presenting a model score without context. A number such as 0.63 does not tell a visitor what to change. Connect each threshold to an action and allow the visitor to submit a replacement photo.

Test repeated selections, cancellation, page navigation, and several image formats. Ensure that one failed run does not leave stale success from the previous photo. This state work is as important as the inference call.

Declare the fallback before a failure occurs

Our primary fallback lets the visitor skip the local check and continue to the existing upload review, with a notice that quality will be checked later. Another product might offer a remote check after explicit consent. Neither path should activate silently.

The fallback message should name what changes. If a remote service receives the photo, explain the destination, purpose, retention, and available alternative before transfer. If the feature cannot continue, let the visitor cancel without losing unrelated form data.

Build the fallback in the first release rather than treating it as future cleanup. Unsupported accelerators, model failures, memory pressure, and corporate browser policies are normal operating states. A product without a fallback has not completed its capability contract.

Audit every data path before making privacy claims

Local inference can keep photo pixels out of the model server path. It does not disable page analytics, content-delivery logs, crash reporting, authentication, or the final upload. Review each path separately and document only what the implementation proves.

Avoid logging raw tensor values, file names, image metadata, or generated thumbnails unless the product needs them and has an approved policy. Keep diagnostic events limited to capability, model version, backend, duration, and coarse failure code where possible. Confirm that those fields cannot identify the photo or visitor beyond the stated purpose.

If privacy is central to the product, inspect the browser network log during a real run. A claim based only on architecture diagrams can miss third-party scripts or a remote fallback. The same evidence discipline improves your first good prompt because it replaces broad promises with checks.

Measure performance and output quality on target devices

Google published vendor benchmarks across CPU, WebGPU, and WebNN configurations. Those results come from documented test devices and workloads. Your feature uses a different model, image size, browser state, thermal condition, and audience.

Measure cold download, cached startup, compilation, first inference, repeated inference, peak memory, battery impact, and failure rate. Test low-end and older devices that remain inside the supported audience. Repeat runs after the device warms up because thermal throttling can change latency.

Performance alone is not enough. Compare brightness and blur decisions against a labeled photo set, record false acceptance and rejection, and revisit thresholds after model conversion. A faster wrong answer does not improve the upload journey.

Check the local feature before release

Use this checklist for the photo-quality flow:

  • Capability detection covers every supported backend and an unsupported state.
  • Model download, cache, compilation, cancellation, timeout, and memory failures have visible outcomes.
  • The result gives an actionable message and never carries stale state between photos.
  • Local, telemetry, remote fallback, and final-upload data paths are documented separately.
  • Any remote transfer requires the notice and consent defined by the product contract.
  • Representative devices pass measured startup, inference, memory, thermal, and quality thresholds.
  • Visitors can use the declared fallback or cancel without losing unrelated work.

LiteRT.js makes local browser inference available to JavaScript applications, but dependable product behavior needs more than a successful demo. Detect, load, run, and fall back as explicit stages. Then support each claim with device, network, and quality evidence.

Mini quiz

Check the browser-AI contract

Choose the product behavior that keeps the local photo check honest and usable.

1 / 3

Local inference cannot compile on a visitor's device. What should the app do?
Show solutions
  1. 1. Local inference cannot compile on a visitor's device. What should the app do?

    Correct answer: Explain the limitation and offer the documented fallback or cancellation.

    A declared fallback preserves consent and gives the visitor a clear way to continue or stop.

  2. 2. Which statement supports a credible privacy claim?

    Correct answer: Document model input, telemetry, logs, remote APIs, and fallback transfers separately.

    Privacy depends on every data path, not only the location of model inference.

  3. 3. How should you decide whether the feature performs well enough?

    Correct answer: Test representative devices, browsers, models, inputs, and repeated runs.

    Device measurements reveal startup, memory, accelerator, quality, and thermal constraints that a headline cannot predict.

Sources

  1. LiteRT.js: Google's high performance Web AI InferenceGoogle for Developers · accessed 2026-07-15
  2. Get started with LiteRT.jsGoogle AI Edge · accessed 2026-07-15

Frequently asked questions

Can LiteRT.js run without a network connection?

Inference can run locally after the application, runtime, and model are available. Offline behavior depends on how the app caches those assets and whether any surrounding feature still calls a network service.

Does LiteRT.js use WebGPU on every device?

No. Browser, operating-system, driver, and hardware support differ. Detect capabilities at runtime and provide a WebAssembly or product-level fallback.

Does local inference guarantee privacy?

No. It can keep model inputs on the device, but analytics, crash logs, uploads, remote fallbacks, and other APIs may still transfer data.

Can I trust Google's benchmark figures for my users?

Treat them as vendor measurements from documented test systems. Measure your model and input sizes on the devices, browsers, and thermal conditions that your audience uses.

Privacy setting

With your consent, PostHog EU measures which pages are opened and additionally records your session: mouse movement, clicks, scrolling and the rendered page content are stored as a replayable reconstruction. Typed input is masked before sending. The contents of sign-in, sign-up, password recovery, the founder chat, the newsletter field, your email display, your quiz answers and the checklists are not recorded at all; on the sign-in and sign-up pages recording is paused. Addresses are always stored without query parameters. A random device identifier and technical connection data such as the IP address are processed as well. In addition, strictly defined usage events are measured: how far a post was read, which article element was used, which call to action was clicked, how a newsletter sign-up ended, how far you get in a course or in the feed (recording only whether a task was correct or incorrect, never your answer itself), which video you start, whether you switch the language, and how a sign-in or sign-up attempt ended — without the email address, without the password, and without the error message. Only values from a fixed list and whole numbers from fixed ranges are transmitted — no input and no free text. We also label production, internal, and automated test visits separately and derive whether a visit came from a known interface such as ChatGPT, Claude, or Perplexity from a known referring domain or a strictly allowed campaign value. The full referring address and query parameters are not sent, and this cannot identify a specific AI model. If PostHog's IP-based geo enrichment is enabled in the project, the service can derive an approximate country, continent, and region; we do not request browser or GPS location. Every visit is also assigned to a page area from a fixed list (for example home, blog, tools, account) — the area is sent, not the address. Page loading and stability metrics are measured as well (Core Web Vitals: LCP, CLS, INP, FCP), without network payloads. A click on a link leading away from the site is recorded only as the target domain from a fixed list, without path, query parameters, or link text. For the Idea Wheel, AI Labelling and Limit Reset tools only the kind of action is measured — spin, option changed, copy or export, for instance — never your input and never a result. Learn more about privacy

Without your consent no analytics code is loaded and nothing is recorded. You can withdraw at any time: withdrawal ends collection immediately; data already collected may have been transmitted by then and is deleted after the storage period.