Skip to main content
Nora Local is the self-hosted side of Nora. It ships the same server binary as the SaaS platform, the same SPA, and the same MCP surface, packaged four different ways so you can pick the shape that matches how your team already runs infrastructure.
Status (2026-09) — The desktop app is at 0.1.0. Docker Compose, Helm, and the air-gap tarball are all production paths shipped from the same release pipeline. Current builds are unsigned, so macOS Gatekeeper and Windows SmartScreen ask once on first launch. Code-signing is in progress.

Pick a form factor

Every form factor runs the same stack. The right one depends on where Nora needs to live.

Desktop app

Right for a single laptop. Nora runs as a native window with a tray icon, and it manages the Docker stack for you.

Docker Compose

Right for a single server or VM. One docker compose up -d against the shared compose file.

Kubernetes (Helm)

Right for an existing cluster with ingress, TLS, and private registries. The Helm chart deploys the same five services.

Air-gap tarball

Right for zero-internet hosts — offline hospitals, defence, regulated networks. All images bundled in one archive.

What’s running under the hood

Every form factor boots the same five services on an internal Docker network.
  • nora-server is the Rust binary that hosts the API and serves the SPA.
  • nora-llm-bridge is a Node subprocess for the Claude Agent SDK, Ollama, and OpenAI-compatible adapters.
  • postgres (pgvector/pgvector:pg16) stores application state and, by default, vector embeddings.
  • redis (redis:7-alpine) backs the working-memory cache. The stack falls back to Postgres when Redis is absent.
  • qdrant (qdrant/qdrant:v1.12.4) is an optional vector store you can switch to by setting NORA_VECTOR_STORE=qdrant.
The default HTTP port is 8090, controlled by NORA_HOST_PORT.

What every install includes

  • Automatic migrations on boot. NORA_RUN_MIGRATIONS=1 is the default. The first up runs every SQL migration; subsequent boots no-op when nothing has changed.
  • The on-prem flavor gate. NORA_DEPLOY_FLAVOR=onprem unlocks SDK and Local execution modes in the UI, and enables free-tier gating.
  • A free tier out of the box. With no license key, you get 1 workspace, 3 flows, and 100 daily invokes. Activate a paid plan by pasting the license key into Settings on the desktop app, or by setting NORA_LICENSE_KEY / NORA_LICENSE_FILE in the compose, Helm, or air-gap paths.
  • An optional air-gap boot probe. Set NORA_AIRGAP=1 and the server refuses to boot (exit code 78) if it can still reach the public internet. Use this to verify your isolation before Nora starts taking traffic.

What Nora Local does not run

  • The self-serve billing surface — plans, portal, subscribe, and cancel do not exist on-prem. Billing follows your license contract.
  • The SaaS improvement loop — the Verify & Improve budget is bundled with the enterprise license, not billed per-workspace.

Next

Install the desktop app

macOS, Windows, and Linux downloads plus the one-time first-launch prompt.

Docker Compose

Run the same compose file directly on a server.

Kubernetes (Helm)

Ingress, TLS, private registry, and license overrides.

Air-gap tarball

Install on a machine with zero internet access.

MCP on Nora Local

Point Claude Code, Codex, or Cursor at your local MCP endpoint.