Learn how ZeroChat operates as a server-independent, fully autonomous, 100% portable web application.
ZeroChat is built on a fundamental premise: maximum simplicity, speed, and control without heavy dependencies.
The web application is served directly and statically over HTTPS from GitHub Pages as zerochat.html, loading modular css/ and js/ files with no build step. Its Service Worker reuses available resources but does not replace a connection when one is needed.
All local system interaction is channeled through the zerochat executable installed from PyPI or the zerochat.py script. Both open the same GitHub Pages interface and authenticate sessions using secure daily tokens.
ZeroChat is designed to deliver two complementary experiences depending on the workflow context: an autonomous universal web application (ideal for mobile devices and zero-install daily usage) and a local workstation host (for developer workflows requiring direct operating system control).
zerochat.html)Accessible directly online (via GitHub Pages) or by opening the HTML file locally in any browser. It is a complete, self-contained application that requires neither Python, terminal commands, auxiliary servers, nor installation.
null-origin iframe, restrictive network-blocking CSP, and Web Worker with watchdog termination), rendering interactive SVG charts, performing web searches, and fetching public web pages.
zerochat.py)Tailored for desktop workstations (Linux, macOS, Windows) where an agent needs to act as a coding assistant with access to the host operating system. It has also been tested on Android through Termux:
read_file, edit_file, list_directory).
execute_command).
~/zerochat/ directory contains the token, configuration, and services. Python dependencies are isolated in ~/zerochat/.venv/, without changing global Python.
| Feature / Capability | zerochat.html (Web / PWA) |
zerochat.py (Local Backend) |
|---|---|---|
| Commercial AI API connections (OpenAI, Claude, Gemini, etc.) | β Yes | β Yes |
| 100% In-browser local inference via WebLLM & WebGPU | β Yes | β Yes |
| In-browser Document RAG Knowledge Base (Orama) | β Yes | β Yes |
| Agent Mode with JS sandbox, web search & SVG charts | β Yes | β Yes |
| Private IndexedDB persistence and JSON/Markdown export | β Yes | β Yes |
| Direct usage on Mobile (Android / iOS) without Python/terminal | β Native (PWA) | β οΈ Requires Python (Termux or desktop) |
| Host file system navigation, reading and atomic editing | β Not available | β Yes (host tools) |
| Host terminal shell command execution | β Not available | β Yes (bash/shell) |
| External MCP servers (Playwright, memory, LSP) | β Not available | β Yes (integrated MCP manager) |
ZeroChat is distributed as a universal static web application:
https://albalday.github.io/zerochat/zerochat.html). All interface rendering, agent execution, and inference calls happen in the browser with full access to modern web APIs like navigator.storage.persist() and private local IndexedDB storage.
zerochat after installing it from PyPI, or python3 zerochat.py after downloading the script, launches the local server on 127.0.0.1:6388 and opens GitHub Pages. The app consumes the session token only once, removes it from the address bar, and retains it in a cookie on the same web origin.
python3 zerochat.py directly inside the cloned repository, it automatically detects the development environment and serves the local interface at http://127.0.0.1:6388/zerochat.html without requiring auxiliary servers or launch scripts.
python3 zerochat.py: Starts the backend and automatically opens the local development web UI in the default browser.python3 zerochat.py --test: Runs quick internal self-tests for core host tools (file reading, directory listing, command execution).npm test: Runs the full automated test suite (unit, integration, architecture, infrastructure, and Playwright browser tests).npm run test:browser: Runs only browser and visual UI tests.Installation with pip install zerochat distributes only the Python executable. The direct download distributes that same executable as zerochat.py. Neither includes HTML, JavaScript, or CSS: both open the GitHub Pages interface, so web storage and the session cookie share one origin.
In the user's home directory, both modes create the same structure:
~/zerochat/
βββ .venv/ Isolated environment for Python MCP dependencies
βββ config/ Token and service preferences
βββ services/ MCP servers and their dependenciesThe PyPI executable remains managed by pip and the downloaded file remains where you saved it. Deleting ~/zerochat/ removes local state and MCPs without touching either executable.
Versions use major.minor.patch. A patch updates only the GitHub Pages interface; 7.11.0 is compatible with 7.11.x. A move from 7.11 to 7.12 updates the backend: ZeroChat reports it and displays the appropriate command, python -m pip install --upgrade zerochat for PyPI or the zerochat.py download for curl.
ZeroChat 7.11.0 audit (25 September 2026), with local evidence and verification limits:
ZeroChat's storage architecture strictly respects user data sovereignty. The application never transmits conversation history, credentials, or documents to any telemetry backend.
To prevent memory leaks or state desynchronization across components, ZeroChat uses a single canonical state store: ChatState.
Every lifecycle change (switching sessions, appending streamed tokens, tracking inference progress, or executing tools) occurs through domain mutators (such as appendMessage, replaceMessages, or saveSessionMetadata). This ensures reactive, synchronized updates throughout the UI.
New and restored responses share visual block and copy components. Streaming retains its cursor during generation. Connection errors use a common view that escapes the received message and URL before inserting them into HTML.
Active configuration comes from ChatConfig. Profile and catalog interfaces query the WebLLM provider for completed models instead of independently parsing stored metadata.
State, engine and views reuse message-turns.js rules to identify turns and recognize initial date messages. Turn removal shares a sanitization algorithm; ChatState retains the generation guard and atomic history update.