1.12.0 (2026-10-22)
🎉 Features
- add --maxNavigationSaved flag to configure retained navigation history (#3018) (a580d13)
- add Kimi Code plugin manifest (#3029) (cd00b64)
- Analyze heap snapshots without a browser connection (#3156) (78c8320)
- config: add --watchConfig to reload config file changes (#3248) (b48561f)
- config: introduce layered ServerConfig for live reload (#3203) (37f1fda)
- config: share ReadonlyServerConfig with McpContext and McpPage (#3204) (0813bf3)
- config: support reloading blockedUrlPattern and allowedUrlPattern (#3268) (cc850f5)
- context: release disabled feature state on config reload (#3049) (c0140d1)
- Paginate by default in heap snapshot tools (#3201) (fb8375b)
- Paginate detailed diff in compare_heapsnapshots (#3195) (4a9dd53)
- run independent tool calls in parallel with a TaskRunner (#3243) (8a8d877)
- run page-scoped tools on different pages in parallel (#3252) (f8f18ac)
- server: add McpServer.applyConfig() to reload configuration (#3051) (f874aeb)
- slim: support filepath in slim mode screenshot (#3296) (d399c4a)
- Sort objects for class by self size in compare_heapsnapshots (#3205) (f8a18c6)
- tools: support updating ToolHandler definitions in place (#3050) (8064138)
- wait_for: support opt-in visible text matching (#3212) (eef92da)
🛠️ Fixes
- allow paths below a filesystem-root workspace root (#3277) (296ccef)
- block evaluate_script while a dialog is open (#3196) (545bcbb)
- bound take_snapshot wait and clear the geolocation override (#3265) (6282f54)
- browser: redact WebSocket headers from connection logs (#2901) (3a2f91e)
- capture thrown transform errors as Zod validation issues (#3242) (0f95c21)
- clear handled dialog in McpPage.getDialog() (#3241) (2ab93a3), closes #2958
- cli: disallow --slim in CLI start options (#2987) (#3113) (ae3f61c)
- cli: do not forward tool args to start (#3114) (fef1598)
- cli: serialize object daemon arguments (#2797) (f73a440)
- close the tab opened by a failed new_page (#2928) (c174677)
- config: accept native JSON objects for wsHeaders in config files (#3262) (371e6c2)
- console: describe Map, Set, function, DOM node, symbol and cyclic arguments (#3199) (968e4e5)
- console: include the reason of unhandled promise rejections (#3148) (f7cdf73)
- defer focus emulation until a page is explicitly targeted (#3230) (35abe35)
- disable Puppeteer signal handlers for launched browsers (#3238) (3afec73), closes #3154
- discover third-party developer tools before tool lookup (#3208) (2777fa0), closes #2973
- discover third-party developer tools in page tools (#3207) (cf33529), closes #2980
- drop InlineTextBox nodes from text snapshots (#3202) (f8c775a)
- emulate: keep previous viewport when setViewport fails (#3150) (19d883c)
- exclude source maps from the npm package (#3295) (d575da4)
- keep surrogate pairs and emoji whole when truncating titles, names and bodies (#3215) (058adcf)
- let resourceTypes match CORS preflights and prefetches (#3217) (e342c6e)
- lighthouse: explain unsupported URL schemes in navigation mode (#3144) (c6ad84a)
- lighthouse: fail the audit when Lighthouse reports a runtime error (#3188) (53ea78d)
- lighthouse: restore the emulated viewport after a navigation audit (#3189) (c777ece)
- network: list only earlier hops in a request's redirect chain (#3198) (4675940)
- network: remove unsupported websocket from list_network_requests filter (#2961) (#3282) (8b119d9)
- network: reset page network emulation before applying URL restrictions (#3312) (f25f3df)
- pages: reject devtools:// URLs in navigate_page and new_page (#2935) (#3128) (c94c03d)
- pages: report the actual page size after resize_page (#2998) (#3132) (f003056)
- pages: revert reporting the page size after resize_page (#3308) (186ea66), closes #3306
- pagination: return all items when pageSize is omitted and pageIdx is 0 (#2996) (#3134) (3ad9115)
- performance: populate structuredContent for traceInsight in performance_analyze_insight (#2981) (#3115) (c2c6cc4)
- preserve unread page fallback across snapshots and deduplicate page disposal (#3161) (8604365)
- print the no-roots temp-directory warning under default flags (#2927) (0dd8ed9)
- reject empty, extra, and unknown parts in geolocation and viewport transforms (#3097) (#3120) (3ea31fb)
- resolve error causes on the session that reported the exception (#3220) (b2d37e8)
- resolve service worker IDs for console messages (#2881) (3804a9a)
- return message when page exposes no 3p developer tools (#3197) (663f3c3), closes #3004
- script: surface non-Error thrown and rejected values in evaluate_script (#2951) (#3127) (b1e6e68)
- security: validate filesystem paths that parse as http/ws URLs (#3186) (91e112d)
- snapshot: omit uid for accessibility nodes without backendNodeId (#3187) (9054351)
- stop active screencast on McpPage.dispose() (#3160) (558af81)
- stop get_network_request waiting forever for an unread no-store body (#3216) (c556be1)
- surface nested error causes and autoConnect hint on connection failure (#3111) (d7f1e78)
- treat 0.0.0.0 and [::] browser endpoints as local (#3321) (7d5f7de)
- treat IPv4-mapped IPv6 loopback as localhost (#3255) (6cfb34c)
- truncate data: URLs in accessibility snapshots (#3292) (11e7d47)
- validate type_text submitKey before typing (#3185) (c8615d7)
- wait_for: find text in dynamically attached iframes (#3210) (5f84888)
- warn when screenshot dimensions exceed 16384px limit (#2952) (#3291) (10455b7)
📄 Documentation
- add a pre-submit checklist to AGENTS.md (#3236) (e96ee6c)
- clarify URL pattern port and hostname matching (#3287) (4723335)
- config: note that hot-reloaded URL restrictions keep open targets attached (#3314) (47db2b8)
- correct CLI availability of extension tools (#2852) (a7280ee)
- explain how to install skills, including the CLI skill (#3274) (46eb546)
- remove experimental status from CLI and promote it in README (#3273) (0ced16b)
- require a rebase only when the branch has merge conflicts (#3239) (d1143ac)
- skills: clarify Lighthouse score scale and contrast workflow (#3006) (#3218) (bf8c6d9)
⚡ Performance
- cli: load a small third-party bundle in the chrome-devtools CLI (#3200) (552e1f8)
- load the Lighthouse bundle on first use (#3169) (798f03a)
🏗️ Refactor
- config: isolate scripts and unit tests from home config discovery (#3256) (65e6b97)
- config: lock slim and pageIdRouting options when viaCli is set (#3257) (384d9aa)
- config: pass ReadonlyServerConfig to BrowserManager and add OptionGate (#3267) (98302f2)
- config: simplify watchConfig and start watcher inside connect (#3259) (878c5f6)
- extract errorResult() and routedPageId() in ToolHandler (#3251) (9a6b03a)
- import types and values from a module in one statement (#3303) (f4eaf1f)
- lighthouse: move Lighthouse runner methods to McpPage and add bundle types (#3283) (e1823a2)
- list optional properties last in inline object types (#3302) (dc929c0)
- register all tools upfront across modes (#3163) (58f8d1f)
- response: pass live ReadonlyServerConfig to McpResponse (#3258) (6042490)
- tools: add explicit factory types to tool definitions (#3284) (4d1d7b2)
- use #private names instead of the private modifier (#3301) (2e13311)