Your tests stay Playwright, Selenium and pytest. We don't replace them. We make them enterprise-ready, and you own everything: code, evidence and history.
You own your code · You own your evidence
The QA studio that runs on your own machines.
Write, record or import tests and run them on three browsers and real Android phones. Each run ends in one of 14 verdicts, and each failure keeps its report, logs and screenshot as evidence you can seal.
Repair line 19TimeoutError: locator.click: Timeout 30000ms exceeded.The Nexus Recorder opens and replays this test up to this line. Then do the click: what you record replaces this line. The rest of the file is not touched, and the current version stays in the Timeline.or swap the selector: strongest first, XPath lastgetByRole('link', { name: 'Learn more' })Lands in the editor as an unsaved edit.Re-record from hereCancel
20
21 // ── Step 3: Verify the page ─────────────────────────────────────────────
[13:26:57] TC91 chromium TIMEOUT 1m 17s retry 1 · a step never completed within its time limit
= TC91 matrix 3 browsers · 0 passed · 0 with reserve · 3 failed · FAILED: passed on 0 of 3 · webkit: TIMEOUT, firefox: TIMEOUT, chromium: TIMEOUT
Two runs on 2026-09-30 against example.com, condensed: the times, verdicts and per-browser durations are the runs' own, the pacing between rows is not, and the line-by-line progress is illustrative. Both demo tests are staged. TC90 fails its first WebKit attempt on purpose, so the retry shows. TC91 was written on purpose against the old link text, "More information...", which example.com now reads "Learn more"; each browser tried it twice, about 31 to 33 s per attempt.
Optional: a mini PC of your own
A mini PC costs less than a year of cloud QA.
USD 1,400 to 1,700 less in year one, then about USD 1,700 to 2,000 less each year. Estimate.
BrowserStack Automate2,100
Sauce Labs1,788
Mini PC, year oneabout 410
Windows 11 x64 or Ubuntu 24.04 LTS · 16 GB RAM minimum, 32 GB recommended
16 GB, about USD 340 to 385 · 32 GB, about USD 530 to 610
Your PC is enough.The Studio runs on the Windows 11 PC you already have, and nothing else is required. A mini PC is optional, and recommended for nightly regressions, scheduled runs and phones on USB: a machine that stays on so your workstation does not have to.
A runtime per workspace, Docker included.Each workspace runs its suites on this machine, in Docker on it, or over SSH on a Linux box in the same container image: a mini PC with Ubuntu 24.04 LTS on your network, or a VPS. None is required; switching is one setting.
Your test data stays on your machines.Tests, evidence and history stay on its disk. The only connection to us is the license check.
Always on, off your desk.A dedicated machine for nightly regressions and scheduled runs, without tying up a workstation. Watch runs as its own process, so the schedule keeps going at night and on weekends.
Real Android phones on USB.Plug them into the mini PC and run them beside the three browsers.
Three browsers at once.By the engine's own estimate each needs about 0.5 GB free, plus 1 GB held back: about 2.5 GB of the 16 GB.
Estimate: a mini PC of about USD 350 plus about USD 60 a year of power, against one year of a cloud subscription with one parallel session. Your Nexus Studio plan, priced per machine and never per test, applies either way and is not in the figure; neither is your time looking after the box. Prices read on 2026-09-30: BrowserStack Automate, Desktop & Mobile, USD 175 a month billed annually, USD 2,100 a year, its entry option (browserstack.com/pricing). Sauce Labs Virtual Device Cloud, USD 149 a month billed annually (USD 199 month to month), 1 parallel test, USD 1,788 a year (saucelabs.com/pricing). Mini PC prices read on 2026-10-06, retail, x86-64 with a 500 GB SSD or more: about USD 340 to 385 with 16 GB of RAM, about USD 530 to 610 with 32 GB, the size we recommend. Power, USD 5 a month, an example.
Not pass or fail. Fourteen answers to “what happened?”
Most test runners paint the same red for a slow network, a dead browser and a real defect. Someone loses a morning finding out which. Here a TIMEOUT is not proof the app is broken, a BLOCKED is the site defending itself, a CRASHED is the runner. Each one sends you somewhere different, so each one has its own name and its own color, the same ones the Studio paints.
78 runs from one real workspace, 2026-09-27 to 09-29: 20 runs.json files across chromium, firefox, webkit, Selenium, an Android phone and two API suites. Pass or fail would have painted eight of them the same red; here only six say the app broke. The line beside each name says its group without the color: solid for a pass, dashed for a pass with a reservation, double for a failure, dotted for no verdict.
Passed
SECURE67passed on its own
CHAOS_RESILIENT0passed while chaos was injected
Passed, with a reservation
AUTO_RECOVER0passed, but a selector had to be repaired
FLAKY3failed, then a retry passed it; nothing was fixed
PERFORMANCE_DEGRADED0assertions passed, the page was too slow
A11Y_VIOLATION0assertions passed, accessibility did not
SECURITY_VIOLATION0assertions passed, a security check did not
The application broke
BREACHED6a real finding
BREACHED_FLAKY0failed, and the failure itself is inconsistent
CHAOS_BREACHED0broke under injected chaos
No verdict: the environment or the harness
TIMEOUT2never answered in time, which is not proof it is broken
UNREACHABLE0the host could not be reached at all
BLOCKED0the site defended itself with a 403, a 429 or a bot challenge
CRASHED0the browser or the process died
A stopped, empty or broken test is never counted as a result, and a broken one tells you the exact error and line.
Evidence
A failed test leaves its proof behind.
Each failed run files a forensic report, its metadata, the telemetry and the raw log, plus a screenshot of the frame where it failed. A real failure keeps the video of the run as well: BREACHED, BREACHED_FLAKY and CHAOS_BREACHED by default, TIMEOUT and BLOCKED when you turn them on in Settings.
What one failure files
TC91 on chromium, 2026-09-30 13:26 TIMEOUT
The real folder of the run replayed at the top of this page, as the Evidence Locker opens it: bug-reports/chromium/TC91 - Example more info/2026-09-30_13-26 [TIMEOUT].
https://example.com/
screenshot.png · 12.6 kB · the exact frame at the moment of failure
metadata.json2.3 kB32 fields, among them the selector, the 30000ms timeout, stability CRITICAL, consecutive failures, attempt 2 of 2, stealth and the lazy-loading score (100, A).
raw-data.json4.2 kBThe raw log: console lines, network errors, security issues (here 2: missing CSP), JS errors and performance metrics.
Telemetryin the reportLCP 156 ms · FCP 156 ms · CLS 0.0018 · TTFB 122 ms · TBT 0 ms · 808 DOM nodes · 2 MB heap. INP not measured: nothing to time.
video.webmreal failuresRecorded for a real failure. A TIMEOUT like this one keeps none, because TIMEOUT is off by default, and the report says so.
AI analysisyour AIWith your AI connected, it adds a diagnosis, the probable cause, the impact and a recommended action to the report; through your own AI command-line tool it also classifies the failure.
What a QA team runs, on the machines it already has.
Three browsers and real Android phones
Chromium, Firefox and WebKit, plus real Android phones on USB with their screen mirrored on yours. Desktop + real Android device runs the PC and the phone at once and files the evidence per identity. iPhone and iPad run as emulated profiles on WebKit, not on physical Apple devices.
chromiumfirefoxwebkitdevice-android-phone
Evidence you can seal
Every file of a record is hashed and chained to the one before. Verify names the first record that changed; with no ledger it says UNVERIFIED, never a silent OK.
14 verdicts and an honest retry
A retry that passes is FLAKY, not SECURE. A chaos run where no fault landed is never called resilient.
Chaos and load, from the browser to the container
A slow network, an offline blackout or a throttled CPU injected into the browser. A registered Docker container paused, stopped, killed or restarted while the recovery is measured. Load with latency percentiles and Web Vitals sampled on a real page under that load.
Smart Monkey DAST
An autonomous scanner for targets you are authorized to test. SSRF, command injection and blind XSS count only when a callback reaches a listener on your own machine. Findings export as SARIF, each with a replay script.
AI on your terms
The AI writer uses the AI command-line tool you already have (Claude Code, Codex or opencode), the one you are already signed into, so there is no API key to paste; your plan with that tool still applies. Or a model: local Ollama by default, Anthropic or OpenAI when you choose. A test it writes passes the Vet, can rehearse as a draft, and is saved only when you accept it.
Moving a suite into a proprietary low-code format is a risk many teams will not take. Nexus Studio keeps the code standard and builds the platform around it, on your machine.
What teams already use.
Playwright, Selenium and pytest are open-source frameworks that many teams already use. Nexus Studio runs them. It does not replace them.
What your team is adapted to.
Your engineers and testers read a test from the Recorder the way they read their own: a page, a locator, an assertion. There is no new language and no proprietary test format.
Talent you can hire.
You can hire for Playwright, Selenium or pytest, not for a vendor's tool. A new hire who knows the framework can read and change your tests without learning Nexus Studio first.
Documentation and an ecosystem.
Each framework has public documentation, an issue tracker, and answers and libraries from its community. All of it applies to your tests as they are.
Nothing to retrain.
The team keeps its language, its locators and its habits. What changes is around the test: verdicts, evidence and scheduling. The Test Adapter brings in the tests you already have.
Code your team reviews.
The Recorder and the AI writer produce ordinary test files in your workspace folder, and your team reviews them like any other code. The Vet, a deterministic check, reads AI-written code, and nothing is saved until you accept it.
Leave whenever you want.
Tests, evidence and history are files in your workspace. Python tests run under plain pytest as they are, and a Playwright JavaScript test runs without Nexus once its import points at @playwright/test. Selenium JavaScript tests need a few lines to start a driver, and API tests use the Studio's own format, so another runner would need them rewritten.
Standard underneath
The Nexus Recorder and the AI writer write Playwright (JavaScript, TypeScript, Python, C#) and Selenium (JavaScript, Python, Java, C#) that your team can read, edit and review.
The Test Adapter brings in the tests you already have and checks that every assertion survives.
Python tests run under plain pytest, with or without the Studio.
A Playwright JavaScript test is tied to Nexus by its fixture import. Point it at @playwright/test and the file runs without Nexus.
The platform on top
One of 14 verdicts per test and engine, and a retry that says FLAKY instead of passing quietly.
Chromium, Firefox and WebKit, one after another by default or up to three at once, and real Android phones in the same run.
Evidence filed per identity, sealed in a SHA-256 chain, and a history of every run.
Candidate selectors ready when a locator breaks, and Repair line to swap one in.
Your own tests under injected chaos, with load and security scans in the same Studio.
Writing a test is the cheap part. Keeping it alive is not.
Selectors break, tests flake and evidence piles up. Each has its own tool in the Studio, built on your own history and your own files.
Risk ranking and flakiness predictor
History ranks each test on each identity by how often it flips, breaks or costs time. A logistic regression over your own runs adds a risk score, with an EWMA fallback when data is thin, and says how sure it is: one run reads as low confidence.
Locator health
Lists the weak and medium locators of the test you have open, one at a time, with the line and the reason, before they break. It reads the editor's buffer, so unsaved edits count.
Repair line
When a step fails, stronger candidates are ready, strongest first and XPath last. Pick one and it replaces the selector in the editor in one click, as an unsaved edit; the earlier version stays in the Timeline. Or re-record from that line.
Retain evidence
A pass keeps a screenshot and its metadata, 5 by default. A failure keeps its report, metadata, raw log and screenshot, and a real failure its video (you choose which verdicts in Settings), 20 runs per test by default. Older files go on their own, within the caps you set under Evidence & Retention, and all evidence together stays under one budget, 20 GB by default. Every default, on the evidence page
Estimate
Put in your own numbers. Read the hours.
We have not measured a saving on your suite, so we do not quote one. Enter how your team spends its time today and what you expect with the Studio, and the arithmetic is done below.
Example values, edit them. The minutes are our assumptions, not measurements.
By hand h a month
With the Studio h a month
Reduction%
An estimate from your numbers, not a measurement.
How it adds up: for each of the three kinds of work, how many a week times the minutes each, summed, times 52 weeks over 12 months, divided by 60. The reduction is one minus the Studio hours over the by-hand hours. It counts these three kinds of work only: not writing tests, and not waiting for runs to finish.
The problems it was built for.
Pick one to see what the Studio does about it, and on which screen.
A flaky test gets filed as a real bug.
A failure that passes on retry is FLAKY, not a bug, and files nothing. With Jira or Azure Boards switched on, a failed run opens one issue per test, TIMEOUT included; a repeat failure comments on it and a clean pass closes it. BLOCKED, UNREACHABLE and CRASHED never do, and neither does a test that could not start, which is not a result at all.
Patrol, Evidence Locker
The site blocks the bot, and the report says the app failed.
A 403, a 429 or a challenge page from Cloudflare, reCAPTCHA or hCaptcha reads BLOCKED: an environment verdict that never files a ticket. Automation signals are hidden by default.
Evidence Locker, Settings
Selectors break with every UI change.
When a step fails, stronger candidates are ready and Repair line swaps one in, strongest first and XPath last. Locator health flags weak ones before they break.
Patrol
Evidence lives in loose screenshots and chat threads.
Each failed run files its report, metadata, screenshot and raw log in one place, a real failure keeps its video too (you choose which verdicts in Settings), and a SHA-256 chain shows nothing changed afterwards.
Evidence Locker
Triage takes all morning.
The forensic report puts the failure, the telemetry and the page errors together, and the AI you choose can add an analysis. Real bug or False alarm takes one reason.
Evidence Locker, AI Providers
Three browsers and two Android phones mean five runs.
One Patrol run covers Chromium, Firefox and WebKit, one after another by default or up to three at once, plus real Android phones, with one verdict per engine.
Patrol, Devices & Mobile
Security gets tested at the end, if at all.
Smart Monkey scans an authorized target for XSS, SQL injection, SSRF and more, confirms blind findings on a listener on your own machine, and exports SARIF.
Security
Nobody knows if the app survives an outage.
Chaos Lab slows the network, cuts it or throttles the CPU mid-test, and pauses or kills a Docker container while it measures the recovery.
Chaos Lab
Performance regressions ship unnoticed.
Web Vitals are on by default and judged against budgets. Load adds p95 and p99 latency and samples a real page while the load runs.
Load, History
Migrating the suite feels too risky.
There is no proprietary format to migrate into or out of: the Recorder, the AI writer and the Test Adapter all produce Playwright, Selenium or pytest code.
Test Adapter, Nexus Recorder, AI writer
QA data sits on someone else's servers.
The Studio runs on your Windows 11 PC or mini PC. From it, the engine runs the suites on that machine, in Docker on it, or over SSH on another machine on your network or VPN. The license check sends a machine hash, a nonce, a token and the machine's host name, OS and Studio version, never test data.
One studio, from the first test to the release call.
Six places a QA lead works in every day. Each frame is drawn from the Studio's own labels and a real workspace. The Studio tour covers every screen.
The Nexus Recorder writes Playwright or Selenium code as you click, with no AI in the loop. The AI writer uses the AI tool you already have, and the Test Adapter brings in the tests your team wrote. A deterministic review, the Vet, reads all three, and holds AI-written code to the strictest bar.
Test casesRun patrolNexus RecorderAI writerTest Adapter
Record a test
url to recordhttps://example.com/
record forDesktopMobile emulatedReal Android device
enginechromiumfirefoxwebkit
languageJavaScriptTypeScriptPython
VetWARN0 blocked · 1 warningline 16 · V7 · "form": matches ALL <form> on the page…
Pick the target and the engines, and Patrol runs them one after another, or up to three at once. New tests rehearse in the sandbox first, where a run never counts in history.
Test casesRun patrolNexus RecorderAI writerTest Adapter
Target
Desktop matrixMobile emulatedReal Android deviceDesktop + real Android device
browserschromiumfirefoxwebkit
parallel123
headedvisuala11ysecurityno retryno stealth
Run patrol for real (1 TCs)
Watch keeps re-running a selection on a timer and alerts on Telegram or Slack only when a state changes. It runs as its own process, so closing the Studio does not stop it. For pipelines, the CI/CD screen writes the GitHub Actions or GitLab CI file for you.
Watch
re-runs the selection · alerts only when a state changes
Each failure is filed where you can read it: the forensic report, the metadata, the telemetry, the raw log and, when your AI answers, its analysis: the settings the Studio ships with switch it on. Triage asks for a reason, and a Real bug or False alarm verdict joins the chain of custody.
Chaos Lab injects faults into the browser, or pauses and kills a registered Docker container while it measures the recovery. Load reports percentiles and Web Vitals under load. Smart Monkey scans targets you are authorized to test.
Chaos Lab
Offno chaos
Network (≈3G)adds latency per request
Offline blackoutfull network cut for a window
CPU throttle 4xChromium only, skipped elsewhere, with a warning
History keeps each test on each identity, run after run. The flakiness predictor scores the risk from that same history, and says how sure it is. The Executive Report turns it into a release call: go, caution or no-go.
Identity matrixclean passes / runs · 2026-09-27 to 09-29
You record and supervise. Nexus Studio does the paperwork.
Click through your app in a real browser, point at what must be true, and watch every selector get graded before it reaches the file. On every real run, the Studio keeps the screenshot and the verdict for you, and a failure keeps its logs too.
Open the Recorder.
Pick a URL, desktop, emulated mobile or a real Android phone, and the kind of test to write. The test ID is reserved for you.
Record a test · Start recording
Record with your own clicks.
A real browser opens. Every click is written as code, live, in a panel next to it.
Recording · Undo · Save & close
Add your own assertions.
Arm an assertion, then click the element. The expected value is read from the page, never typed.
Assert visible · Assert text · Assert value
See every selector graded.
Each step shows how strong its selector is, how many elements it matches right now, and why. Fixed rules grade it, not an AI.
ROBUSTMEDIUMFRAGILE1 match
Prove it in the sandbox.
Recording saved offers Run in sandbox, headed. After three sandbox runs, which write nothing to evidence, you press the first real run. API recordings have no sandbox: they run for real on the first press.
Ready for their first real run · Run…
The Studio does the rest.
Every real run keeps a screenshot, a classified verdict with an honest retry, and a History row. A failure adds the report and the console and network errors; a real failure keeps its video; you choose which verdicts in Settings. Nothing is captured while you record.
Run patrol streams the console with a live status per test; tick headed to watch it. Locator health lists weak selectors, and Repair line swaps one in.
Run patrol · headed · Locator health
What customers say
What makes Nexus Studio different
It runs where your app runs.
The Studio runs on your Windows 11 PC or mini PC. Its engine runs the suites there, in Docker on that machine, or over SSH on another machine on your network or VPN. Tests, evidence and history stay on those disks.
A verdict, not a color.
Fourteen names separate a slow network, a bot challenge and a dead browser from a real defect, and Jira hears about failures and timeouts, never about a blocked site or a dead browser.
No silent green.
A retry that passes is FLAKY. A chaos run with no fault injected is NOT_INJECTED. Self-healing proposes a fix and leaves the run red until you choose.
Evidence that can be checked.
Every file of a record is hashed and chained. Verify names the first record that changed, instead of asking you to trust a dashboard.
AI you choose, checked by rules.
Your own AI tool or a local model writes. A deterministic Vet checks the test, a draft run can rehearse it, and nothing is saved until you accept it. The Recorder uses no AI at all.
Active tests ask first.
Load, security scans and infrastructure chaos start only after an explicit authorization, and that authorization is recorded beside the evidence.
localhost
Test your app where it runs: on localhost.
BASE_URL points the suite at your app on localhost or on a private staging URL, as it is. There is no tunnel to open and no staging URL to expose to a cloud QA vendor.
This machine
Your appnpm run devlocalhost · started before the run, stopped after it
Nexus enginestarts it · waits until it answers · tests · stops it
Nexus Studioserves only on 127.0.0.1
Chromium · Firefox · WebKitand an Android phone on USB
Cloud QA vendorno tunnel · no exposed staging URL
A dev server left running after the tests.
NEXUS_APP_START starts your app before every run and stops it with its whole process tree when the run ends, fails or is interrupted, Ctrl+C included.
A green run against an app that never started.
The run waits until the ready URL answers, any status below 500, asked every 0.5 s. If the app cannot start, the run never starts: CONFIG_ERROR APP_DID_NOT_START, with its last 40 log lines.
A second copy of an app that is already up.
NEXUS_APP_REUSE=true uses an app that already answers and leaves it running; false stops the run if something else answers there.
A result nobody can tie to a build.
Each run records your app's package.json version and the git commit it tested.
Docker and SSH.
In Docker the app still runs on this machine and the container reaches a localhost BASE_URL as host.docker.internal. Over SSH it starts on the remote host.
One program and its arguments, no shell: npm run dev, pnpm dev or node server.js. nexus app check, Test it in the Studio, starts it, waits and stops it. The whole log stays in evidence/run-context/.
Your tests and evidence leave your machines only when you send them yourself, for example to an AI provider you connect.
On its own, Nexus Studio makes one connection, carrying zero test data: a license check. The key goes out once, to activate; each later check sends a machine hash, a nonce, a token and the machine's host name, OS and Studio version.
What goes out. Activation sends your license key, a machine hash (a SHA-256 derived from your machine's ID, never the ID itself) and a random nonce. Renewal, at start-up and every 24 hours, sends the machine hash, a new nonce and the token the activation returned. Both also send the machine's host name, OS and Studio version, only to label the machine in your account.
How long it can be offline. The license must validate at least every 7 days, with 4 days of grace. After that the Studio turns read-only: your evidence stays readable, new runs wait for a connection.
Who sees it. The license servers run on Cloudflare, which sees the IP address of each check. We never receive your test data. We keep your email, billing status and license records.
What you switch on. Jira, Xray, Azure DevOps, Slack, Telegram or a cloud AI talk to those services straight from your machine, never through us, and only if you configure them. A missing browser build is downloaded from its publisher; nothing of yours goes with it.
Own your infrastructure: where the evidence lives on your PC, a mini PC, Docker or a rented server, and what each one costs.
Getting started
Your first 7 minutes.
From the trial to a scheduled run, in the order the Studio puts them. How long each step takes depends on your machine and your app.
Start the trial and install.
Start the 30-day trial in your account, download the Windows installer and paste your key to activate. Then open a workspace folder: Setup installs its packages and browsers once.
Download for Windows · Activate · New folder
Record your first test.
Open the Nexus Recorder, pick a URL and click through your app in a real browser. Every click is written as Playwright or Selenium code, with no AI in the loop.
Nexus Recorder · Record a test · Start recording
Rehearse it in the sandbox.
A new test starts in the sandbox, where a run writes nothing to evidence or history. After three rehearsals it is ready for its first real run. API recordings have no sandbox.
Run in sandbox · Waiting to leave the sandbox
First real run.
Run it on Chromium, Firefox and WebKit, and on a real Android phone if one is plugged in. A real run keeps a screenshot, a verdict and a History row.
Ready for their first real run · Run…
Read the verdict.
Each engine gets one of 14 verdicts. A pass, a pass with a reservation, a broken application and an environment problem are told apart. A TIMEOUT is not proof the app is broken.
Patrol · SECURE · FLAKY · TIMEOUT
Open the evidence.
A failed run is filed in the Evidence Locker with its report, metadata, telemetry, raw log and screenshot. Mark it Real bug or False alarm, and the verdict joins the chain of custody.
Watch re-runs a selection on a timer and alerts only when a state changes, even with the Studio closed. For a pipeline, the CI/CD screen writes the GitHub Actions or GitLab CI file.
In plain words: Nexus Studio is a Windows app that runs the automated tests you already write in Playwright, Selenium or pytest, and tells you, in one of 14 clear verdicts, whether a failure is a real bug, a flaky test or just a slow network. It keeps proof of every failure and runs on your own computer, with a 30-day free trial and no card needed.
Priced per machine. Every feature on every plan.
Individual is $79 a month for 1 machine, Team $199 a month for 3 and Business $599 a month for 10, with 2 months free when you pay for a year. Enterprise is quoted. No charge per user or per test, and a 30-day trial with no card.
Launch offer: once the 40 Founding Customer seats are filled, yearly plans get 30% off the first year, through December 31, 2026.