New from the DevTools team: Stresseur, the AI test engineer for APIs →
DevTools

Changelog

Product updates, new features, and improvements to Dev Tools.

cli@1.2.2

cli@1.2.2
View on GitHub

1.2.2 (2026-10-07)

🩹 Fixes

  • The CLI no longer prints "Config file not found, creating default config file" or writes a default ~/.devtools.yaml on first run; a config file is still read when present. (1dff1083)

cli@1.2.1

cli@1.2.1
View on GitHub

1.2.1 (2026-10-07)

🩹 Fixes

  • The CLI can be embedded in another Go program: cmd.Root() returns its root command, and each release publishes devtools-go-src-<version>.tar.gz, the Go source of the CLI and the modules it imports with the generated code included, to build against. (03382c8b)

cli@1.2.0

cli@1.2.0
View on GitHub

1.2.0 (2026-10-07)

🚀 Features

  • Flows can now declare cleanup: steps that always run after the flow's normal steps, whether they passed or failed, so data a test creates is deleted even when a step in the middle fails and the next run starts from the same state. Cleanup steps are request or graphql steps that can read earlier outputs ({{ PostProducts.response.body.id }}); they run in listed order (depends_on may reorder them among themselves), a step that reads a step which never ran is reported as skipped, and a failing cleanup step fails an otherwise passing flow while an earlier failure stays the reported error. Cleanup steps appear after the normal steps in the console table and in JSON and JUnit reports, and run after every iteration in load runs without being measured. (f204ce9e)
  • Flows can read the cookies they've received: {{ cookies.csrftoken }}, or {{ cookies["XSRF-TOKEN"] }} for names that aren't identifiers. This makes double-submit CSRF protection (Django, Laravel, Angular, many Express apps) testable: copy the CSRF cookie into the header the server checks. Values are URL-decoded the way client code reads them, the latest value of each cookie wins, and a flow variable named cookies takes precedence. (60054c5f)

cli@1.1.3

cli@1.1.3
View on GitHub

1.1.3 (2026-10-07)

🩹 Fixes

  • A failing assertion now prints one line that shows what the server answered: Error: assertion failed: response.status == 200 (got 401: {"error":"Invalid credentials"}). Non-2xx responses include a short body excerpt; 2xx bodies are left out because they can carry tokens. The flag reference no longer prints under a failing flow, and the error no longer repeats four times. (c8520dd6)

cli@1.1.2

cli@1.1.2
View on GitHub

1.1.2 (2026-10-07)

🩹 Fixes

  • Load runs now work for flows whose steps use an earlier step's response, such as a login token passed to the next request. Lean mode used to drop every response body, so those steps failed on every iteration and the run reported the target as unreachable. Bodies a later step reads are now kept; the rest are still dropped to keep memory flat. (83a2a5b4)
  • Assertions and conditions can now compare numbers from JSON responses: response.body.qty == 3, response.body.price > 100 and arithmetic work. Response numbers used to compare as text, so equality was always false and >/< failed with a type error. Values copied into later requests with {{ }} keep their exact original text, as before. (3cd2d960)

desktop@1.1.3

desktop@1.1.3
View on GitHub

Heads up: on October 13, 2026, DevTools Studio becomes Stresseur Studio. It's the same app with the same flows, and it's still free, open source and local. You don't need to do anything.

Details: https://dev.tools/blog/devtools-studio-becomes-stresseur-studio/

desktop@1.1.2

desktop@1.1.2
View on GitHub

Heads up: on October 13, 2026, DevTools Studio becomes Stresseur Studio. It's the same app with the same flows, and it's still free, open source and local. You don't need to do anything.

Details: https://dev.tools/blog/devtools-studio-becomes-stresseur-studio/

desktop@1.1.1

desktop@1.1.1
View on GitHub

Heads up: on October 13, 2026, DevTools Studio becomes Stresseur Studio. It's the same app with the same flows, and it's still free, open source and local. You don't need to do anything.

