Skip to content
WebKit API bindings (WebKitGTK+ v2) for Go
Go C
Branch: master
Clone or download
sqs Merge pull request #39 from founderio/master
Replace with the github system status
Latest commit ade305c Aug 12, 2017
Type Name Latest commit message Commit time
Failed to load latest commit information.
cmd/webkit-eval-js Change import path gotk3's new path Oct 2, 2016
webkit2 Replace with the github system status Aug 11, 2017
AUTHORS updating authors, readme for raring Nov 2, 2013
LICENSE Remove Old Example Apr 6, 2017


go-webkit2 provides Go bindings for the WebKitGTK+ 2 API. It permits headless operation of WebKit as well as embedding a WebView in a GTK+ application.


You can specify Go build tags to omit bindings in gotk3 for later versions of GTK (e.g., go build -tags gtk_3_10).

Ubuntu 14.04 (Trusty)

sudo apt-get install libwebkit2gtk-3.0-dev

Pass -tags gtk_3_10 to the go tool if you have GTK 3.10 installed.

Ubuntu 13.10 (Saucy)

sudo add-apt-repository ppa:gnome3-team/gnome3-staging
sudo apt-get update
sudo apt-get install libwebkit2gtk-3.0-dev

Ubuntu 13.04 (Raring)

sudo add-apt-repository ppa:gnome3-team/gnome3
sudo apt-get update
sudo apt-get install libwebkit2gtk-3.0-dev

Arch Linux

sudo pacman -S webkitgtk

Other platforms

Make sure you install WebKitGTK+ 2, not version 1. After installation, you should have an include file that satisfies #include <webkit2/webkit2.h>.


As a Go package

package webkit2_test

import (


func Example() {

	webView := webkit2.NewWebView()
	defer webView.Destroy()

	webView.Connect("load-failed", func() {
		fmt.Println("Load failed.")
	webView.Connect("load-changed", func(_ *glib.Object, i int) {
		loadEvent := webkit2.LoadEvent(i)
		switch loadEvent {
		case webkit2.LoadFinished:
			fmt.Println("Load finished.")
			fmt.Printf("Title: %q\n", webView.Title())
			fmt.Printf("URI: %s\n", webView.URI())
			webView.RunJavaScript("window.location.hostname", func(val *gojs.Value, err error) {
				if err != nil {
					fmt.Println("JavaScript error.")
				} else {
					fmt.Printf("Hostname (from JavaScript): %q\n", val)

	glib.IdleAdd(func() bool {
		return false


	// output:
	// Load finished.
	// Title: "Google"
	// URI:
	// Hostname (from JavaScript): ""

See the documentation and the test files for usage information and examples.

For more information about the underlying WebKitGTK+ 2 API, refer to the WebKit2 docs.

As a program for evaluating JavaScript in the context of a web page

The included webkit-eval-js program runs the contents of a JavaScript file in the context of a web page. Run with:

$ go get -tags gtk_3_10
$ webkit-eval-js scriptfile.js

For example:

$ echo document.title | webkit-eval-js /dev/stdin

Used in

The following projects use go-webkit2:

  • WebLoop - headless WebKit with a Go API

Running tests

go test ./webkit2

Note: The tests require an X display. If you are not running in a graphical environment, you can use Xvfb:

Xvfb :1 &
export DISPLAY=:1
go test ./webkit2


  • Implement more of the WebKitGTK+ 2 API. Right now, only certain parts of it are implemented.
  • Set up CI testing. This is difficult because all of the popular CI services run older versions of Ubuntu that make it difficult to install WebKitGTK+ >= 2.0.0.
  • Create example applications.
  • Fix memory leaks where C strings are allocated and not freed.


See the AUTHORS file for a list of contributors.

Submit contributions via GitHub pull request. Patches should include tests and should pass golint.

You can’t perform that action at this time.