Skip to main content

Deployment

Don't want to manage infrastructure?

Revisium Cloud — managed platform, zero ops, free to start. Sign up with Google or GitHub.

Standalone​

Single command, embedded PostgreSQL, zero configuration:

npx @revisium/standalone@latest

Open http://localhost:9222. No auth by default.

OptionDefaultDescription
--port9222HTTP port
--authfalseEnable authentication (admin / admin)
--dataOS temp dirPersistent data directory
# Custom port with auth
npx @revisium/standalone@latest --port 3000 --auth

# Persistent data
npx @revisium/standalone@latest --data ./revisium-data

MCP endpoint available at /mcp:

claude mcp add --transport http revisium http://localhost:9222/mcp

Best for: local development, PoC, AI agent integrations, demos.

Docker Compose​

Full stack with PostgreSQL:

services:
db:
image: postgres:17.4-alpine
restart: always
environment:
POSTGRES_DB: revisium
POSTGRES_USER: revisium
POSTGRES_PASSWORD: change-me-to-a-secure-password
volumes:
- pgdata:/var/lib/postgresql/data

revisium:
image: revisium/revisium:latest
pull_policy: always
depends_on:
- db
ports:
- 8080:8080
environment:
DATABASE_URL: postgresql://revisium:change-me-to-a-secure-password@db:5432/revisium?schema=public
ADMIN_PASSWORD: change-me

volumes:
pgdata:
docker-compose up -d

Open http://localhost:8080. Login: admin / value of ADMIN_PASSWORD.

With Redis and S3​

services:
db:
image: postgres:17.4-alpine
restart: always
environment:
POSTGRES_DB: revisium
POSTGRES_USER: revisium
POSTGRES_PASSWORD: change-me
volumes:
- pgdata:/var/lib/postgresql/data

redis:
image: redis:7-alpine
restart: always

revisium:
image: revisium/revisium:latest
pull_policy: always
depends_on:
- db
- redis
ports:
- 8080:8080
environment:
DATABASE_URL: postgresql://revisium:change-me@db:5432/revisium?schema=public
CACHE_ENABLED: 1
CACHE_L2_REDIS_URL: redis://redis:6379
CACHE_BUS_HOST: redis
CACHE_BUS_PORT: 6379
S3_ENDPOINT: https://s3.amazonaws.com
S3_BUCKET: my-revisium-files
S3_REGION: us-east-1
S3_ACCESS_KEY_ID: AKIA...
S3_SECRET_ACCESS_KEY: ...
ADMIN_PASSWORD: change-me

volumes:
pgdata:

Updating​

docker-compose pull
docker-compose up -d

Database migrations run automatically on startup.

Docker (Single Container)​

Bring your own PostgreSQL:

docker run -d \
-p 8080:8080 \
-e DATABASE_URL=postgresql://user:pass@host:5432/revisium?schema=public \
-e ADMIN_PASSWORD=change-me \
revisium/revisium:latest

Kubernetes​

Use the official Docker image with your Helm charts or manifests:

apiVersion: apps/v1
kind: Deployment
metadata:
name: revisium
spec:
replicas: 1
selector:
matchLabels:
app: revisium
template:
metadata:
labels:
app: revisium
spec:
containers:
- name: revisium
image: revisium/revisium:latest
ports:
- containerPort: 8080
env:
- name: DATABASE_URL
valueFrom:
secretKeyRef:
name: revisium-secrets
key: database-url
- name: JWT_SECRET
valueFrom:
secretKeyRef:
name: revisium-secrets
key: jwt-secret
- name: ADMIN_PASSWORD
valueFrom:
secretKeyRef:
name: revisium-secrets
key: admin-password

For multi-pod deployments:

  • Set JWT_SECRET explicitly — auto-generated per process won't work across pods
  • Set CACHE_ENABLED=1 with CACHE_L2_REDIS_URL and CACHE_BUS_HOST/CACHE_BUS_PORT for cache sync between pods
  • Use a managed PostgreSQL service

For schema migrations in K8s, see CI/CD.

Docs Search with Typesense​

docs.revisium.io can use Typesense behind the same docs domain.

