Privacy and Self-Hosting¶
Numi Chat is an open-source conversational AI application designed to be self-hosted by individuals and organizations.
Numi Chat provides technical features intended to support privacy-conscious and GDPR-oriented deployments. Compliance depends on deployment configuration and the operator's legal and organizational obligations.
1. Technical Privacy Architecture¶
Numi Chat includes the following privacy and security controls:
- No built-in telemetry or analytics: The application does not embed usage tracking, tracking pixels, or analytics reporting.
- Locally served web assets: JavaScript, CSS, icons, fonts, and vendor libraries are served from the instance rather than a third-party CDN.
- Server-side favicon proxy: Favicon lookups are sent to Google's favicon service by the Numi Chat server, so Google sees the instance's egress address rather than a direct request from the user's browser. If
FAVICON_DIRECT_FALLBACK=true, a failed Google lookup may contact the requested domain from the server. - First-party authentication cookies: Authentication uses strictly necessary first-party cookies (
access_tokenandrefresh_token) configured withHttpOnly,SameSite=Lax, andSecurewhenENVIRONMENT!=development. - Pseudonymized login throttling: Login throttling stores keyed HMAC-SHA256 values instead of plaintext client IP addresses and account names. These records remain personal data for operational and compliance purposes.
- SSRF-resistant user-directed fetching: Direct PDF and opt-in favicon fetches reject non-public targets and pin each connection and redirect hop to an address that was validated immediately before the request.
- Deletion cascades: Deleting a chat removes its database records and requests deletion of its upload and artifact directories. Operators must separately apply their retention policy to logs, backups, replicas, and provider-held data.
- Safe logging defaults: Loguru variable inspection (
diagnose) defaults to disabled and is forced off outside development.
2. User Rights & Data Management¶
Numi Chat exposes authenticated endpoints that can support data-subject requests:
- Account deletion:
DELETE /api/v1/me/requires the current password, invalidates sessions, deletes account-linked database records, and requests removal of chat uploads, artifacts, and avatar files. - Structured data export:
GET /api/v1/me/exportdownloads JSON containing account metadata, settings, chats, complete stored message fields, memory/profile records and snapshots, document metadata, and extracted document chunks. Password hashes, session tokens, and binary upload contents are intentionally excluded; users can download current chat uploads through the file endpoints. - Rectification: Users can update their username (
PATCH /api/v1/me/username), password (POST /api/v1/me/password), settings (POST /api/v1/me/settings), and long-term memory profile.
3. Configurable Model Routing¶
Numi Chat supports both self-hosted/local models (e.g. Ollama, vLLM, llama.cpp via OpenAI-compatible API) and remote providers (OpenRouter, Z.AI, Anthropic, OpenAI, Inception).
The configured chat endpoint receives the prepared request: system instructions, selected conversation history, applicable preferences and memory, attachment content, and active tool schemas. Returned reasoning is stored locally even when replay to the provider is disabled; see Preserved Reasoning.
Enabled tools can contact their own external services. Background memory and title tasks have separate model choices, so choosing a local chat model alone does not make every request local:
- Memory extraction and chat-title generation default to
deepseek/deepseek-v4.1-flash. Operators must configure OpenRouter credentials or overrideMEMORY_SUMMARY_MODELandCHAT_TITLE_MODEL. - Enabling
MEMORY_EXTRACTION_GATE_ENABLEDsends each candidate user message to OpenRouter's Decisions API even when the configured memory model is local. - Setting either background model to
inheritis optional and makes that task use the active catalog default; it is not the default behavior.
Follow Providers and endpoints to configure both chat and background models, and Tool access to control available integrations.
4. Operator Privacy Configuration¶
Self-hosting operators can configure instance-specific privacy information in .env:
INSTANCE_NAME="My Organization Chat"
OPERATOR_NAME="Example Organization"
OPERATOR_ADDRESS="123 Example St, City, Country"
PRIVACY_CONTACT_EMAIL="privacy@example.com"
PRIVACY_POLICY_URL="https://example.com/privacy"
These values are served via the public endpoint GET /api/v1/instance to inform users of the controller's identity and privacy policy. If omitted, placeholders are not generated.
5. Responsibilities of Deployment Operators¶
While Numi Chat provides technical safeguards, deployment operators are responsible for ensuring organizational compliance with applicable data protection regulations (such as GDPR, CCPA, or local laws), including:
- Controller Identity & Privacy Notice: Publishing an accurate privacy notice detailing the operator's legal basis, data retention policies, and contact information.
- Data Processing Agreements (DPAs): Executing DPAs with any remote cloud providers, model providers, or hosting services used by the instance (under Art. 28 GDPR).
- Retention Policies: Defining organizational data retention schedules and communicating them to users.
- Transport Security (TLS/HTTPS): Deploying Numi Chat behind a reverse proxy (e.g. Caddy, Nginx, Traefik) with valid TLS certificates in production to enforce encrypted communication.
- Backups & Operational Security: Securing the host operating system, SQLite database file (
chats.db), filesystem uploads, and backup snapshots.