Quick start — Self-hosted Docker

Pull, run, license, done. The same API as hosted, on your own infrastructure.

1. Pull the image

docker pull rendarium/rendarium:latest

Tags: 2026.8.1 pins an exact build, 2026.8 follows the latest patch of a release, latest follows the newest release. Images are multi-arch (Linux x64 and ARM64). Pin an exact tag in production.

2. Run it

docker run -d --name rendarium -p 8490:8490 \
  -e RENDARIUM_LICENSE_KEY= \
  rendarium/rendarium:2026.8

RENDARIUM_LICENSE_KEY — leave empty for demo mode (watermarked output). Paste your license key to activate. The service listens on port 8490; GET /health returns 200 when ready.

curl -X POST http://localhost:8490/convert/html \
  -H "Content-Type: application/json" \
  -d '{"html": "<h1>Hello from my server</h1>"}' \
  --output hello.pdf

Without RENDARIUM_API_KEYS the container accepts unauthenticated requests — the normal choice on an internal network. There are no credits in self-hosted mode.

3. Add the license key

The key arrives by email after purchase (see licenses). It is verified offline at start-up with a public key embedded in the image: no activation server, no phone-home. GET /license reports the edition and the update horizon; the watermark disappears from every output.

docker run -d --name rendarium -p 8490:8490 \
  -e RENDARIUM_LICENSE_KEY=RNDM2-XXXXXXXX-XXXXXXXX-... \
  rendarium/rendarium:2026.8

A key with horizon 2027.08 runs every release whose year.month is ≤ 2027.08, forever. Pulling a release published after the horizon starts the container in demo mode and logs the reason.

4. Optional: require API keys

To let several teams share one container with distinct credentials, generate keys inside the image and list them in the environment:

docker run --rm rendarium/rendarium genkey
# rnd_self_q3w8e2r7t5y1u9i4o6p0a8s3d7f2g5h1

docker run -d -p 8490:8490 \
  -e RENDARIUM_LICENSE_KEY=... \
  -e RENDARIUM_API_KEYS=rnd_self_q3w8...,rnd_self_m4n7... \
  rendarium/rendarium:2026.8

Clients then send Authorization: Bearer rnd_self_... exactly as against the hosted API. Comparison is constant-time; a wrong key gets 401. Rendarium never sees these keys.

5. Docker Compose

services:
  rendarium:
    image: rendarium/rendarium:2026.8
    restart: unless-stopped
    ports: ["8490:8490"]
    environment:
      # Leave empty for demo mode (watermarked). Paste your license key to activate.
      RENDARIUM_LICENSE_KEY: ""
      # RENDARIUM_API_KEYS: "rnd_self_..."
    deploy:
      resources:
        limits: { cpus: "2", memory: 4G }
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8490/health"]
      interval: 15s
      timeout: 5s
      retries: 3

6. Sizing and scaling