Karate v2.0.10 Release Notes
Release Date: 2026-06-04 // 13 days ago-
🛠 Important Fixes
screenshotOnFailure: trueworks again; addedonStepFailurehook +ErrorRunEvent#2845- 🔧
configure headersno longer leaks Background-set headers across requests #2846 - Type-hint
!with an angle-bracket type in a doc-string no longer throws an NPE #2847 call read('f.feature') { key: #(var) }no longer throwsReferenceError: # is not defined#2849startTime/endTimein the report JSON are correct again #2850Java.type()resolves classes on the JUnit Platform classpath (--cp) again #2855karate.tagValuesaggregates all tags #2859- Gatling
karateFeature("path", "@tag")applies the tag filter instead of treating it as a path #2870 - Scenario Outline Example vars no longer mishandled when
callonceis used in Background #2874 - ApacheHttpClient proxy
CONNECTTLS handshake uses the target host for SNI #2877 - 🛠
StackOverflowErroron circular-reference variables fixed #2880 - 🛠 Regression on the left side of
setfor JSON keys with special characters fixed #2886 geckodriverstarts again in standalone mode #2884- 🛠
StackOverflowErrorwhen anafterScenariohook calls a feature with a circular reference fixed #2887 match $.field == '#notpresent'no longer throws when the field is missing #2892- 📜
#()/##()schema references inside a doc-stringmatchparse correctly #2893 [*]wildcard works insidekarate.match()with$JsonPath #2894setkeyword works with hyphenated key paths #2896- Embedded expressions in feature
callargs are evaluated as in v1 #2897 - 🔧
configure loggingmask is applied to the scenario that triggers acallonce#2898 def var = $.missingyields#notpresentinstead of throwing #2899- ✅ JUnit no longer runs the wrong tests when calling other feature files #2900
outputJunitXmlexposed onio.karatelabs.junit6.Karate#2901- Type-hint suffix in an Examples table works in a
matchstatement #2902
🆕 New Features & Enhancements
- 🆕 New
karate-imageextension — pixel image-comparison as its own ext module with a primitives API and an interactive diff lightbox in HTML reports - ✅ HTML report redesigned on Tailwind — timeline view, donut summary, filter chips, JSON syntax-highlighting of request/response bodies #2895
karate-js: ES6 classes (inheritance,super, instance/static fields), runtime strict mode, destructuring, logical-assignment (||=,&&=,??=), RegExp named capture groups- 🍱 Ext SPI — pluggable extensions contributing CLI subcommands, channel factories, ext globals, and report assets
- Multi-part
karate.embedobject form + defer-until-visible embed rendering - 👍 Driver: out-of-process iframe (OOPIF) support for CDP; W3C driver mouse via the Actions API
- Gatling: protocol-scoped
callSingle/callOnce/setupOncecaches +protocol.runnerexposure - 🏗 JUnit 6:
outputJunitXml/outputCucumberJsonon the builder - 👍
Resource.bytes(byte[])in-memory binary factory; CSV frombyte[]support #2873 - 🏗
Runner.Builder.getResolvedFeatures()exposed #2876
🚀 View the complete list of all issues fixed in this release.
Full Changelog : v2.0.9...v2.0.10
Important : refer 2.0.0 release notes for those upgrading from 1.X
Artifacts
- Maven artifacts
- 📄 Standalone JAR (download below)
- CVE / SBOM report (download below)
Previous changes from v2.0.9
-
🛠 Important Fixes
- JS functions auto-coerced to Java functional interfaces (e.g.
Predicate,Function) when passed to Java APIs — regression vs 1.5.2 #2837 - 🔧
configure proxy(and other global config) propagates into features invoked viacall/callonce#2839 - HTTP traffic from
karate.callSingle()is captured in the calling feature's HTML report again; config-time output also surfaced in reports #2840 - JsonPath
[*]wildcard works insidematch/match eachexpressions (e.g.match each response..items[*].type == '#string') #2841 - ⏪
String.prototype.substr()available again, andkarate.set(map)bulk form restored — v1 parity for large-codebase migrations #2842 SUITE_EXITdurationMillisand time stats inkarate-events.jsonlno longer report negative / incorrect values #2843- 💅
setRHS expressions route through the same evaluator as v1, restoring parity for embedded-expression and JS-style RHS forms #2813
🆕 New Features & Enhancements
passedRateexposed onSUITE_EXIT.summaryandFEATURE_EXITevents for easier aggregation by external tooling #2832- 📜 Parser warns at parse time when the v1
@paralleltag is encountered, with a pointer to the migration docs #2838 - Scenario names evaluate bare
${...}placeholders (in addition to<placeholder>substitution) cucumber-jsonoutput flattens called sub-feature steps into the parentsteps[]array- Driver honors the
stop: falseflag — skipsquitand bypasses the driver pool, useful for manual / interactive debugging - 🚚
karate-js:json-smartdependency removed, replaced with an own strictJsonParser - ✅
karate-js: +51 test262 PASS — abrupt-completion sweep,RegExp.escape, lexer\v/\xfixes - Markup:
ka:fragment(attribute-level),ka:island,ka:data-mirror,devTracedirectives (K3 / K7 / K8 / K16–K22) - Markup:
th:eachstrict,th:attrSyntaxError hint,th:withobject-spread (...obj), per-rendercontext.set, per-requestcontext.setGlobal/getGlobal - Markup:
context.redirectsendsHX-Redirectautomatically for htmx-originated requests; dev-mode 500 returns a useful body CsrfProtection.createTemplateTokenreturnsnullwhen no token is available (instead of throwing)- netty bumped 4.2.12 → 4.2.13
🚀 View the complete list of all issues fixed in this release.
Full Changelog : v2.0.8...v2.0.9
Important : refer 2.0.0 release notes for those upgrading from 1.X
Artifacts
- Maven artifacts
- 📄 Standalone JAR (download below)
- CVE / SBOM report (download below)
- JS functions auto-coerced to Java functional interfaces (e.g.