Your browser is quietly an operating system: the 4 WebAssembly engines in our extension AWFlow, a browser-native automation tool, runs four WebAssembly engines inside a single Chrome extension with no backend for its core features: SurrealDB (compiled from Rust) as a local database persisting to IndexedDB, ONNX Runtime Web (C++) for task models via transformers.js, WebLLM from the MLC project for chat LLMs on the user's GPU via WebGPU, and Pyodide (CPython) for a Python Code node. The AI engines run in dedicated Web Workers so downloading or compiling a 2 GB model does not freeze the UI, and ONNX Runtime Web uses WebGPU where the GPU path is known to work for a task and WASM otherwise. The architecture means workflows, run history, agents and knowledge stay in the user's browser, with no server to run and no account required. Your browser is quietly an operating system: the 4 WebAssembly engines in our extension One Chrome extension, no backend for its core features: a real database, two AI inference engines and a full Python interpreter, all running as WebAssembly. What each engine does, how it's wired, and what it costs. Under the hood is a series about how AWFlow, a browser-native automation tool, works inside. This is 2. AWFlow has no backend for its core features. Yet a single Chrome extension runs a real database, two AI inference engines and a full Python interpreter. All four are possible because of WebAssembly. Here’s what each one does, how it’s wired up, and what it costs. The browser has the parts of an OS WebAssembly WASM is a binary format that languages like Rust, C and C++ compile to. The browser runs it at close to native speed, inside the same sandbox as any web page: no install and no system access. If you want the plain-words tour of how that works, WebAssembly, explained covers it; this post is about what we built on top. For a product like ours, it changes the architecture. Instead of running engines on a server and sending users’ data to them, we ship the engines to the user. And the browser already has the pieces an engine expects from an operating system: Here are the four engines, from the bottom of the stack to the top: Engine Compiled from What it does in AWFlow SurrealDB Rust The local database: workflows, run history, agents, knowledge ONNX Runtime Web C++ Local AI tasks via transformers.js: classify, summarize, translate, transcribe, embed WebLLM MLC WASM runtime + WebGPU Chat LLMs on the user’s GPU Pyodide CPython Real Python for the Code node Three engines that used to need a server SurrealDB: a database you ship to the user SurrealDB’s WASM build includes a storage engine that persists to IndexedDB. Using it looks like using a remote database, except the address is local: js import { Surreal } from 'surrealdb'; import { createWasmEngines } from '@surrealdb/wasm'; const db = new Surreal { engines: { ...createWasmEngines } } ; await db.connect 'indxdb://