Research fork of Chromium 155 · NakliTechie

One LoRA adapter per website, on the browser's built-in model

Chrome's own Prompt API runs Gemma 4 on your Mac through llama.cpp. Each website can have its own small adapter. The browser picks it by the page's origin, uses it only after you allow that site, and refuses it when the model changes.

macOS on Apple Silicon. Everything runs on your machine: no account, no server, no telemetry. Research, not a product.

Source and build steps Full results The ask to the Chromium team
The fork's permission prompt: site-a.example wants to change how the built-in AI answers on this site, using the site's own training, with Block and Allow buttons, over a page that shows the model version
The fork asks before a site's adapter changes any answer. Captured from the built fork on 2026-10-23.

The problem

A site that wants the browser's built-in model to know its fixed facts, or answer in its voice, has to send that context in every prompt. Chrome's Prompt API gives every site the same model. This fork tests the missing piece: a per-site adapter that you control, with the model update problem handled.

How it works

  1. The site publishes a recipe at /.well-known/model-adapter.json: example questions and answers, plus ordinary questions the model must keep answering normally.
  2. A builder trains a LoRA on the browser's current base model, stamps it with that model's version, and reviews it for broken answers, added sales pitches and lost refusals.
  3. The page calls LanguageModel.requestAdapter(). The browser shows a permission prompt. The adapter runs only after you allow that site, and you can revoke it.
  4. When the model updates, the old adapter is refused and the site answers on the base model until the builder rebuilds it from the same recipe.

Results

Held-out questions answered with the expected fact, of 30. Five facts: no adapter 0, facts in the prompt 22, site adapter 30. Documentation page: no adapter 2, facts in the prompt 29, site adapter 6.
An adapter teaches five fixed facts better than the prompt: 30 of 30 against 22 of 30. It does not teach a whole documentation page: 6 of 30, where the page in the prompt scores 29. Gemma 4 E4B, measured 2026-10-20.
13 of 13Model update: refused the old adapter, rebuilt from the recipe on a second model
7 of 7Permission: never asked, denied and revoked sites get the base model
7 of 7Frames and revocation: another site's frame gets no adapter
9 of 9Review: three bad recipes rejected, one hiding a pitch behind a trigger

Each number comes from a check script in the repository that exits non-zero unless every gate passes. Raw numbers: results.json.

Try it

No prebuilt browser is published. The backend test needs llama.cpp and Gemma 4 E4B, about an hour. The mockup shows the experience in any browser on top of that. The full fork needs a Chromium 155 checkout and several hours of build.

git clone https://github.com/NakliTechie/chromium-lora && cd chromium-lora
git clone --depth 1 --branch b9830 https://github.com/ggml-org/llama.cpp.git ../llama.cpp
fork/backend/build-llama.sh ../llama.cpp
fork/backend/build-standalone.sh ../llama.cpp out

Known limits

The builder runs outside the browser. The review screens for obvious damage and is not a safety evaluation. Training uses MLX, so the builder needs Apple Silicon. Whether other browsers could adopt the same shape is untested. The full list is in the fork README.