Details: https://dev.tools/blog/devtools-studio-becomes-stresseur-studio/

cli@1.1.1

cli@1.1.1
View on GitHub

1.1.1 (2026-08-09)

🩹 Fixes

  • Fix Windows release builds: platform variables now resolve shell-agnostically, so win32-x64 and win32-ia32 binaries build and cross-compile correctly. Republishes all six CLI platform binaries. (ad36e8dc)

desktop@1.1.0

desktop@1.1.0
View on GitHub

Heads up: on October 13, 2026, DevTools Studio becomes Stresseur Studio. It's the same app with the same flows, and it's still free, open source and local. You don't need to do anything.

Details: https://dev.tools/blog/devtools-studio-becomes-stresseur-studio/

---

1.1.0 (2026-08-08)

🚀 Features

  • Load testing foundations: local load mode (flow run --vus/--duration and load: scenarios with percentile tables + load_report JSON), versioned yamlflow schema (version: 2), HTTP assertions in yamlflow files now enforced on import (previously silently dropped), run: blocks execute in dependency order with strict failure modes (failed dependencies skip-and-continue instead of aborting the run), run-flows GitHub Action for CI, and real build-version reporting in devtools version. (9a3152a3)

cli@1.1.0

cli@1.1.0
View on GitHub

1.1.0 (2026-08-08)

🚀 Features

  • Load testing foundations: local load mode (flow run --vus/--duration and load: scenarios with percentile tables + load_report JSON), versioned yamlflow schema (version: 2), HTTP assertions in yamlflow files now enforced on import (previously silently dropped), run: blocks execute in dependency order with strict failure modes (failed dependencies skip-and-continue instead of aborting the run), run-flows GitHub Action for CI, and real build-version reporting in devtools version. (9a3152a3)

desktop@1.0.3

desktop@1.0.3
View on GitHub

1.0.3 (2026-07-05)

