The local Apex runtime
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 | shInstalls in seconds macOS · Linux · Windows No Docker, no JVM
@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);}Proof, not adjectives
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 "*"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.
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.
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.
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.
The Apex surface Nimbus executes natively — classes, data, automation, and tests. It grows with every release.
Nimbus runs the ~80% of tests that exercise business logic, SOQL, triggers, and class behaviour. It does not replace your org for:
The org stays the source of truth and the final pre-deploy gate — see the full comparison.
Still just the local runtime
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.
Classes, SOQL, DML, and triggers execute against an embedded PostgreSQL.
Record-triggered, autolaunched, and screen flows run alongside your Apex.
Code lenses, inlay hints, semantic tokens, and call hierarchy in any LSP editor.
First-class plugins with full parity — inline results, run buttons, coverage gutters.
Mutates your code and checks your tests catch it — a category first for Apex.
Line and branch coverage. JUnit XML, Cobertura, and HTML into any pipeline.
Breakpoints and variable inspection over DAP — live, not log replay.
Structured OpenTelemetry traces of every call, query, trigger, and branch.
Test explorer, coverage, schema browser, and an Apex REPL — no editor needed.
Agents call the runtime natively over JSON-RPC for tight write-test-fix loops.
A Salesforce-compatible REST and gRPC Pub/Sub server, on localhost.
Warm the whole codebase once; every run after that starts in milliseconds.
The modern way to develop Apex
Four capabilities that reshape Apex development day to day — real execution, live debugging, mutation testing, and traces. Each links to the full story.
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 databaseThe 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 debuggerNimbus 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 worksEvery 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 & analyticsNimbus replaces the inner dev loop, not the org. Here's the contrast in one screen — full comparison.
Configuration
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.
# 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 testWhy fast, local Apex matters now
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.
nimbus test. Local testing makes Apex accessible to the same agentic workflows that work for every other language.For tech leads
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.
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.
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.
For individual developers
Free · no card required
nimbus daemon)nimbus serve) — REST + Pub/Sub gRPCThe 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.