Skip to main content
Entri is open source and designed to be self-hostable. The same codebase that powers app.nt3.io can run on your own infrastructure with no managed service dependencies.

Quickstart (local Docker)

For evaluating Entri or running it on a laptop:
docker compose up boots three containers — MongoDB, Redis, and TypeSense — bound to 127.0.0.1 only, with persistent named volumes. That covers everything Entri needs to run locally; no external accounts required.
The local Compose stack runs without authentication and binds to loopback. Do not expose those ports to the internet or to a shared LAN.

Architecture overview

Entri is an Nx monorepo with three deployable apps: Runtime dependencies:
  • MongoDB — primary datastore (Mongoose 8)
  • Redis — distributed cache and websocket pub/sub
  • TypeSense (or Algolia) — full-text search (optional; falls back to MongoDB regex)

Configuration

All configuration is via environment variables. Copy .env.example to .env and fill in what you need. The minimum required for the app to boot:
Optional but recommended:
See .env.example in the repo for the complete list with inline documentation.

Search backend

Set SEARCH_PROVIDER to pick a search backend. Each option targets a different deployment shape: After enabling a real search backend for the first time, backfill existing data:

Outbound email

Entri sends transactional email for invitations, welcome messages, and password resets. Two transports are supported. Pick whichever fits your stack — both produce identical output. EMAIL_FROM is required whenever a real transport is configured. Use an address on a domain you control. If neither transport is configured, emails are logged to the console (useful for local dev). When both are set, SMTP wins. Force a specific provider with EMAIL_PROVIDER=resend or EMAIL_PROVIDER=smtp.
The API verifies the SMTP connection on startup and logs a warning if it fails — sends will still be attempted, so misconfigurations show up in your logs without crashing the boot.

Production deployment

Entri ships with a multi-stage Dockerfile at the repo root that produces a single image containing both the API and the built web bundle. The reference deployment runs on Google Cloud Run, but the image is platform-agnostic — anywhere that runs OCI containers will work.
For multi-instance deployments (recommended for production), you’ll need:
  1. A managed MongoDB — Atlas, DocumentDB, or self-hosted with replication.
  2. A managed Redis — Memorystore, ElastiCache, Upstash, or self-hosted.
  3. A managed TypeSenseTypeSense Cloud or self-hosted on the same network as the API.
  4. Static asset hosting — the API serves the built web bundle by default; no separate hosting needed unless you want a CDN.
  5. A reverse proxy with TLS termination (Cloud Run / ALB / nginx).
The websocket progress streams (used by import/export) rely on Redis pub/sub for fan-out across instances. Make sure all API replicas talk to the same Redis.

Running migrations

The API does not auto-migrate. Run migrate-mongo up against your MongoDB before starting a new version:
In CI/CD, run this as a release-step job before rolling out the new image.

Updating

Going further