Skip to the content.

Getting started

Prerequisites

Pulpitum targets Rust 1.94 and uses CockroachDB plus an S3-compatible object store for the complete hot/cold workflow.

For a local demonstration, use the full showcase:

cargo run --example showcase --features showcase

The showcase guide provisions CockroachDB, MinIO, OpenTelemetry, Prometheus, Grafana, and Jaeger.

Create the v4 schema

Run the privileged migration job separately from runtime services:

COCKROACH_CA_CERT_PATH=/var/run/secrets/cockroach/ca.crt \
COCKROACH_MIGRATION_URL='postgresql://migration-role@db.example/defaultdb?sslmode=require' \
  cargo run --bin pulpitum-migrate

The migrator applies the append-only schema history, validates its checksums and v4 catalog shape, then grants a dedicated runtime role DML-only permissions.

Run the SQL sidecar securely

The optional sidecar exposes the built-in chat schema through PostgreSQL wire protocol. Production mode requires TLS and a password file:

COCKROACH_CA_CERT_PATH=/var/run/secrets/cockroach/ca.crt \
COCKROACH_URL='postgresql://pulpitum_runtime@db.example/defaultdb?sslmode=require' \
PULPITUM_SQL_LISTEN_ADDR='0.0.0.0:5433' \
PULPITUM_SQL_TLS_CERT_PATH=/var/run/secrets/sql-sidecar/tls.crt \
PULPITUM_SQL_TLS_KEY_PATH=/var/run/secrets/sql-sidecar/tls.key \
PULPITUM_SQL_PASSWORD_FILE=/var/run/secrets/sql-sidecar/password \
  cargo run --bin pulpitum-sql-sidecar --features sql-sidecar

Clients should validate the server certificate and require channel binding:

postgresql://pulpitum@sql.example:5433/pulpitum?sslmode=verify-full&sslrootcert=/path/to/ca.crt&channel_binding=require

Keep archival disabled initially

The safe default is to retain all data in CockroachDB. Do not start the archiver unless the deployment has completed its archival fault acceptance criteria:

PULPITUM_ARCHIVAL_ENABLED=true \
  cargo run --bin pulpitum-archiver --features showcase

See Capabilities and the archival coordinator guide before enabling it.

Validate a checkout

cargo fmt --all -- --check
cargo clippy --locked --all-targets --all-features -- -D warnings
cargo test --locked --all-targets --all-features

The real CockroachDB/MinIO/Toxiproxy matrix is opt-in:

./docker/scripts/run-e2e.sh