Recommended production layout:

  • docs container serves static Docusaurus pages
  • Kubernetes ingress routes /search/* to the internal Typesense service
  • docs-search-indexer runs the stateless typesense-docsearch-scraper

This keeps the browser pointed at the docs origin instead of a separate public Typesense endpoint.

Configuration​

All configuration is done via environment variables.

Required​

VariableDescriptionExample
DATABASE_URLPostgreSQL connection stringpostgresql://user:pass@host:5432/db?schema=public

Authentication​

VariableDefaultDescription
JWT_SECRETauto-generatedJWT signing secret. Set explicitly in production and multi-pod deployments
ADMIN_PASSWORDadminDefault admin password

Cache​

VariableDefaultDescription
CACHE_ENABLED0Enable caching (1 to enable)
CACHE_L1_MAX_SIZE—Max items in L1 (in-memory) cache
CACHE_L2_REDIS_URL—Redis URL for L2 cache
CACHE_BUS_HOST—Redis host for cache bus (multi-pod invalidation)
CACHE_BUS_PORT—Redis port for cache bus
CACHE_DEBUG0Enable cache debug logging

S3 (File Storage)​

VariableDescription
S3_ENDPOINTS3-compatible endpoint URL
S3_BUCKETBucket name
S3_REGIONAWS region
S3_ACCESS_KEY_IDAccess key
S3_SECRET_ACCESS_KEYSecret key

SMTP (Email)​

VariableDescription
SMTP_HOSTSMTP server hostname
SMTP_PORTSMTP port
SMTP_USERSMTP username
SMTP_PASSSMTP password

Endpoint Configuration​

VariableDefaultDescription
ENDPOINT_GRAPHQL_SHOW_NODE_TYPEtrueGenerate Node types
ENDPOINT_GRAPHQL_SHOW_FLAT_TYPEtrueGenerate Flat types
ENDPOINT_GRAPHQL_ADD_PROJECT_PREFIXtruePrefix types with project name
ENDPOINT_GRAPHQL_FEDERATIONfalseEnable Apollo Federation

See API Configuration for details.

API Keys​

VariableDefaultDescription
INTERNAL_API_KEY_ENDPOINTAuto-generated (monolith)Internal key for endpoint-to-core communication. Set explicitly in microservice mode.
API_KEY_DEFAULT_EXPIRATION_DAYS365Default expiration for new API keys
API_KEY_MAX_PER_USER10Max personal API keys per user
API_KEY_MAX_SERVICE_PER_ORG100Max service API keys per organization

In monolith/standalone mode, internal keys are derived automatically from JWT_SECRET. For multi-replica deployments, JWT_SECRET must be set explicitly so all pods derive the same key.

Service Communication (Microservice Mode)​

VariableDescription
CORE_API_URLURL of revisium-core service
CORE_API_USERNAMEService account username (deprecated — use INTERNAL_API_KEY_ENDPOINT)
CORE_API_PASSWORDService account password (deprecated — use INTERNAL_API_KEY_ENDPOINT)

In the all-in-one Docker image, these are configured automatically.

Infrastructure​

PostgreSQL​

The only required dependency. PostgreSQL 14 or higher.

  • JSONB columns for row data and table schemas
  • Copy-on-write for revisions — commits don't duplicate unchanged data
  • Indexes on system fields and JSONB paths for query performance
  • Recommended: managed PostgreSQL (AWS RDS, Google Cloud SQL, etc.) for production

Redis (Optional)​

Used for L2 cache and multi-pod cache invalidation:

  • L1 cache — in-memory cache per process (CACHE_L1_MAX_SIZE)
  • L2 cache — Redis shared across pods (CACHE_L2_REDIS_URL)
  • Cache bus — Redis pub/sub for cache invalidation across pods (CACHE_BUS_HOST, CACHE_BUS_PORT)

Without Redis, Revisium uses in-memory caching with PostgreSQL-based bus (fine for single-instance). Set CACHE_ENABLED=1 to enable caching.

S3 (Optional)​

Required for file uploads:

  • Any S3-compatible storage (AWS S3, MinIO, DigitalOcean Spaces, etc.)
  • Files up to 50 MB (not yet configurable)
  • Metadata stored in PostgreSQL, binaries in S3

Without S3, file fields are available in schemas but upload is disabled.

SMTP (Optional)​

For email notifications (e.g., user invitations).

Requirements​

ComponentRequiredNotes
PostgreSQL 14+YesThe only required dependency
Node.js 20+Standalone/CLI onlyNot needed for Docker
S3-compatible storageOptionalFor file uploads
RedisOptionalFor caching and multi-pod sync