The local Apex runtime

Run real Apex.
No Salesforce org.

Nimbus executes your SOQL, DML, triggers, and flows against an embedded database — on your machine — then tests, debugs, and covers them. The whole inner loop runs in milliseconds, not minutes.

curl -fsSL https://testnimbus.dev/install.sh | sh

Installs in seconds macOS · Linux · Windows No Docker, no JVM

InvoiceServiceTest.cls
@isTeststatic void recalculatesNetTotal() {  Invoice__c inv = new Invoice__c(Amount__c = 100);  insert inv;                    // real DML  Test.startTest();  InvoiceService.recalc(inv.Id); // triggers fire  Test.stopTest();  System.assertEquals(119, [    SELECT Net__c FROM Invoice__c WHERE Id = :inv.Id  ].Net__c);}
the org loop
sf apex run test --wait 10
Deploying source… Enqueued… Polling…
Test run complete4m 12s
the local loop
nimbus test InvoiceServiceTest
✓ recalculatesNetTotal
1 passed · 0 failed240ms
  • Runs entirely on your machine
  • Drops into your existing SFDX project
  • No Docker, no JVM
  • Reads your existing sfdx-project.json

Proof, not adjectives

Runs the frameworks Apex teams actually depend on — unmodified.

apex-recipes, fflib-apex-mocks, and Nebula Logger run on Nimbus with no source changes — thousands of their own real tests, passing locally. No per-test limits. Run your whole suite.

Verify it yourself:

git clone …/fflib-apex-mocks && cd fflib-apex-mocks && nimbus test "*"

The Salesforce org is your bottleneck.

For over fifteen years, changing one line of Apex meant a push, a deploy, and a wait. Nimbus moves Apex development onto your machine — local and fast.

The shared org problem

You change one line in a trigger. Push to scratch org. Wait 4 minutes. Tests fail because another developer's test data is polluting the database. Spend 20 minutes debugging someone else's problem. Multiple devs, one environment, constant friction.

The onboarding tax

New developer joins. Day 1: request org access. Day 3: admin provisions a sandbox. Day 5: they finally run their first test. Five days to run a single test. Every new hire, on every project.

The CI/CD tax

Your pipeline needs a connected org, a JWT cert, a DevHub with available scratch org limits, and a prayer the org pool isn't exhausted. When it breaks — and it eventually does — the failure is rarely in your code. Meanwhile your Java team has Codecov badges that just work.

Apex, SOQL, DML, triggers & flows — executed locally.

The Apex surface Nimbus executes natively — classes, data, automation, and tests. It grows with every release.

Language

  • Classes, interfaces, enums
  • Inheritance and polymorphism
  • Generics and typed collections
  • Exception handling
  • All Apex annotations

Data

  • SOQL queries
  • DML (insert, update, delete, upsert)
  • Bind variables
  • Aggregate functions
  • Relationship queries

Automation

  • Before and after triggers
  • Record-triggered flows
  • Autolaunched flows and subflows
  • Flow formulas and decisions
  • Platform event flows

Testing

  • @isTest and @testSetup
  • System.assert variants
  • Test.startTest / stopTest
  • Stub API / ApexMocks
  • Per-test transaction isolation

What still needs the org.

Nimbus runs the ~80% of tests that exercise business logic, SOQL, triggers, and class behaviour. It does not replace your org for:

  • OWD and role-hierarchy sharing (the with sharing keyword is enforced)
  • Approval processes, assignment rules, validation-rule packages
  • Lightning UI / browser testing
  • Final pre-deployment validation — your org is still the source of truth

The org stays the source of truth and the final pre-deploy gate — see the full comparison.

Still just the local runtime

Once Apex runs locally, everything else follows.

A debugger, a language server, mutation testing, coverage, AI agents — none of it was possible while the org was in the loop. Move execution to your machine and the whole toolchain comes with it. One binary, one idea.

The modern way to develop Apex

What fast, local Apex development unlocks.

Four capabilities that reshape Apex development day to day — real execution, live debugging, mutation testing, and traces. Each links to the full story.

Real execution. Not mocks.

Your SOQL actually runs. Your triggers actually fire. Your DML actually persists. Nimbus executes Apex against a real embedded PostgreSQL database — not a simulated environment. No fake return values, no stubbed runtime.

Why an embedded database

Live debugging — not replay.

Pro

The Apex Replay Debugger works from a log after execution. Nimbus debugs live — set breakpoints, step through code, inspect variables in real time. Supported in VS Code and JetBrains IDEs.

See the debugger

Mutation testing for Apex.

Pro

Nimbus mutates your code — flips operators, negates conditions, changes returns — and checks if your tests catch it. A category first for the platform. 75% coverage means nothing if mutants survive.

How mutation testing works

Execution traces, not log files.

Pro

Every test run produces a structured OpenTelemetry trace — method calls, SOQL, DML, triggers, branches, variable assignments — visualized as an interactive tree. Not a 40,000-line debug log.

Explore traces & analytics

Where Nimbus fits.

Nimbus replaces the inner dev loop, not the org. Here's the contrast in one screen — full comparison.

vs. scratch orgs
Push source. Wait. Run. Wait again. 2–10 min per cycle, plus DevHub limits.
No push. Tests run in milliseconds against an embedded database.
vs. ApexMocks
Stub everything. Tests pass while real SOQL, triggers, and DML stay untested.
Real SOQL. Real DML. Real triggers — executed against a real database. Same speed as mocks, with real coverage.
vs. sandbox CI
JWT cert, connected org, scratch org pool, prayer. Breaks in ways nobody can debug.
JUnit XML and Cobertura — plug into GitHub Actions, SonarQube, Codecov.

Configuration

Your test environment belongs in git.

In Salesforce, your test environment is configured through Setup UI and Custom Settings — none of it in source control, none of it shared with your team. Nimbus flips that. One nimbus.properties file, committed to your repo, configures everything: governor limits, org defaults, custom setting seeds, database settings.

Profiles let CI enforce strict governor limits while local dev stays relaxed. Same binary. Same file. No wrapper scripts.

nimbus.properties
# Commit this to your repo

nimbus.governor.mode=warn
nimbus.org.currency=EUR
nimbus.org.timezone=Europe/Berlin

# Seed custom settings - no @testSetup boilerplate
nimbus.seed.org-default.TriggerSettings__c=IsEnabled__c=true
nimbus.seed.org-default.FeatureFlags__c=NewUI__c=false

# CI: strict enforcement, no browser
%ci.nimbus.governor.mode=strict
%ci.nimbus.test.parallel=2
%ci.nimbus.devui.open-browser=false
%ci.nimbus.db.url=${DATABASE_URL}
NIMBUS_PROFILE=ci nimbus test

Why fast, local Apex matters now

AI agents can write Apex. They can't wait 10 minutes to test it.

Tools like Claude Code, Cursor, and Copilot work in write-test-fix loops. That loop only works when "run tests" takes seconds, not minutes. An AI agent can generate a trigger handler in seconds — but verifying it still means deploying to an org.

Agents need fast feedback to self-correct. With Nimbus, an agent iterates on Apex the same way it iterates on Python or TypeScript.
Agents don't have org credentials. An agent running in your terminal can run nimbus test. Local testing makes Apex accessible to the same agentic workflows that work for every other language.
Agent writes Apex~5s
nimbus test~200ms
Agent reads results, fixes~5s
With org testing5–10 min / iteration
With Nimbus~10 sec / iteration

For tech leads

How Nimbus fits a real Salesforce team.

What about platform fidelity?

Nimbus runs the 80% of tests that exercise business logic, SOQL, triggers, and class behavior. Sharing rules, UI, and approvals still need an org. We list every gap on the comparison page — no hand-waving.

What runs locally vs. on Salesforce?

Everything Nimbus supports runs on the developer machine. No source code or schema leaves the laptop. The org remains the deployment target and the system of record for production.

How does this fit our release pipeline?

Nimbus is the inner loop. Pre-merge: nimbus test in CI, no connected org. Pre-deploy: keep your existing scratch org or sandbox jobs as the final gate. JUnit XML and Cobertura output drop into the tools you already run.

Works withVS CodeJetBrainsCursorWindsurfNeovimGitHub ActionsGitLab CISonarQubeCodecovClaude CodeCopilotMCP

Free for every developer.

Free

$0 forever

For individual developers

  • Apex runtime — real execution
  • Unlimited test runs
  • SOQL, DML, triggers & flows
  • Code coverage (console, JSON, HTML)
  • Governor limit enforcement
  • VS Code & JetBrains integration
  • 1 machine
  • Community support
Install free

Available today. Install in one line.

The Free tier is live now — install in one line. Sign up for a free Pro license, and join the Slack to ask questions and shape what's next.