Skip to content

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.

Keep chat storage on your instance and choose connections to local models or external services.


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_token and refresh_token) configured with HttpOnly, SameSite=Lax, and Secure when ENVIRONMENT!=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/export downloads 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 override MEMORY_SUMMARY_MODEL and CHAT_TITLE_MODEL.
  • Enabling MEMORY_EXTRACTION_GATE_ENABLED sends each candidate user message to OpenRouter's Decisions API even when the configured memory model is local.
  • Setting either background model to inherit is 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:

  1. Controller Identity & Privacy Notice: Publishing an accurate privacy notice detailing the operator's legal basis, data retention policies, and contact information.
  2. Data Processing Agreements (DPAs): Executing DPAs with any remote cloud providers, model providers, or hosting services used by the instance (under Art. 28 GDPR).
  3. Retention Policies: Defining organizational data retention schedules and communicating them to users.
  4. 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.
  5. Backups & Operational Security: Securing the host operating system, SQLite database file (chats.db), filesystem uploads, and backup snapshots.