https://github.com/joakimcarlsson/bonk
Go-native browser automation via Chrome DevTools Protocol. No Node.js, no relay process, no external dependencies.
https://github.com/joakimcarlsson/bonk
browser-automation cdp chrome-devtools-protocol golang headless-chrome stealth web-scraping websocket
Last synced: 2 months ago
JSON representation
Go-native browser automation via Chrome DevTools Protocol. No Node.js, no relay process, no external dependencies.
- Host: GitHub
- URL: https://github.com/joakimcarlsson/bonk
- Owner: JoakimCarlsson
- License: mit
- Created: 2026-03-20T04:42:28.000Z (2 months ago)
- Default Branch: main
- Last Pushed: 2026-03-21T15:18:27.000Z (2 months ago)
- Last Synced: 2026-03-21T22:44:09.826Z (2 months ago)
- Topics: browser-automation, cdp, chrome-devtools-protocol, golang, headless-chrome, stealth, web-scraping, websocket
- Language: Go
- Size: 495 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 11
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- fucking-awesome-go - bonk - Fast, stealth-first browser automation library using Chrome DevTools Protocol over WebSocket with no external dependencies. (Testing / Selenium and browser control tools)
- awesome-go-with-stars - bonk - first browser automation library using Chrome DevTools Protocol over WebSocket with no external dependencies. | 2026-03-25 | (Template Engines / Selenium and browser control tools)
- awesome-go - bonk - Fast, stealth-first browser automation library using Chrome DevTools Protocol over WebSocket with no external dependencies. (Testing / Selenium and browser control tools)
README
# bonk
[](https://pkg.go.dev/github.com/joakimcarlsson/bonk)
[](https://goreportcard.com/report/github.com/joakimcarlsson/bonk)
[](https://codecov.io/gh/joakimcarlsson/bonk)
A fast, stealth-first browser automation library for Go. Direct Chrome DevTools Protocol over WebSocket — no WebDriver, no relay, no detection.
[Documentation](https://joakimcarlsson.github.io/bonk)
## Features
- **Direct CDP** — WebSocket to Chrome, zero intermediaries, undetectable by default
- **Stealth by default** — skips `Runtime.enable`, patches navigator/plugins/WebGL, strips headless signals
- **Code-generated protocol bindings** — full coverage of all 55 CDP domains from upstream `.pdl` files
- **Context-aware** — `page.WithContext(ctx)` / `page.Timeout(d)` for deadlines and cancellation
- **Auto-wait elements** — polls for visibility before interaction, retries stale references
- **Network interception** — intercept, modify, mock, or block requests and responses via the Fetch domain
- **Device emulation** — built-in presets for iPhone 15, Pixel 8, iPad Pro, Galaxy S23, and more
- **Session persistence** — save and restore cookies and localStorage across runs
- **Isolated contexts** — separate cookie jars, proxies, viewports, and locales per context
- **Single dependency** — only [`coder/websocket`](https://github.com/coder/websocket)
## Installation
```bash
go get github.com/joakimcarlsson/bonk
```
## Quick Start
```go
package main
import (
"fmt"
"log"
"github.com/joakimcarlsson/bonk"
)
func main() {
b, err := bonk.Launch()
if err != nil {
log.Fatal(err)
}
defer b.Close()
ctx, err := b.NewContext()
if err != nil {
log.Fatal(err)
}
page, err := ctx.NewPage()
if err != nil {
log.Fatal(err)
}
if err := page.Navigate("https://example.com"); err != nil {
log.Fatal(err)
}
title, _ := page.Title()
fmt.Println(title)
}
```
## License
See [LICENSE](LICENSE) file.