Repository navigation
Releases: carbonmeai/danwo
Releases · carbonmeai/danwo
Release list
v0.1.6
New
- danwo in Simplified Chinese. The README has a Chinese version, and the docs have their
first Chinese pages at /zh-CN/docs: the introduction, the quickstart, why danwo,
what you can test, the fault matrix and apps in other languages. A page that isn't translated
yet shows the English one. - Every missing package at once. Before any test starts,
danwo testanddanwo matrixname
every package your config needs and your project lacks, with one command that adds them all, for
examplenpm install -D yjs y-protocols pg.danwo doctorlists them too. - A page the browser couldn't load is in the run's app log with the browser's reason, such as
net::ERR_CONNECTION_RESET.
Fixed
- A page load that Chromium drops because the machine's network changed, such as when a Docker
container starts during a test, is loaded again, up to twice. A form's POST is never sent twice.
The run's app log notes each reload. - The dashboard's player no longer jumps back into the previous tab's video after a recording
switches tabs. - The Tiptap emulator's message for a project without Yjs gives just the install command,
npm install -D yjs y-protocols.
v0.1.5
Changed
- danwo's own proxy. The proxy that routes your app's calls and injects faults is now danwo's
own code, with no dependencies. A web project installs 54 packages and 71 MB, down from 249
packages and 123 MB, andnpm auditfinds nothing. The basic-ftp advisory is gone with it. - Yjs only for Tiptap.
yjsandy-protocolsare optional now, and only the Tiptap emulator
loads them. An app that uses Tiptap's collaboration has them already; one that doesn't is told
npm install -D yjs y-protocols. See Tiptap. - The proxy prints nothing when a connection drops. Set
DANWO_DEBUG=proxyto see each call it
handles and why one failed.
New
- HTTP/2 and gRPC. Clients that speak only HTTP/2 now go through danwo's proxy. That covers
gRPC: Google Cloud's client libraries such as Firestore and Pub/Sub, Temporal, and your own gRPC
services. Streams flow both ways as they arrive, and trailers such asgrpc-statusreach your
app. Plain-text gRPC works too. - Browsers and SDKs that offer both HTTP/1.1 and HTTP/2 still get HTTP/1.1, so nothing changes
for them. - A fault on an HTTP/2 call hits that one stream. A
resetresets the stream, and the other
calls on the same connection carry on. - An emulator can stream a gRPC call both ways, and send its
grpc-statusonce its stream ends
withwithTrailers. - If a real server closes a connection just as a call goes out, the proxy sends the call again on
a fresh one. - gRPC apps in Python, Ruby and PHP trust danwo's CA with no change: danwo sets
GRPC_DEFAULT_SSL_ROOTS_FILE_PATH. See Apps in other languages.
Fixed
- Bachs' emulator works with
@bachs/sdk2.0, includinglistAll()paging through products and
payments. - Flutterwave's fidelity check matches its live bank list again.
- Bachs' emulator settles a payment even when its timer fires a moment early, so the payment's
webhook is never lost on a busy machine. - A call to an app on a
*.localhostname is checked for a listener at the address it's dialled
at, so it works where no resolver knows the name. - danwo's CA can sign only the certificates it serves, never another CA.
v0.1.4
Changed
- A smaller install.
@danwo/cliinstalls 112 MB for a web project instead of 189 MB. The
mobile driver, the MCP server and the recorder are now optional packages, and the fault matrix no
longer depends oneffect. danwo initadds what you pick. It adds@danwo/mobilefor a mobile project, and
@danwo/mcpwith@danwo/recorderwhen it sets up coding agents. Install them at the same
version as@danwo/cli, and upgrade them together. See Quickstart.
New
- A command that needs an optional package you haven't installed stops with
PACKAGE_MISSING
(exit 2) and the exact install command, e.g.
danwo build-ios needs @danwo/mobile: npm install -D @danwo/mobile@0.1.4. danwo doctorlists the optional packages: which are installed, what each enables, and the
install command for any your project needs. It warns when one is at another version than the CLI.
Fixed
- A config that imports
@danwo/mobilewithout it installed says how to add it, instead of
failing with "Cannot find package". - Clerk's emulator no longer lets a signed-in browser look signed out a second later, while a
test's clock stands still. - Each published package ships a NOTICE that covers only its own code under Apache-2.0, so
scanners no longer flag the packages as non-permissive.
v0.1.3
New
- Apps in any language. Every app now gets
SSL_CERT_FILE,REQUESTS_CA_BUNDLEand
CURL_CA_BUNDLEpointing at danwo's CA and the public roots, so a Go, Python or other app trusts
danwo's proxy. See Other languages. - Two new examples.
with-pythonis a SvelteKit site on a FastAPI API that survives a 54-fault
matrix;with-gois a Vue 3 app on a Go API that survives 44. See
Examples. matrix.pageCallsalso faults a page's ownfetch()calls to your app: a 500, a dropped
connection, a lost answer after a write. Off by default. See
Fault kinds.- An app that runs no Node gets a clear note that danwo's start-up routing check can't cover it.
Fixed
- The proxy no longer refuses a call to an app on this machine as a "passthrough loop" on Linux.
NO_PROXYno longer lists an address Python's httpx can't parse, which stopped httpx clients,
and the Stripe and OpenAI SDKs with them, from starting.- A call held by a delay fault is dropped when its trial ends, instead of landing in the next one.
freePort()picks ports the system never hands out, and never gives two workers the same one.- Clerk's emulator retries ClerkJS from the CDN, pins a range like
@1to its exact version, names
a script it can't fetch, and fetches the right URL on Windows. - Stripe's subscription-mode Checkout pays with the card typed on its page, and a declined card
starts nothing. - An app's clock takes a new offset even when a watch event lands mid-write.
v0.1.2
New
- Several suites in one repository report apart on GitHub. Name each with
namein its
config or--name; it gets its own check run, pull request comment section, summary and
artifact. See CI. expect(screen).toHaveURL()waits for the page's address, andapp.url()reads it.browser.contextOptions.permissionsgrants browser permissions, andapp.clipboard()reads
what a page copied (Chromium).freePort()in@danwo/sdkpicks a port for an app each worker starts.appEnvironment({ app, proxy: false })starts an app without danwo's proxy.danwo test --no-cikeeps local defaults whenCIis set, for a run started from inside
another.danwo doctorchecks the device toolchain for a mobile config: Xcode and an iOS runtime, or the
Android SDK, adb, the emulator and a JDK, and Flutter for a Flutter project.- The order files and tests run in is now a documented guarantee.
- The Slack emulator handles app uninstalls, modal answers, leave events, channel privacy and
Slack Connect.
Fixed
- A step's screenshot is no longer lost when the next step navigates.
- A click that closes its own page, such as a popup's Close button, counts as done instead of
failing as the page goes. - A check whose locator matches several elements fails at once as a test issue, and says how to
narrow it, instead of waiting out its timeout as an app bug. - Two workers building the same mobile app on a first run no longer collide: one builds, the
others wait and reuse it. - The GitHub emulator answers the way the live API does, now checked by a fidelity suite that runs
as a GitHub App. - Mail HTML, S3 hosts, form keys and Windows arguments are read in time linear in their length.
danwo matrix --plansays "1 trial on 1 worker".- The agent guides call
startApp(app, env)as@danwo/sdkexports it.
v0.1.1
The first release published from GitHub Actions through npm trusted publishing. Every package now
carries a provenance statement that links it to the commit and the workflow run that built it.
- The coding agents guide no longer calls Windows support a work in progress.
danwo runs web tests on Windows; mobile tests need macOS or Linux.
danwo 0.1.0
The first release. Install with npx @danwo/cli init; the quickstart takes it from there.
What's in it
- Web tests in Chromium, Firefox and WebKit, with locators,
expectand visual comparison. See Web. - Agent steps that replay with no model after the first run. See Agent steps.
- Mobile tests on the iOS Simulator and Android emulators, or a remote device over adb. Expo, React Native, SwiftUI, Compose and Flutter apps.
- 22 emulated providers, among them Stripe, Clerk, Resend, S3, Twilio and the model APIs. See Providers.
- Invariants checked after every test, and a fault matrix that reruns a test under provider and database faults.
- Real stacks: several apps, background jobs and Postgres behind one proxy.
- Flight records and a dashboard for every run.
- CI: GitHub checks and a pull request comment. Runs on macOS, Linux and Windows, on Node 22.22.3+ or 24.11.1+.
- Models: any AI SDK model, the AI Gateway, OpenRouter, a local server, or a ChatGPT plan through the Codex CLI. See Use a subscription.
- Coding agents: a skill and an MCP server for Claude Code, Cursor, Codex and Copilot.
Coming from another tool
Playwright, Cypress and Detox each have a migration guide.