BP-02 // SINGLE-BINARY SAAS

PocketBase for 100,000+ Active Users on a $10.49 AMD EPYC NVMe VPS

SQLiteEdge PocketBase blueprint: sizing vCPU, LimitNOFILE descriptors, Realtime SSE streams, and Litestream systemd wrappers on a single NVMe VPS.

MODELED DESIGN TARGET
9,800 TPS
READ PATH / RPO TARGET
0.35 ms
REFERENCE NVME PROFILE
$5.99–$10.49 KVM NVMe

PocketBase compiles Go HTTP routing, Realtime Server-Sent Events (SSE), JWT auth, S3 media hooks, and dual-pool modernc/sqlite into one ~38 MB static executable. Because database queries execute in-process with zero TCP serialization overhead, a 4 vCPU / 16 GB Hostinger KVM4 NVMe VPS comfortably serves 100,000+ monthly active users and 15,000+ open SSE streams.

In our SQLiteEdge BP-02 reference guide, every configuration rule below follows official SQLite 3.46 documentation and public vendor specifications retrieved 2026-11-12.

SQLiteEdge Architecture Rules for PocketBase 100k-User Go + SQLite WAL Sizing

  1. Raise Linux file descriptor limits (LimitNOFILE=262144) in systemd so 20,000+ concurrent Realtime SSE subscribers and WAL memory maps never hit EMFILE.
  2. Store pb_data strictly on local PCIe Gen4 NVMe (/var/lib/pocketbase/pb_data), while offloading user-uploaded avatars/videos to S3 object storage so SQLite stays purely relational and RAM-cached.
  3. Front PocketBase with Caddy or NGINX HTTP/3 using flush_interval -1 on /api/realtime so SSE events stream instantaneously without proxy buffering.
  4. Wrap PocketBase inside litestream replicate -exec so every user signup and record mutation ships to off-site S3 within 1,000ms.

SQLiteEdge Reference Snippet: /etc/systemd/system/pocketbase.service (Hardened 100k-User Unit)

/etc/systemd/system/pocketbase.service (Hardened 100k-User Unit)
[Unit]
Description=PocketBase Production Single-Binary + Litestream WAL
After=network-online.target

[Service]
Type=simple
User=pocketbase
Group=pocketbase
WorkingDirectory=/var/lib/pocketbase
LimitNOFILE=262144
Environment="GOMEMLIMIT=12GiB"
ExecStart=/usr/local/bin/litestream replicate \
  -config /etc/litestream.yml \
  -exec "/usr/local/bin/pocketbase serve --http=127.0.0.1:8090 --dir=/var/lib/pocketbase/pb_data"
Restart=always
RestartSec=2s

[Install]
WantedBy=multi-user.target

SQLiteEdge Modeled Profile & Tariff Table (BP-02)

Public vendor prices retrieved 2026-11-12 (promotional and renewal rates may change at checkout); throughput figures reflect theoretical single-queue sizing models rather than unarchived lab claims.

MAU TierConcurrent SSEDB FootprintOptimal NVMe VPS Spec
10,000 MAU Indie App800 SSE2 GB SQLiteHostinger KVM 1 (4GB RAM / 50GB NVMe) — $4.99/mo
50,000 MAU B2B SaaS4,500 SSE12 GB SQLiteHostinger KVM 2 (8GB RAM / 100GB NVMe) — $5.99/mo
100,000+ MAU Consumer App15,000 SSE35 GB SQLiteHostinger KVM 4 (16GB RAM / 200GB NVMe) — $10.49/mo
500,000+ MAU Write-Intensive45,000 SSE90 GB SQLiteVultr HF 8 vCPU / 16GB 3.7GHz NVMe — $96.00/mo

SQLiteEdge Spec-Matched NVMe & S3 Targets for BP-02

Open this BP-02 workload preset inside the SQLiteEdge PRAGMA Studio →

SQLiteEdge Engineering FAQ for BP-02

  • Does PocketBase pure-Go SQLite (modernc.org/sqlite) perform well compared to CGo?

    Yes—on modern AMD EPYC and 3.5GHz+ Intel Xeon cores, PocketBase achieves 8,000–14,000+ read QPS and thousands of write TPS with zero CGo cross-compilation headaches, and already configures separate concurrent DB vs non-concurrent write pools out of the box.

  • How do I deploy schema changes with zero downtime on PocketBase?

    Use Go or JS migration files committed to Git alongside systemd socket activation or a 400ms Caddy retry_duration window—PocketBase boots and runs migrations in under 120 milliseconds on local NVMe.