Infrastructure and data

How features are divided between the browser and the local server.

Choose your usage mode

The web app runs in your browser. The optional Python server adds tools from your computer; it does not replace the interface.

What you needWeb onlyWith local server
Chat, profiles, history, attachments and RAGYesYes
Browser JavaScript and web toolsYes; network tools need access to their servicesSame requirements
Local models with WebLLMRequires compatible WebGPU and memorySame requirements
Computer files and commandsNoRequires enabled tools and permissions
MCP services and browser automationNoRequires each tool's dependencies

Install and start the local server → · Configure tools and MCP →

If supported, install the web app as a PWA from your browser's options. Cached resources do not guarantee that every feature works offline.

Tested environments: Linux (x86_64 and ARM), Windows 10/11 (PowerShell and py -m zerochat launcher), and Android (Termux with the python package). Playwright cannot currently be used on Termux, so browser_action and Playwright MCP are not available.
Browser compatibility: ZeroChat is not compatible with Safari due to Private Network Access limitations and web storage policies. On macOS it should work with Firefox or Chromium-based browsers, but it has not been tested.

Where data is stored

In the browser

Conversations, profiles, attachments and RAG stay in browser storage. They belong to the web address, browser and profile used; there is no automatic cross-device sync. Export copies before clearing data.

Conversations are not encrypted as a vault. See Profiles for API key encryption and its limits.

On your computer, with the local server

~/zerochat/
├── config/      Token and configuration
├── services/    MCP definitions, dependencies and credentials
└── .venv/       Python MCP dependencies

PyPI and the downloaded script use the same folder. Deleting it removes local configuration and managed services, including their credentials. It does not remove the executable, browser history or files changed outside that folder.

Connections and privacy

The published interface is GitHub Pages. The local server listens at 127.0.0.1:6388 by default and opens an authenticated link. Do not share the startup URL while it contains the token; the interface removes it and stores it in a cookie. Without that link (another computer, an SSH tunnel or a reverse proxy), the connection is set up in the Connection panel (the plug icon next to the settings wheel in the sidebar) and the page asks for the user name and password of the account running the server to get the daily token.

Remote providers receive messages, attachments and tool results included in their requests. Web tools do not use public proxies or intermediaries. Models and dependencies also require downloads.

Third-party libraries (Orama for search; mammoth and fflate for office documents) ship with the web app itself at pinned versions, with no CDN. The document libraries are downloaded from the same site the first time they are used and cached for offline work. Their licenses are listed in THIRD_PARTY_NOTICES.md.

WebLLM runs inference locally; network tools still send data. Local history does not make all operations private. The debug panel shows requests; their context may differ from visible history because of token limits or RAG selection.

Updates

Web updates arrive from GitHub Pages. Patches in the same series, such as 9.1.x, are compatible with backend 9.1 and do not require reinstalling it. When a new web version is ready, ZeroChat offers Reload now or Later; reloading applies it without losing saved history.

A new major.minor series may require a backend update. Follow the terminal notice for your installation method; the executable does not update automatically. Press i when the terminal offers information.

Local development

Inside the repository, python3 zerochat.py serves http://127.0.0.1:6388/zerochat.html. Its browser storage is separate from GitHub Pages. The interface loads js/ and css/; copying the HTML alone is not enough.

python3 zerochat.py --test checks local tools. For the project test suite, see tests/README.md in the repository.

Reviews of version 9.11.0

Reviews conducted following the canonical procedure in docs/audits/AuditFull.md. Each claim states whether a test protects it, and each AGENTS.md rule is matched with the test that watches it, following the 9.0.0 lesson.