The values below were measured on earlier reference hardware (a 2024 Apple M-series laptop, 16 GB RAM). They are pending re-measurement on the current reference machine (2025 Mac Studio M3 Ultra, 96 GB). Treat them as a lower bound until refreshed.
Data plane (single-writer SQLite)
Realtime path
The WS hub
broadcast number measures the enqueue side. It fans out to 16 shard worker threads, and each thread pushes to its connected clients. The real delivery rate depends on client count, message size, and TCP send buffers.
What these numbers mean for deploy sizing
Small (1 vCPU, 1 GB RAM, ~$5/mo VPS)
- Up to ~20k writes/minute sustained, or bursts to 30k/minute
- Up to ~10k concurrent WS connections (64 KB stack per reader thread)
- Good for a few thousand active users at typical web app request rates
Medium (2 vCPU, 4 GB RAM, ~$25/mo VPS)
- Up to ~50k writes/minute sustained
- Up to ~40k concurrent WS connections
- Good for 50k active users, with room for complex queries without cache eviction
Large (4+ vCPU, 8+ GB RAM)
- The write ceiling is still single-writer SQLite (about 70k inserts/sec peak). If writes are your bottleneck, move to Postgres (
postgres-livefeature) or shard the app across databases. - Reads scale with the read-connection pool. 4 pool connections × 500k reads/sec = 2M reads/sec ceiling.
When to switch backends
Switch from SQLite to Postgres when
- Sustained write rate > 50k/sec (you are at SQLite’s single-writer limit)
- Multiple processes need to write (replicas, HA failover)
- You need online DDL / zero-downtime migrations at scale
- Storage > 100 GB (not a hard limit, but WAL checkpoints get painful)
You can stay on SQLite when
- Single-process deployment
- Full DB fits comfortably in RAM for the read pool
- You back up with
pylon backupon a schedule
On Pylon Cloud
Cloud supports multiple application machines for Postgres projects. It uses the managed PylonSync relay for cross-machine realtime events. SQLite projects must stay on one application machine. Resize the machine or switch to Postgres before you add replicas. For multiplayer apps with sticky shard connections, latency to your players matters. Set the workspace region accordingly when you sign up.Benchmark gaps
- Multi-client read contention (connection-pool fair-share)
- TLS handshake cost (reverse proxy terminates TLS)
- Network round-trip time: production numbers will be bounded by the network first
- Shard tick budget for realtime game state: depends on
SimState::tick
cargo bench -p pylon-runtime (see the commands at the top of this page) against a representative fixture and the manifest you will ship with.