Skip to content

Single vs Scale Modes

Pulse ships one server binary (pulse-server) with two runtime modes:

  • single mode for the simplest local/self-hosted setup.
  • scale mode for Postgres-backed, higher-throughput deployments.
TopicSingle mode (PULSE_MODE=single)Scale mode (PULSE_MODE=scale)
DatabaseLocal SQLite file on one hostPostgres (DATABASE_URL)
Runtime shapeOne process can run API + listenersOne process or split API/listener processes
Best forLocal dev, smaller workloads, simpler opsHigher throughput, multi-node deployments
Infra needsNo external DB requiredManaged/self-hosted Postgres required
Operational complexityLowestHigher (DB ops, connection pools, scaling)
Horizontal scalingLimitedDesigned for scale-out with shared Postgres
  • You want the fastest path to first traces locally.
  • You are running one node and keeping operations simple.
  • You do not need shared database state across multiple service instances.
  • You need higher sustained ingest throughput.
  • You want to run multiple Pulse service instances against one shared database.
  • You already operate Postgres (or can adopt it) in your environment.

Single mode:

Terminal window
export PULSE_MODE=single
export BETTER_AUTH_SECRET="$(openssl rand -hex 32)"
export ENCRYPTION_KEY="$(openssl rand -hex 32)"
export BETTER_AUTH_URL='http://localhost:3000'

Scale mode:

Terminal window
export PULSE_MODE=scale
export DATABASE_URL='postgresql://pulse:pulse@localhost:5432/pulse'
export BETTER_AUTH_SECRET="$(openssl rand -hex 32)"
export ENCRYPTION_KEY="$(openssl rand -hex 32)"
export BETTER_AUTH_URL='http://localhost:3000'
  1. Start in single mode for development and early validation.
  2. Provision Postgres and set DATABASE_URL.
  3. Switch to PULSE_MODE=scale.
  4. Run scale migrations before starting:
Terminal window
bun run db:migrate:scale
pulse-server