Chrome extension for running Generative AI in your browser locally
TypeScript
105
14 commits
updated Mar 22, 2026
Open source monorepo for on-device AI inference — run LLMs directly in the browser as a web app or Chrome extension. No servers, no API keys, no data leaves your device.
Built with Transformers.js + ONNX Runtime Web + WebGPU, structured as a Turborepo monorepo with shared packages for UI, auth, and API — so the same inference pipeline powers both the web app and the Chrome extension.
Note: This project is under active development. APIs, features, and code structures may change without notice.
| Web | Chrome Extension |
|---|---|
![]() | ![]() |
| Mobile (Expo) | Desktop (Tauri) |
![]() | ![]() |
See more Chrome Extension examples.
| Platform | Status | Tech |
|---|---|---|
| Web | Live | Next.js + WebGPU |
| Chrome Extension | Live | Plasmo + WebGPU |
| iOS / Android | In Progress | Expo + llama.rn (llama.cpp) |
| macOS / Windows / Linux | Planned | Tauri or Electron + ONNX Runtime |
Measured on MacBook Pro M1 Max (32GB RAM). Prompt: "Write python code to compute the nth fibonacci number."
| Model | Throughput |
|---|---|
| Qwen3.5-0.8B (q4f16) | ~45 tok/s |
| SmolLM2-1.7B (q4f16) | 46.2 tok/s |
| Llama-3.2-1B (q4f16) | 40.3 tok/s |
| Qwen2.5-Coder-1.5B (q4f16) | 36.1 tok/s |
| Phi-3.5-mini (q4f16) | 32.9 tok/s |
| DeepSeek R1 (q4f16) | 32.7 tok/s |
| Janus 1.3B (q4f16) | 30.9 tok/s |
| Whisper Base (fp32 + q4) | 30.5 tok/s |
Monorepo using Turborepo with pnpm workspaces.
apps
├─ plasmo Chrome extension (MV3) — Transformers.js + WebGPU
├─ nextjs Next.js 16 web app — landing page + in-browser chat
├─ expo Expo SDK 54 / React Native mobile app
└─ tanstack-start Tanstack Start web app
packages
├─ api tRPC v11 router
├─ auth Authentication (better-auth)
├─ db Database (Drizzle + Supabase)
└─ ui Shared UI components (shadcn-ui)
tooling
├─ eslint Shared ESLint presets
├─ prettier Shared Prettier config
├─ tailwind Shared Tailwind theme
└─ typescript Shared tsconfig
Make sure to follow the system requirements in package.json#engines.
pnpm install
pnpm dev:next
Open http://localhost:3000 and navigate to /chat.
pnpm dev:chrome
Open chrome://extensions, enable Developer mode, click "Load unpacked", and select apps/plasmo/build/chrome-mv3-dev.
Or install from the Chrome Web Store.
pnpm dev:firefox
Navigate to about:debugging#/runtime/this-firefox, click "Load Temporary Add-on", and select any file inside apps/plasmo/build/firefox-mv2-dev.
Known issues:
- Firefox WebGPU has limited GPU memory. Use the smallest models (e.g. Qwen2.5-0.5B) to avoid "Not enough memory" errors. Models 0.8B+ (including Qwen3.5-0.8B) may fail.
q4f16dtype is not supported withoutshader-f16— the extension automatically falls back toq4.- HMR (hot module reload) websocket does not connect in Firefox extensions. Code changes require manually reloading the extension.
cd apps/plasmo
pnpm build:safari
This builds the Chrome MV3 production bundle, then converts it to a Safari Web Extension Xcode project at build/safari/. Open the Xcode project, build and run, then enable the extension in Safari > Settings > Extensions.
Prerequisites: Xcode 14+ with safari-web-extension-converter (included with Xcode command line tools).
Known issues:
- Safari does not support
sidePanel— the conversion script strips it from the manifest.- WebGPU support in Safari is experimental and may vary by macOS version.
pnpm --filter @acme/expo ios # Run on iOS device/simulator
pnpm --filter @acme/expo android # Run on Android device/emulator
On-device LLM inference using llama.rn (llama.cpp). Downloads Qwen3.5-0.8B GGUF from HuggingFace and runs inference locally with Metal GPU acceleration on iOS.
pnpm dev
pnpm dev:plasmo
Runs both dev servers in parallel via Turborepo TUI.
cd apps/plasmo
pnpm build && pnpm package
Creates a production bundle ready for the Chrome Web Store. See Plasmo's submission guide for automated deployment via GitHub Actions.
cd apps/plasmo
pnpm build:firefox && pnpm package:firefox
Creates a zip ready for Firefox Add-ons.
cd apps/plasmo
pnpm build:safari
Produces an Xcode project at build/safari/. Archive and distribute via Xcode.
Deploy to Vercel with apps/nextjs as the root directory.
cd apps/plasmo
pnpm test:background # Smoke test Chrome prod build for missing modules
pnpm test:firefox # Smoke test Firefox prod build for missing modules
pnpm test:safari # Verify Safari prerequisites + smoke test Chrome build
Run pnpm test:background after any change to aliases, stubs, postinstall, postbuild, or dependencies.
Open chrome://extensions and find "Inspect views" for the extension.

Navigate to about:debugging#/runtime/this-firefox and click "Inspect" on the extension to open the background script console.
Chrome > More Tools > Task Manager.

In the extension inspector, go to Application > Local Storage > transformers-cache.

