Pre-alpha. No tagged release and no upgrade path between versions. Use for evaluation and development only, not production.
Core DevPre-alpha

Scale-out architecture

Sumeru runs as one or more stateless Go replicas behind a load balancer. Sessions live in PostgreSQL (sys.session), so any replica can serve authenticated requests without sticky cookies.

Phase 1 — production-shaped single cluster

KnobINI keyPurpose
Connection pooldb_max_open_conns, db_max_idle_conns, db_conn_max_lifetime_minutesAvoid pool exhaustion under load
Read replicadb_read_replica_dsnRoute search / search_read / list views to replica
Rate limitsrate_limit_rpmPer-IP cap on /api/rpc and /web/login
SMTPsmtp_host, smtp_port, smtp_from, …Password reset and notifications

Run N identical binaries behind nginx or HAProxy. Use /api/health for health checks.

Configure keys in Configuration (see sumeru.conf.example in the repo).

Phase 2 — async workers

  • Outbox drain publishes to the in-process queue (core/queue) after event.Publish; external brokers can subscribe to the same topic later.
  • Cron uses FOR UPDATE SKIP LOCKED on sys.cron so multiple instances do not double-run the same job.
  • Mail worker consumes the mail queue topic when SMTP is configured.

See Multi-instance cron for scheduler constraints.

Phase 3 — millions of concurrent reads

  • Horizontal pod autoscaling on CPU/latency
  • PgBouncer in transaction mode
  • CDN for /static/*
  • Separate API-only service if HTML render becomes the bottleneck

Writes remain bounded by the PostgreSQL primary; scale tenants with one database per tenant, not row sharding inside one ERP database.

See also