LevelChatLevelChat
Use cases/Internal collaboration
Internal collaboration

On-prem team meetings inside your perimeter.

Run camera-on team meetings on your own servers — same SDK, same Studio admin panel, no media leaving your network. Helm chart on k8s or docker compose on a small Hetzner footprint.

A modern conference room with elegant decor and natural light, set up for a calm team meeting.

The problem

Regulated organisations cannot send media outside their own perimeter — but their teams still need camera-on meetings with a real recording archive. SaaS video tools refuse, and "video as a feature" buy-vs-build comes down to "we need it inside our perimeter, end of story".

How LevelChat fits

Run the LevelChat stack on your own Kubernetes cluster (Helm chart) or with docker compose on a small Hetzner / AWS / on-prem footprint. The same Studio admin panel ships at app.<your-domain>/console. Per-server Ed25519 license — no third-party telemetry path, no phone-home for the media itself.

What we use under the hood

  • Helm chart + docker compose — same images we run in cloudDocs
  • Per-server Ed25519 license — no third-party telemetry pathDocs
  • Air-gapped install supported (Community + Pro tiers)Docs
  • Same SDK either way — migrate cloud ↔ self-host without rewritingDocs

Reference architecture

Your VPC / on-prem datacentre
       │
       ├── leader node ──── full stack (gateway, signaling, SFU, recording, …)
       │                          │
       │                          ▼
       │                    Postgres + NATS + MinIO
       │
       ├── worker node ──── media-sfu + recording (cascade)
       └── worker node ──── media-sfu + recording (cascade)

Cluster join token mints fingerprint-bound Ed25519 license per node.

Integration snippet

Real code against published packages — no phantom imports.

docker-compose up on your leader box
# One-line install on a fresh Linux box:
curl -fsSL https://get.levelchat.io/install.sh | sudo bash

# Add a worker to the cluster:
curl -fsSL https://get.levelchat.io/install.sh | \
  sudo LC_JOIN_LEADER=https://meet.acme.internal \
       LC_JOIN_TOKEN=jt_your_24h_join_token \
       bash

# Embed @levelchat/web in your intranet portal — same surface as cloud.
npm i @levelchat/web @levelchat/web-react

Common questions for this vertical

  • Does self-host need internet at all?

    Air-gapped install is supported on Community + Pro. The license verification runs locally (Ed25519 public key embedded in the binary), so the only outbound need is the optional license heartbeat (every 24h) to mark active node counts in your subscription dashboard. The heartbeat is disabled in air-gapped mode.

  • How do upgrades work?

    Each release ships a new docker image tag. The supported upgrade is: pull the new tag, `docker compose up -d`. Database migrations run on boot; downgrade is one-tag-back via the same flow. Atomic blue/green is on the roadmap (Preview) for the Helm chart.

  • What about a 3-host HA topology?

    The HA compose file (docker-compose.self-host-ha.yml) ships 3-host Postgres (Patroni) + Redis Sentinel + NATS cluster + MinIO distributed. External L4 load-balancer or keepalived terminates :443 to any swarm node. See /self-host for the deployment instructions.

Building something in this space?
We answer architecture questions on the same day. Sketch what you're working on and we'll send back a one-page LevelChat fit-check.