Benchmarks

Same tests.
Same results.
Forty-seven times less waiting.

Four open-source Apex suites — 837 tests — run twice: once against a real Salesforce org, once against Nimbus. Every suite passes completely in both arms, so nothing separates the two columns except how long you sit there. The org column includes the deploy, because on an org you cannot run a test you have not deployed yet.

Salesforce org
1m 46s
deploy + test, all four suites
Nimbus, warm
2.3s
no deploy — the source is the input
Difference
47×
837 tests, all passing in both

Per suite, end to end

Time from pressing enter to having results in hand, split into the two things an org makes you wait for. Linear scale — the Nimbus bars really are that short.

Org — deployOrg — testNimbus — warmHover a segment · click a row to pin its raw runs
Wall clock, median of three runs each
26.6s
0.59s45× faster
22.9s
0.47s49× faster
28.8s
0.52s55× faster
27.8s
0.70s40× faster

The numbers

Median of three runs each. Deploy and test are listed apart so you can discount the deploy if your workflow somehow doesn't have one.

SuiteTestsOrg deployOrg testsOrg totalNimbusFactor
apex-test-kitTest-data factory — DML across standard objects875.3s21.3s26.6s0.59s45×
sobject-fabricatorIn-memory SObject fabrication, relationship trees1245.6s17.3s22.9s0.47s49×
trigger-actions-frameworkTrigger dispatch, custom metadata, order of execution15512.3s16.5s28.8s0.52s55×
fflib-apex-mocksMocking framework — stubs, matchers, verification4717.4s20.4s27.8s0.70s40×
All four837106.1s2.3s47×

Each phase is the median of its three runs; the org total is those two medians added. Test counts are identical in both arms and every run in both arms was green — the same tests, not a subset.

The loop you actually repeat

A full-suite run is the number people quote, but it isn't the number that decides how a day feels. That one is the inner loop: change one class, push it, run its tests, read the failure, change it again.

We measured it — one edited class, deployed on its own, one test class of 124 tests, three times through. On the org that cycle costs 18.9 seconds (5.3s to deploy the single file, 13.5s to get results). On Nimbus the same cycle is 1.09 seconds.

Seventeen times less, repeated every few minutes, is the difference between staying in a problem and going to make coffee while a deployment finishes.

bash
# On an org: deploy, then wait for the queue
sf project deploy start -d classes/MyThing.cls
sf apex run test --class-names MyThingTest --wait 30
# 18.9s

# With Nimbus: the source is already the input
nimbus test MyThingTest
# 1.09s

How this was measured

A benchmark you can't reproduce is an advertisement. Here is everything you need to run it yourself, including the parts that don't flatter us.

Suites

Four open-source repositories, unmodified: ApexTestKit, sobject-fabricator, trigger-actions-framework, and fflib-apex-mocks. They were chosen because Nimbus passes them completely and the org passes them completely, which is what makes the timing the only variable. Test counts match arm to arm.

Org arm

A Salesforce Developer Edition org on API 67, driven by Salesforce CLI 2.147.7. Wall clock from pressing enter to results in hand: sf project deploy start for the deploy, then sf apex run test with --wait. The deploy counts because the org cannot run source it hasn't been given.

Nimbus arm

The same source on disk, run warm — the project's embedded PostgreSQL already up, which is how it sits during a working session. The first run in a fresh project pays a one-time 6.2 seconds to initialise the database and build the schema; after that the same suite runs in 0.4 seconds. No org connection, no network.

Machine

Apple M2, 8 cores, macOS 26.5.1, on a domestic connection. Every figure is the median of three runs. Org timings move with pod load and time of day; a busy sandbox is slower than this DE org, not faster.

Run it on yours

Point Nimbus at your project and time the first warm run yourself.

bash
brew install nimbus-solution/nimbus/nimbus
cd your-sfdx-project
nimbus test "*"