Skip to content

Releases

v0.23.0

Choose a tag to compare

@kenshaw kenshaw released this 05 Nov 22:33

New: Detached(ctx) returns a channel that closes when the browser detaches the target of the context, after the target handled every message that came before the detach. It opens no target and returns the new error ErrNoTarget when the context has none yet. New: the context option WithListener(fn) adds a func of Listen before the first command, so fn sees the events of the start of a tab, such as the runtime.EventExecutionContextCreated events that answer Runtime.enable. Fix: the browser sometimes routed the detach of a target before a reply or an event that Chrome sent earlier, so a command returned ErrTargetDetached and Listen missed the event. The detach now goes through the same queue as the messages. See docs/API.md, examples 29 and 30, and the three decisions dated 2026-11-05. The changes come from onsi, in pull request #1646 and discussion #1645.

v0.22.1

Choose a tag to compare

@kenshaw kenshaw released this 04 Nov 22:30

Fix: a command that is still pending when the browser detaches its target, for example when the page closes, now returns an error that wraps the new ErrTargetDetached. Before, Chrome sent no reply and the command waited until its context ended. A command that starts on a detached target fails at once. The issue was reported by onsi in discussion #1645.

v0.22.0

Choose a tag to compare

@kenshaw kenshaw released this 03 Nov 21:09

New: Listen and ListenBrowser call a func for each event of the tab or the browser, in the order in which the events arrive from Chrome. The target calls the func before it reads the next message, so the func sees an event that arrived before the reply to a command before that command returns. Events and BrowserEvents give one iterator for each event type and give neither guarantee, so they stay the recommended API, and Listen is the lower level tool for code that needs the order across event types. The func gets the typed events of cdproto and no replies to commands. It runs in the loop that reads the messages of the tab, so it must return fast, must not run a command, must not call Listen and must not panic. See docs/API.md, example 28, and the decision docs/decisions/2026-11-04-export-the-ordered-event-listener.md. The idea comes from discussion #1645 by onsi.

v0.21.1

Choose a tag to compare

@kenshaw kenshaw released this 01 Nov 22:24

Fix a panic, close of closed channel, in the handling of DOM.documentUpdated. When DOM.getDocument failed, for example because the tab was closing, the frame kept its old root node, and the next DOM.documentUpdated event closed the channel of that root again. The frame now clears the root first. Thanks to Dhruv Jain (#1644). The module also requires cdproto v0.159.0 now.

v0.21.0

Choose a tag to compare

@kenshaw kenshaw released this 11 Oct 04:29

The package remote has its own WebSocket client, and it is a package of the core module now. The nested module remote and the dependency github.com/gobwas/ws are gone. The core module still needs only the standard library and cdproto.

The import path is the same: github.com/chromedp/chromedp/remote. The public API of the package is the same.

Upgrade: if your go.mod has a line for github.com/chromedp/chromedp/remote, remove it (go mod tidy does that). Go reports an ambiguous import while both the old nested module and the core module provide the package. The tag remote/v0.2.0 is the last version of the nested module.

The client follows RFC 6455: it checks the handshake, joins fragmented messages, checks UTF-8 and the size of a message, answers pings, and does the close handshake. It does not support extensions such as permessage-deflate. Go 1.25 and later are supported.

v0.20.1

Choose a tag to compare

@kenshaw kenshaw released this 05 Oct 22:50

Documentation only. The README, the package documentation and the docs have the current versions (chromedp v0.20.0, cdproto v0.157.8, remote v0.2.0), the CI matrix and the release history. The README describes termcast and the 43 programs of chromedp/examples.

v0.20.0

Choose a tag to compare

@kenshaw kenshaw released this 05 Oct 22:06

chromedp supports Go 1.25 and later. Before this release, the module needed Go 1.27 (see #1536).

  • The JSON types come from github.com/chromedp/cdproto/cdp/jsonv2. With Go 1.27 or GOEXPERIMENT=jsonv2 they are aliases of the types of the standard encoding/json/v2 and jsontext, so the public API is the same. With Go 1.25 and 1.26 they come from github.com/go-json-experiment/json.
  • The modules chromedp, remote and test use go 1.25 and cdproto v0.157.8.
  • The CI runs Go 1.25, 1.26 and stable on Linux, stable on Windows and macOS, and the experiment and the compatibility tag.

remote v0.2.0

Choose a tag to compare

@kenshaw kenshaw released this 05 Oct 22:07

The remote module requires chromedp v0.20.0 and cdproto v0.157.8, and uses go 1.25. It builds with Go 1.25 and later.

v0.19.1

Choose a tag to compare

@kenshaw kenshaw released this 04 Oct 04:04

Documentation only. The README and the package documentation describe termcast, which draws the screen of a page in a terminal, and the 43 programs of chromedp/examples.

v0.19.0

Choose a tag to compare

@kenshaw kenshaw released this 04 Oct 02:41

This release adds new actions and options, fixes bugs, and works on Linux, Windows and macOS in CI. See docs/MIGRATION.md for every change.

New

  • Tap and TapXY send a touch tap.
  • DragAndDrop and DragAndDropXY drag and drop with the mouse and with HTML5 drag and drop.
  • Console reads the console, the uncaught exceptions and the browser log of a page as one iterator.
  • ExposeFunc calls a Go function from the page, like exposeFunction in Puppeteer.
  • PrintToPDF takes options for the paper, the margins, the scale, the page ranges, the header and the footer, the outline and a stream.
  • WithNewWindow chooses a window or a tab for a new target. NoInheritEnv starts the browser with only the given variables. WithDetachOnCancel leaves the tab open when the context ends.
  • EvalAwaitPromise waits for a promise that an expression returns.

Fixed

  • Call on a Target or a Browser returns an error when the connection to the browser is lost, and does not hang.
  • The exec allocator keeps the order of the flags.
  • WaitNotPresent works with a JSPath that gives null or an empty list.
  • Evaluate returns ErrJSNull for null when the type cannot be nil, and Text works on a text node.
  • The pipe transport, the allocator and the tests work on Windows and macOS, and the default browser lookup on Windows falls back to Microsoft Edge.

Notes

  • Use errors.Is(err, context.Canceled) and not == for the error of a call after the connection was lost.
  • The tests run on Linux, Windows and macOS in CI, and every night against the stable, beta and dev channels of headless-shell.
  • The module github.com/chromedp/chromedp/remote is unchanged and stays at remote/v0.1.0.
⌂ 换网址