BlinkGTK for Windows — Getting started

BlinkGTK for Windows lets you use Chromium's rendering engine (Blink) as a GTK4 widget, from C.
Unpack the ZIP and run bin\blinkgtk_browser.exe and it works at once (no administrator rights needed).
The API is nearly the same as the Linux version, so you can use the same code on both operating systems (the differences are collected in "Differences from the Linux version" below).

This page describes v1.2.6-build4 (Chromium 157.0.8103.38). On Windows 11 Pro (build 26300), we built it and checked the API, rendering and display paths on 2026-11-06. The final package check also verified unpacking and running the ZIP.

Contents: Who it is for / Run it / Check that it works / Requirements / Embedding it in your app / Upgrading from an earlier version / Differences from the Linux version / The experimental GPU path / If something goes wrong


Who it is for

What you need depends on what you want to do.

You want to You need Read
Just try it Unpack the portable ZIP. No build environment needed Run it
Embed it in your app The devel ZIP and Visual Studio Build Tools (a C++ compiler). If you have none, start from installing it the embedding section below, and section 0 of the bundled docs\building-with-blinkgtk-en.md
Build Chromium itself Usually not needed. Use the released ZIPs (building it takes a long time and a lot of disk) —

Run it

1. Download and unpack

Get the ZIP files from the v1.2.6-build4-windows release of blinkgtk-dist.

File Use
blinkgtk-1.2.6-build4-windows-x64.zip To run it (portable). Start with this one
blinkgtk-devel-1.2.6-build4-windows-x64.zip To embed it (headers and libraries; see Embedding it in your app)
SHA256SUMS To check the ZIPs. Compare it with the output of certutil -hashfile <ZIP> SHA256

Unpack the portable ZIP anywhere. It includes the GTK4 and VC++ runtime DLLs, so there is nothing else to install. There is no installer (MSI) yet.

The unpacked folder: three folders, bin, docs and share

Unpacking gives three folders: bin (the executables and DLLs), docs (documentation) and share (GTK4 data), plus the license files (LICENSE.chromium, LICENSE.blinkgtk and THIRD_PARTY_NOTICES.html).

2. A warning may appear the first time

This package is not code-signed. If you download it with a browser and run it, Microsoft Defender SmartScreen may show a warning. Follow the prompt to continue (in general, choose "More info" in the warning and then "Run anyway"; we have not captured the actual screen for this release).

The first start right after unpacking can be slow. Microsoft Defender scans the newly written files (there are about 590 DLLs). From the second start on, it is fast. In our check (Intel Core i5-1140G7, default Defender settings, 2026-10-23), the first start right after unpacking took about 11 seconds until the window appeared, and the later starts took about 0.9 seconds. The time varies with the machine and the Defender settings. It will start if you wait, so please wait.

If you use a Windows 11 Dev Drive (a volume for developers) for your work, unpacking onto the Dev Drive makes even the first start fast. On a Dev Drive, Defender runs in "performance mode" and scans files after they are opened (Defender protection stays on). In our check (same machine), the window appeared in about 3 seconds. See Microsoft's description for how to set up a Dev Drive.

3. Run

In File Explorer, open the bin folder of the unpacked folder and double-click blinkgtk_browser.exe. Without an argument it opens https://google.com/ (an internet connection is needed).

To open a page of your choice, use a Command Prompt (search for "cmd" in the Start menu), move to the bin folder of the unpacked folder, and run:

cd /d "C:\BlinkGTK\blinkgtk-1.2.6-build4-windows-x64\bin"
blinkgtk_browser.exe https://example.com/

The C:\BlinkGTK\... on the first line is an example. Replace it with the actual path where you unpacked it (you can copy the path from the File Explorer address bar). If you paste < and > as they are, the Command Prompt treats them as symbols and fails.

With a URL argument it opens that page.
blinkgtk_browser is a minimal sample that shows only what you need to embed BlinkGTK.


Check that it works

> blinkgtk_browser.exe --version
BlinkGTK 1.2.6-build4 (Chromium 157.0.8103.38)

Requirements

OS Windows 10 (64-bit) or later. We verified on Windows 11 Pro (builds 26200 and 26300); we have not verified on Windows 10
CPU x64 (32-bit is not supported)
Disk space About 1.4 GiB (ZIP 379 MiB + about 1,056 MiB unpacked; you need both while unpacking)
GTK4 Bundled. Do not install it separately (mixing it with a GTK4 installed another way may fail to link with the bundled one)
VC++ runtime DLLs bundled (you do not need the redistributable installer)

The GitHub Releases page shows the same ZIP as "379 MB". Tools that count in units of 1,000,000 bytes show 397 MB.


Embedding it in your app

The devel ZIP (blinkgtk-devel-1.2.6-build4-windows-x64.zip) contains the public API headers, the import libraries and the GTK4 development files.

