mμ|LLM Privacy & Compliance

Local-first means your data stays on your machine. This page explains exactly what happens to your queries, where data goes, and what controls you have.

🔒 Data Residency

muLLM is designed so the majority of your data never leaves your local network.

Local Processing

Queries routed to cache or local tiers are processed entirely on your hardware. No external network calls. No data transmitted.

100% on-device

Cloud Escalation

Only complex queries (typically <20%) are sent to cloud providers. You control which providers are enabled and can disable cloud entirely.

User-controlled

Vector Cache

The default semantic cache is stored locally at cache/data/semantic_cache.sqlite3. ChromaDB is optional at cache/data/chromadb/. Embeddings are computed on-device using Ollama. No data sent to embedding APIs.

Local storage

Chat History

All chat messages are stored client-side in IndexedDB (Dexie.js). The server never persists conversation content to disk beyond the scoring log.

Client-side only

📑 What's Logged

muLLM logs operational metrics — never full query content.
DataStoredContains Content?Retention
Scoring logLocal JSONL fileNo — only tier, model, cost, latencyRolling 50K entries
Query traceRedis (in-memory)First 8 chars only (obfuscated)Last 200 entries, lost on restart
MCP traceRedis (in-memory)Method names + truncated paramsLast 100 entries
Server logsstdout/fileNo query contentSession only
Chat messagesBrowser IndexedDBYes (client-side only)User-controlled, deletable

☁ Cloud Provider Policies

When queries are escalated to cloud, they're subject to each provider's data policy.
ProviderData RetentionTraining UseNotes
Anthropic (Claude)30 days (API)Not used for training via APIEnterprise: zero retention available
OpenAI (GPT-4o)30 days (API)Not used for training via APIOpt-out available
Google (Gemini)VariesCheck current policyAPI vs consumer terms differ
Claude is a trademark of Anthropic, PBC. GPT-4o and OpenAI are trademarks of OpenAI, Inc. Gemini is a trademark of Google LLC. muLLM is not affiliated with, endorsed by, or sponsored by any of these companies. All provider names and logos are property of their respective owners.

🛡 Security

HTTPS / TLS

All traffic encrypted with self-signed TLS certificate. Required for mobile mic/camera permissions and LAN security.

API Key Storage

Cloud API keys stored in .env file with 600 permissions. Never transmitted to muLLM's own frontend or logged.

MCP Sandbox

File operations via MCP tools are sandboxed to the project directory. Path traversal is blocked.

Input Validation

All inputs sanitized. DOMPurify for HTML rendering. Content size limits enforced (50MB max).

✅ Live Compliance Checks

Real-time verification of your instance's security posture.
Running checks...

⚖ Your Rights (GDPR / CCPA)

Right to Access

All data is on your machine. Chat history in browser IndexedDB. Scoring log at cache/data/scoring_log.jsonl. Semantic cache at cache/data/semantic_cache.sqlite3 by default, or cache/data/chromadb/ when ChromaDB is explicitly enabled.

GET /api/privacy/status →

Right to Deletion

Clear chat: delete in-browser. Purge all query data (cache + log) via the API below. Requires explicit confirmation token.

Right to Portability

Export all stored query data (scoring log + semantic cache) as a ZIP. Scoring log contains metadata only; query text may be present in cache exports when query-content logging is enabled.

GET /api/privacy/export (ZIP) →

Data Minimization

muLLM routes locally by default. Cloud is opt-in. Scoring log never stores query content — only tier, model, cost, latency, timestamp. Set DATA_RETENTION_DAYS env var (default 90) to auto-purge old entries.

Loading data status...

🔍 Auditability & Traceability

Every query's routing decision is traceable.

Scoring Log

Every query logged with: intent ID, category, complexity, model, tier, tokens, cost, latency, timestamp. Machine-readable JSONL.

Query Trace

Live trace on /performance shows obfuscated recent queries with full routing metadata.

Cost Tracking

Per-query, per-session, daily, and weekly cost tracking. Budget limits with automatic local-only fallback. Visible on the Cost page.

No Black Boxes

Classification rules are in router/intent.py. Routing logic in router/tiers.py. All open source, all auditable.