rod is a free, open source data extraction & web scraping project written in Go and released under MIT. It has 7,104 GitHub stars, 485 forks and 212 open issues, and was last pushed 1 months ago. On this registry it ranks #25 of 45 tracked projects in Data Extraction & Web Scraping, with 5 head-to-head comparisons available. It gained 6 stars over the last 3 tracked days.

What is rod?

What it is

Rod is a high-level driver for the Chrome DevTools Protocol, written in Go and released under the MIT license. It lives in the Go ecosystem and is published as the module github.com/go-rod/rod, with documentation hosted at go-rod.github.io and an API reference on pkg.go.dev. The project is designed for web automation and scraping, and it deliberately spans two levels of use: senior developers can work with the low-level packages and functions to customize the driver or build their own version of it, while the high-level functions serve as examples that produce a default, ready-to-use build.

The concrete problem Rod solves is the friction of driving a real browser directly over the DevTools Protocol. Rather than leaving callers to manage raw protocol messages, browser lifecycle, and timing by hand, Rod provides chained context design so long-running tasks can be timed out or cancelled intuitively, automatic waiting for elements to become ready, and automatic discovery or download of the browser binary. It also addresses operational pain that shows up in long-running scraping and automation jobs, such as correctly handling nested iframes and shadow DOMs, and avoiding zombie browser processes after a crash.

Key capabilities

  • Chained context design that makes timing out or cancelling long-running tasks intuitive.
  • Automatic waiting for elements to be ready before interaction.
  • Automatic discovery or download of the browser through the lib/launcher package.
  • Thread-safe operation across all calls.
  • High-level helpers including WaitStable, WaitRequestIdle, HijackRequests, and WaitDownload.
  • A two-step WaitEvent design intended to never miss an event.
  • Correct handling of nested iframes and shadow DOMs, plus no zombie browser process after a crash.

Who uses it and how

  • Teams writing web scrapers in Go that need to drive a headless Chrome instance from application code.
  • Automation engineers who need request interception and download waiting as part of a larger workflow.
  • Developers debugging automation scripts, using the auto input tracing and remote monitoring of a headless browser.
  • Maintainers who need to customize or fork the driver, using the low-level packages rather than the default high-level helpers.
  • Contributors and users who learn usage patterns from examples_test.go, the lib/examples folder, and the repository's issues and discussions.

Getting started

Rod is consumed as a Go module at github.com/go-rod/rod, with the documentation at go-rod.github.io and the API reference on pkg.go.dev. The README directs new users to `examples_test.go

project readme (upstream, from github) — read inline

Overview

Go Reference Discord Chat

Documentation | API reference | FAQ

Rod is a high-level driver directly based on DevTools Protocol. It's designed for web automation and scraping for both high-level and low-level use, senior developers can use the low-level packages and functions to easily customize or build up their own version of Rod, the high-level functions are just examples to build a default version of Rod.

中文 API 文档

Features

  • Chained context design, intuitive to timeout or cancel the long-running task
  • Auto-wait elements to be ready
  • Debugging friendly, auto input tracing, remote monitoring headless browser
  • Thread-safe for all operations
  • Automatically find or download browser
  • High-level helpers like WaitStable, WaitRequestIdle, HijackRequests, WaitDownload, etc
  • Two-step WaitEvent design, never miss an event (how it works)
  • Correctly handles nested iframes or shadow DOMs
  • No zombie browser process after the crash (how it works)
  • CI enforced 100% test coverage

Examples

Please check the examples_test.go file first, then check the examples folder.

For more detailed examples, please search the unit tests. Such as the usage of method HandleAuth, you can search all the *_test.go files that contain HandleAuth, for example, use GitHub online search in repository. You can also search the GitHub issues or discussions, a lot of usage examples are recorded there.

Here is a comparison of the examples between rod and Chromedp.

If you have questions, please raise an issues/discussions or join the chat room.

Sponsors

Rod is sponsored by many organizations and individuals, thank you for your support!

Please contact [email protected] if you want to be listed here.

Browser testing via

TestMu AI Logo

Join us

Your help is more than welcome! Even just open an issue to ask a question may greatly help others.

Please read How To Ask Questions The Smart Way before you ask questions.

If you want to contribute please read the Contributor Guide.

Frequently asked questions

Is rod free to use?

rod is open source under the MIT licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does rod do?

A Chrome DevTools Protocol driver for web automation and scraping.

What is rod written in?

rod is primarily written in Go. Its source is publicly available at https://github.com/go-rod/rod, and it has 7,104 GitHub stars.