Four things to note.

  1. Do not write your own forward declarations of the public API (Windows only). The headers declare it with __declspec(dllimport); a declaration without it in the same translation unit makes clang warn. Use only the headers.
  2. Free return values that the caller owns with g_free() (for example blink_handoff_meta_serialize()). This has been the rule since 1.2.3-build2.
  3. To use the sandbox, link the static library lib\blinkgtk_sandbox.lib and call blink_gtk_sandbox_init() (Windows only; it cannot be called on Linux, so wrap it in #ifdef G_OS_WIN32 when you share code between the two).
  4. When the main loop returns, call blink_gtk_shutdown() before exiting. With Windows versions up to 1.2.5-build1, leaving it out makes the process take more than 20 seconds to exit, and it ends abnormally (from 1.2.5-build2 it is done automatically, but calling it explicitly is still recommended). See "6. Shut down" at the end of the sample (blinkgtk_browser-windows.c) for where to call it.

The public API has 154 entry points. Of these 154, the only difference from Linux is one entry point: blink_web_view_attach_to_external_surface (Wayland only) is not on Windows (blink_gtk_sandbox_init() above is Windows-only and is not counted in that number).
We have called 66 of them and confirmed they work. How they are counted, and how to list the ones not yet called, is in §0 of the bundled docs\api-windows-notes-en.md.


Upgrading from an earlier version

The steps are the same from any version.

  1. Unpack the new ZIP into a separate folder and try it; if it is fine, replace the old folder.
  2. If you embed BlinkGTK in your own app, rebuild it with the headers and libraries from the new devel ZIP (compatibility with the previous blinkgtk.dll was not checked).

Notes for each version:

From 1.2.5-build5 to 1.2.6-build4:

From 1.2.5-build3 to 1.2.5-build5 (the Windows build did not publish build4 separately, so build4's content is included here):

From 1.2.5-build2 to 1.2.5-build3:

From 1.2.5-build1 to 1.2.5-build2:

From 1.2.4-build4 to 1.2.5-build1:

From 1.2.4-build2 to 1.2.4-build4:

From 1.2.3 or earlier: use the steps above as they are. The first Windows 1.2.4 is 1.2.4-build2 (Chromium moved from 154 to 155). Up to 1.2.3-build4, a process could crash when an internal assumption failed. From 1.2.4 that check is disabled in the build.


Differences from the Linux version

Linux Windows
Install RPM / DEB / tarball ZIP (MSI later)
GTK4 OS package Bundled
How rendered output is handed to GTK software / EGL software by default. There is no EGL on Windows. An experimental GPU path can be selected with an environment variable (below)
blink_web_view_attach_to_external_surface Yes No (Wayland only)
Hanging punctuation typesetting Yes (from 1.2.4-build1) Yes (from 1.2.5-build1)
Warichu (inline cutting notes) typesetting (one-line cases) Yes (from 1.2.4-build3) Yes (from 1.2.5-build1)
Japanese vertical text layout Experimental adjustment off by default Same (off by default)

The experimental vertical-text adjustment (it aligns vertical lines inside multi-column layouts to the column grid) is off by default on both Linux and Windows.
To turn it on, add --enable-blink-features=CJKVerticalColumnFragmentation to the executable's command line (passing arguments to blink_gtk_init() from your app does not reach it).
We have not compared the rendered output of the two operating systems side by side, so there is no guarantee that the layout matches.

The environment variable BLINKGTK_GPU_MODE does not change how rendering is handed over on Windows. Even with egl, the hand-over to GTK is the same as software (Chromium's internal rendering may differ; we have not measured the result). To try the GPU, use BLINKGTK_WIN_GPU_PATH below.
When you set an environment variable in cmd, put it in quotes like set "NAME=value" (with set NAME=value && … a trailing space becomes part of the value).


The experimental GPU path

Only when you set the environment variable BLINKGTK_WIN_GPU_PATH=vulkan, the result of Chromium's GPU compositing is handed to GTK's Vulkan renderer without being copied back into CPU memory (the usual path first copies the screen drawn by the GPU into CPU memory). A Vulkan-capable GPU and driver are required.

set "BLINKGTK_WIN_GPU_PATH=vulkan" && blinkgtk_browser.exe

If something goes wrong


Change history

Date Change
2026-10-11 1.2.4-build2 (Chromium 155)
2026-10-18 Updated for 1.2.4-build4: bundled Vulkan-enabled GTK, the experimental GPU path, and the corrected answers of blink_gtk_has_typesetting_feature
2026-10-19 Reorganized the page: separate sections for running it, checking that it works, and upgrading from an earlier version
2026-10-19 Added a "what you need depends on what you want to do" table and a pointer to installing the build environment
2026-10-21 Added screenshots of the unpacked folder, the browser window and Visual Studio Installer
2026-10-21 Fixed the run steps (double-click, Command Prompt), the download link, the Visual Studio screenshot note, added the WebKitGTK name correspondence, and reworked the upgrade steps
2026-10-21 Added the difference in load-changed values, how to replace the path in the command, and what to check in the Visual Studio screenshot
2026-10-23 Updated for 1.2.5-build1: Chromium 156, hanging punctuation and one-line warichu included, upgrade notes from 1.2.4-build4 added
2026-10-24 Added a note that the first start right after unpacking can be slow
2026-10-25 Added a note that unpacking onto a Dev Drive makes the first start fast
2026-10-26 Added the results of checking load-failed, is-loading, set_user_agent and zoom_level on Windows 1.2.5-build1, and a note on shutdown (blink_gtk_shutdown())
2026-10-27 The automatic shutdown is now stated as available from 1.2.5-build2
2026-10-27 Updated for 1.2.5-build2: version numbers and file names; added the "From 1.2.5-build1 to 1.2.5-build2" notes (theme following, automatic shutdown, the child-process executable)
2026-10-30 Updated for 1.2.5-build3: Chromium 156.0.8078.73 security update, upgrade steps, and license-file information
2026-11-02 Updated for 1.2.5-build5: Chromium 156.0.8078.79 security update, File System Access protection, and upgrade steps from build3
2026-11-07 Updated for 1.2.6-build4: Chromium 157.0.8103.38, the fix for CPU use on a static page, and upgrade steps from build5