13 commits
1 commits
TypeScript
86.3%
CSS
5.6%
JavaScript
3.7%
Rust
3.3%
Chrome extension for running Generative AI in your browser locally
TypeScript
105
14 commits
updated Mar 22, 2026
Open source monorepo for on-device AI inference — run LLMs directly in the browser as a web app or Chrome extension. No servers, no API keys, no data leaves your device.
Built with Transformers.js + ONNX Runtime Web + WebGPU, structured as a Turborepo monorepo with shared packages for UI, auth, and API — so the same inference pipeline powers both the web app and the Chrome extension.
Note: This project is under active development. APIs, features, and code structures may change without notice.
| Web | Chrome Extension |
|---|---|
![]() | ![]() |
| Mobile (Expo) | Desktop (Tauri) |
![]() | ![]() |
See more Chrome Extension examples.
| Platform | Status | Tech |
|---|---|---|
| Web | Live | Next.js + WebGPU |
| Chrome Extension | Live | Plasmo + WebGPU |
| iOS / Android | In Progress | Expo + llama.rn (llama.cpp) |
| macOS / Windows / Linux | Planned | Tauri or Electron + ONNX Runtime |
Measured on MacBook Pro M1 Max (32GB RAM). Prompt: "Write python code to compute the nth fibonacci number."
| Model | Throughput |
|---|---|
| Qwen3.5-0.8B (q4f16) | ~45 tok/s |
| SmolLM2-1.7B (q4f16) | 46.2 tok/s |
| Llama-3.2-1B (q4f16) | 40.3 tok/s |
| Qwen2.5-Coder-1.5B (q4f16) | 36.1 tok/s |
| Phi-3.5-mini (q4f16) | 32.9 tok/s |
| DeepSeek R1 (q4f16) | 32.7 tok/s |
| Janus 1.3B (q4f16) | 30.9 tok/s |
| Whisper Base (fp32 + q4) | 30.5 tok/s |
Monorepo using Turborepo with pnpm workspaces.
apps
├─ plasmo Chrome extension (MV3) — Transformers.js + WebGPU
├─ nextjs Next.js 16 web app — landing page + in-browser chat
├─ expo Expo SDK 54 / React Native mobile app
└─ tanstack-start Tanstack Start web app
packages
├─ api tRPC v11 router
├─ auth Authentication (better-auth)
├─ db Database (Drizzle + Supabase)
└─ ui Shared UI components (shadcn-ui)
tooling
├─ eslint Shared ESLint presets
├─ prettier Shared Prettier config
├─ tailwind Shared Tailwind theme
└─ typescript Shared tsconfig
Make sure to follow the system requirements in package.json#engines.
pnpm install
pnpm dev:next
Open http://localhost:3000 and navigate to /chat.
pnpm dev:chrome
Open chrome://extensions, enable Developer mode, click "Load unpacked", and select apps/plasmo/build/chrome-mv3-dev.
Or install from the Chrome Web Store.
pnpm dev:firefox
Navigate to about:debugging#/runtime/this-firefox, click "Load Temporary Add-on", and select any file inside apps/plasmo/build/firefox-mv2-dev.
Known issues:
- Firefox WebGPU has limited GPU memory. Use the smallest models (e.g. Qwen2.5-0.5B) to avoid "Not enough memory" errors. Models 0.8B+ (including Qwen3.5-0.8B) may fail.
q4f16dtype is not supported withoutshader-f16— the extension automatically falls back toq4.- HMR (hot module reload) websocket does not connect in Firefox extensions. Code changes require manually reloading the extension.
cd apps/plasmo
pnpm build:safari
This builds the Chrome MV3 production bundle, then converts it to a Safari Web Extension Xcode project at build/safari/. Open the Xcode project, build and run, then enable the extension in Safari > Settings > Extensions.
Prerequisites: Xcode 14+ with safari-web-extension-converter (included with Xcode command line tools).
Known issues:
- Safari does not support
sidePanel— the conversion script strips it from the manifest.- WebGPU support in Safari is experimental and may vary by macOS version.
pnpm --filter @acme/expo ios # Run on iOS device/simulator
pnpm --filter @acme/expo android # Run on Android device/emulator
On-device LLM inference using llama.rn (llama.cpp). Downloads Qwen3.5-0.8B GGUF from HuggingFace and runs inference locally with Metal GPU acceleration on iOS.
pnpm dev
pnpm dev:plasmo
Runs both dev servers in parallel via Turborepo TUI.
cd apps/plasmo
pnpm build && pnpm package
Creates a production bundle ready for the Chrome Web Store. See Plasmo's submission guide for automated deployment via GitHub Actions.
cd apps/plasmo
pnpm build:firefox && pnpm package:firefox
Creates a zip ready for Firefox Add-ons.
cd apps/plasmo
pnpm build:safari
Produces an Xcode project at build/safari/. Archive and distribute via Xcode.
Deploy to Vercel with apps/nextjs as the root directory.
cd apps/plasmo
pnpm test:background # Smoke test Chrome prod build for missing modules
pnpm test:firefox # Smoke test Firefox prod build for missing modules
pnpm test:safari # Verify Safari prerequisites + smoke test Chrome build
Run pnpm test:background after any change to aliases, stubs, postinstall, postbuild, or dependencies.
Open chrome://extensions and find "Inspect views" for the extension.

Navigate to about:debugging#/runtime/this-firefox and click "Inspect" on the extension to open the background script console.
Chrome > More Tools > Task Manager.

In the extension inspector, go to Application > Local Storage > transformers-cache.

13 commits
1 commits
TypeScript
86.3%
CSS
5.6%
JavaScript
3.7%
Rust
3.3%