Open-source registry
We ❤️ open source
We load-test popular open-source software on modest, declared resources and publish what we find, so maintainers and users know what a self-hosted install can take.
- Real runs, not estimatesEvery number below is read from a real CapacityLab Report. A search finds a range on short steps; a rate counts as held only for the duration a longer run held it.
- Open methodEach entry names the version, the load mix, the latency bound, the resources and every run with its outcome, including the ones that missed or have no verdict.
- Maintainers have a sayTuned it differently? Ask us to retest with your settings, and we publish the new result next to the old one.
Projects we tested
Synthetic load from one generator outside the app; real traffic and the app's own metrics are not part of it. Rates are requests per second across all steps of a visit.
Medusa
CommerceHeadless commerce platform. A shop visit: browse, search, cart, shipping, checkout.
- License
- MIT
- Version tested
- 2.21.2
- Repository
- github.com/medusajs/medusa
- Resources (declared)
- Railway: app 2 vCPU / 2 GB (one Node process); Postgres and Redis without a limit
- Holds 13.5 req/s · 12 h
Small catalog
Tested Oct 1, 2026 · 5 Load Runs30 min · not held60 min · held3 h · not held12 h · held- Limit search, short steps
- ~17 req/s held, failed at ~29; 6 steps with too few samples to check at that rate
- Latency bound
- p95 ≤ 1.5 s
What this does not show
- Checkout steps fail the latency bound first; that the single Node process is the limit is a hypothesis from CPU readings, not a diagnosis.
- Holds 18 req/s · 12 h
Large catalog
Tested Oct 1, 2026 · 6 Load Runs30 min · held60 min · held3 h · held12 h · held- Limit search, short steps
- ~22 req/s held, failed at ~31; 6 steps with too few samples to check at that rate
- Latency bound
- p95 ≤ 1.5 s
What this does not show
- Search errors set the limit. Postgres had no resource limit, so how much of the machine it used is not fixed between runs.
- Holds 24.5 req/s · 12 h
Black Friday
Tested Oct 2, 2026 · 5 Load Runs30 min · held60 min · held3 h · held12 h · held- Limit search, short steps
- ~30 req/s held, failed at ~35; 6 steps with too few samples to check at that rate
- Latency bound
- p95 ≤ 1.5 s
What this does not show
- Black Friday here is a heavier checkout mix at a constant rate, not a traffic spike.
Ghost
Media and publishingPublishing platform. Readers open the home page, articles, tags and authors; a few sign up.
- License
- MIT
- Version tested
- 6.67.0
- Repository
- github.com/TryGhost/Ghost
- Resources (declared)
- Railway: Ghost 2 vCPU / 2 GB behind a Caddy proxy 2 vCPU / 2 GB, no CDN; MySQL 8.4 from a template
- Holds 39 req/s · 60 min
Normal day
Tested Oct 1, 2026 · 5 Load Runs30 min · held60 min · held3 h · no verdict- Limit search, short steps
- ~49 req/s held, failed at ~63; 6 steps with too few samples to check at that rate
- Latency bound
- p95 ≤ 1.5 s
What this does not show
- The 3 h run has no verdict: our load generator had seconds of health gaps, so the run was voided and refunded. It says nothing about Ghost either way.
- Ghost's origin was tested without a CDN; a public site behind one serves more.
- Holds 53.5 req/s · 3 h
Viral article
Tested Oct 1, 2026 · 6 Load Runs30 min · held60 min · held3 h · held (1 of 2)- Limit search, short steps
- ~67 req/s held, failed at ~89; 15 steps with too few samples to check at that rate
- Latency bound
- p95 ≤ 1.5 s
What this does not show
- Viral here is a mix with one hot article at a constant rate, not a ramp and a tail.
- Of the two 3 h runs, one has no verdict because of our generator's health gaps (older harness); the rerun held.
pretix
TicketingTicket shop. A visit reads the event widget, reserves seats, places and pays an order through the REST API.
- License
- AGPL-3.0 (with additional terms)
- Version tested
- 2026.8.0
- Repository
- github.com/pretix/pretix
- Resources (declared)
- Railway: pretix 2 vCPU / 2 GB (3 gunicorn workers); Postgres and Redis from templates
- Holds 25.6 req/s · 60 min
Normal sales
Tested Oct 1, 2026 · 5 Load Runs30 min · held (1 of 2)60 min · held3 h · not held- Limit search, short steps
- ~32 req/s held, failed at ~60
- Latency bound
- p95 ≤ 1.5 s
What this does not show
- The missed 30 min and 3 h runs failed only on refused reservations: small quotas sold out, and the check of that time counted a sold-out seat as a failure. Latency and HTTP errors were within the bound.
- Holds 13.4 req/s · 3 h
Hot concert on sale
Tested Oct 1, 2026 · 5 Load Runs30 min · held60 min · not held3 h · held- Limit search, short steps
- 20 req/s held, failed at 32
- Latency bound
- p95 ≤ 1.5 s
What this does not show
- The 60 min run missed when the VIP category sold out. The 3 h run had 60,000 seats per category so nothing sold out: it measures a sustained hot-event load, not a 15,000-seat on-sale with a sell-out.
Lago
Usage-based billingMetering and billing. Clients send usage events and read current usage, customers and invoices.
- License
- AGPL-3.0
- Version tested
- 1.53.0
- Repository
- github.com/getlago/lago
- Resources (declared)
- Railway: API (Puma) 2 vCPU / 2 GB and Sidekiq worker 2 vCPU / 2 GB; Postgres and Redis from templates
- Holds 25.6 req/s · 3 h
Normal month
Tested Oct 1, 2026 · 4 Load Runs30 min · not held60 min · held3 h · held- Limit search, short steps
- 32 req/s held, failed at ~64; 4 steps with too few samples to check at that rate
- Latency bound
- p95 ≤ 1.5 s
What this does not show
- The missed 30 min run failed only on the delivery of a step taken by 1% of visits: a sampling artefact of the rule of that time (since replaced). Latency and errors passed.
- Holds 25.6 req/s · 3 h
Month end
Tested Oct 1, 2026 · 4 Load Runs30 min · held60 min · held3 h · held- Limit search, short steps
- ~8 req/s held, failed at ~32; 3 steps with too few samples to check at that rate
- Latency bound
- p95 ≤ 1.5 s
What this does not show
- The search's low range is a delivery artefact of the rule of that time (rare steps sampled short), not the app slowing down: the longer runs at a higher rate held.
- Month end here is a heavier read mix at a constant rate; invoice generation at the period rollover was not tested.
Tile38 + OSRM + Photon
Ride-hailing geo backendIn progressDriver positions and nearby search (Tile38), routes and ETA matrices over the Moscow road graph (OSRM), geocoding (Photon).
- License
- MIT (Tile38), BSD-2-Clause (OSRM), Apache-2.0 (Photon)
- Version tested
- Tile38 1.38.0, OSRM 26.10.0, Photon 1.3.0
- Repository
- github.com/tidwall/tile38
- Resources (declared)
- Railway: Tile38 2 vCPU / 2 GB, OSRM 2 vCPU / 2 GB, Photon 2 vCPU / 8 GB
Campaign in progress: a normal evening, rush hour in rain and the end of a stadium match. Results appear here once the runs are final.
- Normal evening
- Rush hour in rain
- Stadium event