🩹 Fixes

  • Windows builds restored. A stale @nx/eslint patch made dependency installation fail hard on Windows CI, so 1.0.2 shipped without Windows (and, due to an expired Apple agreement, macOS) artifacts. The dead patch is removed; this release ships installers for all platforms again. Includes everything from 1.0.2, notably the fix for workspaces going blank after many file reorders (#44).

desktop@1.0.2

desktop@1.0.2
View on GitHub

1.0.2 (2026-07-05)

🩹 Fixes

  • ### Bug fixes (#44)
  • Workspaces no longer go blank after many file reorders. File append/reorder used the midpoint between the last position and float32 MAX to generate display_order, converging to the float32 limit after a few dozen inserts — at which point every file in the workspace disappeared from the UI and new flows could not be created. Order generation now uses fixed steps, and a startup migration repacks existing display_order values to small sequential numbers (preserving your current order), so previously broken workspaces recover automatically. (#44)

cli@1.0.3

cli@1.0.3
View on GitHub

1.0.3 (2026-07-05)

🩹 Fixes

  • Windows binaries restored. A stale @nx/eslint patch made dependency installation fail hard on Windows CI, so 1.0.2 shipped without win32-x64/win32-ia32 binaries. The dead patch is removed; this release ships all platforms again. Includes the file display_order repair migration from 1.0.2 (#44).

cli@1.0.2

cli@1.0.2
View on GitHub

1.0.2 (2026-07-05)

🩹 Fixes

  • ### Bug fixes (#44)
  • Startup migration repairs pathological file ordering. The embedded server now repacks files.display_order values that converged to float32 MAX (a bug in desktop order generation) back to small sequential numbers, preserving relative order. Databases shared with a broken desktop workspace recover automatically. (#44)

desktop@1.0.1

desktop@1.0.1
View on GitHub

1.0.1 (2026-05-05)

🩹 Fixes

  • ### Bug fixes (#42)
  • Loop break condition now sees inner-node outputs. For/ForEach break expressions are evaluated after each iteration's children run, so they can reference values produced during that iteration (e.g. {{ http_1.response.body.done }}). Previously the check ran before children, so any expression referencing a not-yet-written variable failed the entire flow on the first iteration. Missing identifiers are now treated as "don't break" (loops are still bounded by iteration count). ForEach semantics also aligned with For: an expression that evaluates true exits the loop. (#42)
  • YAML imports no longer fail with a foreign-key error. Workspace YAML imports were storing HTTP requests before their parent folder file in StoreUnifiedResults, so SQLite rejected the row with FOREIGN KEY constraint failed (787) whenever GenerateFiles=true. Files are now stored first, and HTTP folder_id references are remapped before insertion.
  • Imported workspaces show up in the UI immediately. The import path now publishes mutation events for newly created flows, flow nodes, per-type node configs (For, ForEach, JS, Condition, AI), edges, flow variables, and HTTP requests, so the desktop's TanStack DB collections refresh in real time instead of waiting for a manual reload. Previously, imported For nodes appeared with Iterations: 0 and an empty break expression until you closed and reopened the workspace.

Other

  • New break_condition field on for / for_each steps in YAML workspaces, mirroring the desktop UI's "Break If" setting.

cli@1.0.1

cli@1.0.1
View on GitHub

1.0.1 (2026-05-05)

🩹 Fixes

  • ### Bug fixes (#42)
  • Loop break condition now sees inner-node outputs. For/ForEach break expressions are evaluated after each iteration's children run, so they can reference values produced during that iteration (e.g. {{ http_1.response.body.done }}). Previously the check ran before children, so any expression referencing a not-yet-written variable failed the entire flow on the first iteration. Missing identifiers are now treated as "don't break" (loops are still bounded by iteration count). ForEach semantics also aligned with For: an expression that evaluates true exits the loop. (#42)

Other

  • New break_condition field on for / for_each steps in YAML workspaces, so loops in CLI-driven flows can exit on a runtime predicate without needing the UI.

desktop@1.0.0

desktop@1.0.0
View on GitHub

# 1.0.0 (2026-04-24)

🚀 Features

New protocols and flow nodes

  • GraphQL requests: full request editor with query/variables, dark theme tokens, CLI support, YAML export/import, response history, and delta overrides with assertions.
  • WebSocket: connection and send flow nodes, request panel, and tables for persisting messages and headers.
  • Wait node: pause flow execution for a configurable duration.
  • Sub-flow: new Run Sub Flow node plus SubFlowTrigger and SubFlowReturn, enabling flows to invoke other flows with typed inputs/outputs.

Flow engine

  • Flow runner overhaul with improved node execution and error propagation.
  • Flow-level error field and node ID mapping for more precise failure attribution.
  • Copy/paste support extended to GraphQL, WebSocket, and sub-flow nodes.

Expression editor

  • Autocomplete for built-in functions inside {{ }}: uuid(), uuid("v4"), uuid("v7"), ulid(), now().
  • Dot-chain completion on now(): .Unix(), .UnixMilli(), .UnixMicro(), .UnixNano().
  • New faker namespace for fake data — type faker. to browse 35 generators including name(), email(), phoneNumber(), url(), ipv4(), ipv6(), macAddress(), username(), password(), word(), sentence(), paragraph(), date(), timestamp(), uuid(), randomInt(min, max).

Delta system

  • GraphQL delta support with snapshot/override semantics for name, URL, query, variables, description, headers, and assertions.

cli@1.0.0

cli@1.0.0
View on GitHub

# 1.0.0 (2026-04-24)

🚀 Features

New protocols and flow nodes

  • GraphQL requests: query/variables, assertions, response history, YAML export/import.
  • WebSocket: connection and send flow nodes with message capture.
  • Wait node: pause flow execution for a configurable duration.
  • Sub-flow: Run Sub Flow node plus Sub-Flow Trigger and Sub-Flow Return for composing flows.

Flow engine

  • Flow runner overhaul with improved node execution and error propagation.
  • Flow-level error field and node ID mapping for more precise failure attribution.

Expression editor

  • Built-in uuid(), uuid("v4"), uuid("v7"), ulid(), now() helpers inside {{ }}.
  • Dot-chain on now(): .Unix(), .UnixMilli(), .UnixMicro(), .UnixNano().
  • faker.* namespace (35 generators — name(), email(), phoneNumber(), url(), ipv4(), word(), sentence(), paragraph(), date(), timestamp(), uuid(), randomInt(min, max), ...) for fake test data.

AI

  • AI agent with tool execution, streaming, and multi-provider support (OpenAI, Anthropic, Gemini), credential vault encryption, and variable introspection.

desktop@0.5.0

desktop@0.5.0
View on GitHub

0.5.0 (2026-03-04)

🚀 Features

  • Add flow node copy/paste and canvas undo/redo support. (28f2da05)

desktop@0.4.0

desktop@0.4.0
View on GitHub

0.4.0 (2026-03-03)

🚀 Features

  • Add AI agent feature with tool execution, streaming, and provider settings. Add flow error display, fix version history ordering, and fix execution state display on flow versions. (156c82ca)

desktop@0.3.2

desktop@0.3.2
View on GitHub

0.3.2 (2026-03-03)

🩹 Fixes

  • Fix startup reliability and data migration for upgrading users. Migrate database from old data directories (DevTools, DevTools Studio). Catch protocol handler errors during server startup. Cap health check retry backoff. Add branded loading screen and error recovery UI. Fix migration FK reference to prevent folder hierarchy flattening. Make telemetry non-blocking. (a7de9ad6)

desktop@0.3.1

desktop@0.3.1
View on GitHub

0.3.1 (2026-03-02)

🩹 Fixes

  • Fix CodeMirror crash caused by duplicate @codemirror/state instances. Fix server lint by broadening dbtest build tag and removing dead code. (05ca2a7a)

desktop@0.3.0

desktop@0.3.0
View on GitHub

0.3.0 (2026-02-26)

🚀 Features

🩹 Fixes

  • Fix AI node export and credential env var name sanitization (36fd3671)
  • Optimise package size (0da13cbe)

cli@0.2.2

cli@0.2.2
View on GitHub

0.2.2 (2026-02-26)

🩹 Fixes

  • Fix AI node export and credential env var name sanitization (36fd3671)

desktop@0.2.3

desktop@0.2.3
View on GitHub

0.2.3 (2026-02-10)

🩹 Fixes

  • Version snapshots with is_snapshot column and deterministic test sync (e6c2b883)
  • Add uuid() and ulid() built-in expression functions with v4/v7 support (ecfa35df)

desktop@0.2.2

desktop@0.2.2
View on GitHub

0.2.2 (2026-02-09)

🩹 Fixes

  • Version snapshots with is_snapshot column and deterministic test sync (e6c2b883)

🧱 Updated Dependencies

  • Updated cli to 0.2.1

desktop@0.2.1

desktop@0.2.1
View on GitHub

0.2.1 (2026-02-09)

🩹 Fixes

  • Fix auto-update not working correctly (764e4384)

cli@0.2.1

cli@0.2.1
View on GitHub

0.2.1 (2026-02-09)

🩹 Fixes

  • Revert env vars from {{ env.varName }} back to flat {{ varName }} syntax (b4914257)

desktop@0.2.0

desktop@0.2.0
View on GitHub

0.2.0 (2026-02-07)

🚀 Features

  • Add AI node support with multi-provider LLM integration (OpenAI, Anthropic, Gemini), credential vault encryption, and variable introspection system (fb11df2a)

🩹 Fixes

  • Hide console window on Windows (5777b072)
  • Update icon (d1d3747d)
  • Fix JavaScript node result encoding (7cfbd0dd)
  • Show stack trace for JavaScript node errors (0697ebc8)

🧱 Updated Dependencies

  • Updated cli to 0.2.0
View all releases on GitHub