BlinkGTK for Windows — はじめかた

数字には測った日を添えてあります。 配布物のサイズと同梱文書の本数は
配布する ZIP そのものの実測値 (2026-09-24 実測) です。
注意: ZIP を組み立てた日時はここには書きません。 組み直すたびに変わるためです。
ZIP の正確なバイト数とハッシュは、配布物と一緒に置く <パッケージ名>.verify.json (size / sha256)
SHA256SUMS (ハッシュのみ) を見てください。
Windows 11 Pro build 26200 での確認は 2026-09-17 に始め、直近は 2026-09-24 です (配布物の展開実行検査)。

BlinkGTK を Windows で使えるようにしたものです。版数体系も同じ
(Chromium の版 + BlinkGTK のパッチレベル) です。

公開 API は、同じ版数の Linux 版 (1.2.1-build3) とほぼ同じです。
この 101 件の中での差は 2 つ:

数え方: 公開ヘッダの宣言と、共有ライブラリ (.so / .dll) の export の
両方に在るものを公開 API と数えます。この定義で Linux も Windows も 101 件です。

測り方 (どちらも 2026-09-21 実測):
Windows は公開ヘッダの宣言 102 と、DLL の export のうち blink で始まる名前 112 の共通部分で 101
数えたヘッダが devel ZIP に同梱するものと同一であることは検査で確かめています。
Linux は配布 tarball を展開し、同じ数え方を当てて 101
(ヘッダ宣言 101 と、.so の export のうち blink_ で始まる名前 136 の共通部分)。
名前で絞るのは、ヘッダに無い内部のシンボルを数えないためで、共通部分の件数には影響しません。
注意: 「同じ数え方」の中身: 条件コンパイルの扱いだけ対称にしてあります —
Windows 側は #ifndef _WIN32 の中を、Linux 側は #ifdef _WIN32 の中を除きます
(その platform の利用者に見えない宣言を数えないため)。

Windows に無い blink_web_view_attach_to_external_surface (Wayland 固有) の 1 本
Windows にある blink_gtk_init_with_sandbox() の 1 本

上の 101 件には入らないものが 1 本あります。
blink_gtk_sandbox_init() は DLL から export されず、静的ライブラリ
blinkgtk_sandbox.lib 経由で実行ファイルに取り込む設計です (devel ZIP に同梱)。
Linux ではこれを呼べません (下記)。

注意: 本ページの Linux 版との比較は、比べた時点 (2026-09-21〜22) の最新だった Linux 1.2.2-build6 (Chromium 153) とのものです。
Linux 版は 2026-09-24 に 1.2.3-build1 (Chromium 154) を公開しましたが、1.2.3 との比較はしていません。
1.2.3 で直った点 (JavaScript・画像・localStorage の無効化が効くようになった等) が
この Windows 版 (1.2.1-build3) でどうなっているかも、確かめていません。

注意: Linux 版 1.2.2 で入った 4 本は、この版の Windows にはありません
(1.2.1 には Linux 版にもありません):
blink_web_view_new_with_profile() / blink_gtk_set_gpu_mode() /
blink_gtk_get_profile_path() / blink_gtk_get_profile_source()

数え方: 1.2.2-build6 の公開 API 106 件 − 1.2.1-build3 の 101 件 = 5 本の増加。
そのうち blink_gtk_init_with_sandbox() だけが Windows にも在るので、
無いのは 4 本です (2026-09-21 実測)。

注意: blink_web_view_new_with_profile() は、Linux 1.2.2-build6 の目玉として
紹介された機能です
(view ごとに profile と cache を分ける)。
この Windows 版では使えません。

サンドボックスの 2 本について (2026-09-21 実測。export は、Linux の .sonm -D、Windows の DLL を dumpbin /exports で確認):

Linux 1.2.1 Linux 1.2.2-build6 この Windows 版
ヘッダの宣言 なし あり (Since: (not released yet)) あり
blink_gtk_init_with_sandbox() を共有ライブラリが提供 なし あり あり
blink_gtk_sandbox_init() を提供 なし なし あり (静的ライブラリ blinkgtk_sandbox.lib を devel ZIP に同梱)

注意: 表の blink_gtk_init_with_sandbox() の行で Linux 1.2.2-build6 を「あり」としたのは
共有ライブラリを実測した結果です。

blink_gtk_sandbox_init() は、Linux ではまだ呼べません。 本家のヘッダ (英文) が
"it lives only in the static library blinkgtk_sandbox, which the current packages
do not include. Linking against it will fail." と明記しています
(静的ライブラリ blinkgtk_sandbox の中にしか無く、それは現在のパッケージに含まれないので、
リンクは失敗する、の意)
(ヘッダ本文が参照している issue #141 は、当方が本体リポジトリに立てた相談です)。
この英文は、1.2.3-build1 のヘッダ (blink_gtk.hblink_gtk_sandbox_init() の注記) にも同じ形で残っています (2026-09-24 に確認)。
なお 1.2.3 のヘッダでは、blink_gtk_init_with_sandbox()Since: 1.2.2 で、共有ライブラリが提供すると書かれています。
Windows 版は静的ライブラリを同梱しているので呼べます。


何が入っていますか

portable ZIP 展開してすぐ動きます。GTK4 も同梱しているので、別途の導入は要りません
devel ZIP 組み込む人向け。公開 API ヘッダ、インポートライブラリ、GTK4 の開発用ファイル

インストーラ (MSI) はまだありません。設計だけ決まっています。


動かすまで

1. 展開する

ZIP を任意の場所へ。管理者権限は要りません。

2. 初回は警告が出ることがあります

この配布物にはコード署名がありません。 そのため、ブラウザで取得して実行すると
Microsoft Defender SmartScreen の警告が出ることがあります。案内に従って実行を
続けてください。

署名は後から追加できるため、最初の版は署名なしで出しています。

注意: この画面のスクリーンショットはまだありません。
当方の開発機では配布物をブラウザ経由で取得していないため、Mark of the Web が付きません。
つまり開発機ではこの警告を再現できません。 素の Windows で取得から実行まで
通して撮り次第、画面と実際のボタン名を載せます。

3. 実行する

bin\blinkgtk_browser.exe を実行します。
引数を付けないと https://google.com/ を開きます (インターネットへの接続が要ります)。
引数に URL を渡すと、そのページを開きます。

cd blinkgtk-1.2.1-build3-windows-x64\bin
blinkgtk_browser.exe
blinkgtk_browser.exe https://example.com/

blinkgtk_browser は、BlinkGTK を組み込むのに必要なものだけを示す最小構成のサンプルです。
起動すると、コンソールの窓も開いて動作のログが表示されます。


動作条件

OS Windows 10 (64bit) 以降
CPU x64 (32bit は対応しません)
空き容量 ZIP 約 577 MiB + 展開後 約 1,583 MiB。展開中は両方必要なので実質 約 2.1 GiB (2026-09-24 実測)
GTK4 同梱。別途入れないでください
VC++ ランタイム DLL を同梱 (再頒布可能パッケージのインストーラは不要)

注意: 本ページの MiB は 1,048,576 バイトです。 GitHub の Releases の画面も
同じ単位で「MB」と表示するので、Releases では 577 MB と見えます
(2026-09-23 に、公開されている別のリポジトリのリリースで、API のバイト数と画面の表示を突き合わせて確認)。
1,000,000 バイト単位で数えるツールでは 605 MB と出ます。
同梱文書も同じ単位で書いています — 大きさを書いている 6 本
(INSTALLATION-ja.md / INSTALLATION-en.md / building-with-blinkgtk-ja.md /
portable-app-guide-ja.md / faq-ja.md / linux-windows-differences-ja.md)
すべてで、MB が MiB であることを明記しています (2026-09-21 時点。機械で確認)。

GTK4 を別途インストールしないでください。 Windows の GTK4 には ABI が
2 系統あり (gvsbuild = MSVC ABI / MSYS2 = MinGW ABI)、別の ABI でビルドした
ものは同梱の GTK4 とリンクできません。
(一般論です。当方で実際に混ぜて試したわけではありません。)

注意: 当方が確認したのは Windows 11 Pro (build 26200) です。
Windows 10 では確かめていません。

注意: software が唯一の描画経路です。 BLINKGTK_GPU_MODEegl
swiftshader を指定しても、描画は software のままです。

変数そのものは読まれます。egl を指定すると経路名の申告が "P3" になります。
変わらないのは描画です。

EGL の描画経路そのもの (blink_web_view_egl.cc / blink_wayland_surface.cc)
を Windows のビルド対象に入れていないためです。描画を受け取る側のサーフェスをどう合成するかが
未設計
で、DirectComposition を使う形を検討中です。
API (blink_gtk_ensure_egl_recipient() など) は ABI を保つため
blinkgtk.dll に残っています
が、Windows では 0 を返します。


Linux 版との違い

Linux Windows
導入 RPM / DEB / tarball ZIP (MSI は今後)
GTK4 OS のパッケージ 同梱
描画 software / EGL software のみ (EGL は組み込んでいません)
blink_web_view_attach_to_external_surface あり ありません (Wayland 固有)
日本語縦組みの版面 (既定) 列格子 snap は既定 OFF 列格子 snap の差はありません (行分割は版数などの差で違いうる。下記 (2))
同 (--enable-blink-features=CJKVerticalColumnFragmentation 指定時) 列格子 snap が効く 入っていません — 行の位置が違うはずです (下記)

注意: 縦組みの版面が両 OS で一致する保証はありません。理由は 2 つあり、別々のものです。

(1) 列格子 snap が Windows に入っていません。ただし既定では Linux でも
効きません。

このフラグ CJKVerticalColumnFragmentationBlinkGTK が足したもの
(Chromium 上流の機能ではありません)、runtime_enabled_features.json5
status: "experimental" = 既定 OFF です。製品コードがこれを
有効にすることもありません。

数え方 (2026-09-22 実測、152 / 153 の両ツリー): 強制的に有効化する
SetCJKVerticalColumnFragmentation... の呼び出しをツリー全体で数えて
0 件。コマンドラインでの有効化 (--enable-blink-features) も製品コードには
無く (third_party/blinkgtk/ で 0 件)、BlinkGTK のツリー内では検証用のハーネスからのみです。
BlinkGTK 自身の公開文書 (API リファレンス「縦書き版面メトリクス — verticalFlowMetrics」) にも
この API は既定では生えません。 起動時に次のフラグが要ります。」とあり、
そのフラグが --enable-blink-features=CJKVerticalColumnFragmentation です。

したがって、既定のまま使う限り、この点で版面は変わりません。
差が出るのは --enable-blink-features=CJKVerticalColumnFragmentation
付けたときだけです。そのとき Linux 版は条件式 4 箇所で snap が効きますが、
この Windows 版の該当 3 ファイルには出現 0 件なので効きません。

(2) 版数と、行分割の改変の両方が違います (Windows = Chromium 152 / 比べた時点の Linux 版 1.2.2 = 153)。
行分割については、153 に入った上流の修正 (CL 8264049、既定 ON のフラグ
LineBreakerHanKerningEnd) を 152 は持ちません。BlinkGTK の行分割の改変 (本家 #131) も、
Windows (152) には入っていません。
本体の実測 (153 のみ。合成ページ・フォント 2 種の範囲) では、上流のフラグが ON なら
#131 の改変は値を動かさず、フラグを切ると改変が効きます (改変が無いと、span を含む
場合に #131 の症状が出ます)。152 はこのフラグを
持たないので、Windows (152) では改変が無いことも差になりうる
と見ています
(152 では測っていません)。

注意: 行の位置の差は、両 OS の実画を並べて比べたものではありません。
確かめたのは、Windows 側の該当 3 ファイルに snap の条件式が 1 件も無い
ところまでで、画面上どれだけ違うかは測っていません。

版面メトリクスを取る JS の API 自体は Windows にも在りますが、
返る値が Linux と一致する保証はありません。
詳細は同梱の docs\environment-variables-ja.md の §2-b (縦書き版面メトリクスの API)。


組み込む方

devel の ZIP に、公開 API ヘッダとインポートライブラリが入っています。

ビルドには Visual Studio Build Tools 2022 と Windows SDK が別途要ります。
(GTK4 を別途入れなくてよいのは、動かす場合の話です)

利用者側のコンパイルには /MD /DCOMPONENT_BUILD が要ります。

公開ヘッダは blink_gtk.h#include <gtk/gtk.h> するため、GTK4 の
開発用ファイルも同梱しています。

組み込み時の注意が 3 点あります (1 点目は Windows 固有)。

  1. ヘッダを include したうえで、公開 API の前方宣言を自分でも書かないでください (Windows 固有)。
    ヘッダは __declspec(dllimport) 付きで宣言しているので、同じ翻訳単位に dllimport
    付かない宣言が並ぶと、clang では警告が出ます
    (ヘッダが先なら -Winconsistent-dllimport、自前の宣言が先なら -Wdll-attribute-on-redeclaration)。
    警告をエラーとして扱う設定 (-Werror / /WX) ではビルドが止まります
    (MSVC の cl.exe での出方は当方では確かめていません)。前方宣言は書かず、ヘッダだけを使ってください。

  2. 呼び出し側が解放する戻り値は g_free() で解放してください。
    blink_handoff_meta_serialize() が例です。実装が g_strdup_printf()
    確保しているので、契約としては g_free() です。

    API リファレンスの掲載例は free() になっています。この点は
    #130 で確認を依頼中です。なお現行の構成で free() が壊れる、
    という意味ではありません — Windows でも blinkgtk.dll
    glib-2.0-0.dll はどちらも /MD で、プロセス内の ucrtbase.dll
    1 本です (2026-09-15 実測)。揃えるのは契約のためです。

  3. blink_gtk_sandbox_init() は DLL からエクスポートされません。
    静的ライブラリ blinkgtk_sandbox.lib 経由で実行ファイルに取り込む設計です
    (devel ZIP に同梱)。Linux ではこの API をまだ呼べません — 本家の
    パッケージが静的ライブラリを含んでいないためです
    (本体リポジトリの issue #141。当方が立てた相談)。


版数の読み方

1.2.1-build3 は BlinkGTK 本体と同じ版数で、Chromium の版と BlinkGTK の
パッチレベルに紐付いています。
この版は Chromium 152.0.7977.64 です。

手元のものが何か、実行時に確かめられます。

> blinkgtk_browser.exe --version
BlinkGTK 1.2.1-build3 (Chromium 152.0.7977.64)

サイトや文書の数字ではなく、手元の実行ファイルが出す値を見てください。


詳しい手順

配布物の docs\ に日本語 13 本・英語 4 本のドキュメント (PDF 版も同数) が
入っています。入口は docs\00-index-ja.md (英語は docs\00-index-en.md) です。

docs\INSTALLATION-ja.md 導入手順
docs\troubleshooting-ja.md トラブル対応
docs\api-windows-notes-ja.md API の Windows 固有の注意
docs\environment-variables-ja.md 環境変数の一覧 (日本語のみ)

更新履歴

日付 内容
2026-09-19 初版
2026-09-21 公開 API 件数に証跡を添えた (Windows / Linux とも実測)。blink_gtk_init_with_sandbox() が本家の同梱ヘッダの注記と食い違う点を追記。大きさの単位を MiB と明記
2026-09-22 日本語縦組みの版面について記述を訂正。既定 (フラグ OFF) では両 platform とも列格子 snap は効かないため、差が出るのはフラグを指定したときだけ。行分割の差は版数の差 (Windows 152 / Linux 153) によるもので、当初書いていた別の因果は取り下げた (注意: この取り下げは 153 の実測だけに基づくもので行き過ぎだった。2026-09-23 の行で訂正)
2026-09-22 本家サイトの源ファイルの行番号を本文から外した (毎リリース再生成されるため)。証跡と連絡事項の詳細は本家への連絡欄へ移した
2026-09-22 主張と測定の対応を正した (注入が無いという主張の根拠を、製品コードでの出現 0 件に差し替え)。ZIP を組み立てた日時を本文から外した (組み直すたびに変わるため)。当方リポジトリのパスと、本家に確認をお願いしている事項の記述を本文から外し、本家への連絡欄に寄せた
2026-09-22 有効にする注入が無いという主張の根拠を、強制有効化する setter の出現 0 件 (152/153 両ツリー) に差し替えた。以前は別の主張の測定を引いていた
2026-09-22 重要: 本家への連絡事項を、原稿とは別の連絡票に分けた。 原稿の HTML コメントに入れていたが、本家のサイトは pandoc 生成で、pandoc は HTML コメントをそのまま出力する (実例: 本家の version-history-ja.md:17 のコメントが公開ページ :61 に逐語で出ている)。本家への連絡事項や本家の内部スクリプトの行番号が公開される状態だった。原稿の HTML コメントは 0 件にした。測定日を実測に合わせて統一
2026-09-23 公開 API 件数の測定日を、証跡のある 2026-09-21 に直した。容量の表の測定日を冒頭 (2026-09-22) に揃えた。更新履歴の「未報告の…」という書き方を外した (公開ページに出るため)
2026-09-23 本家の API リファレンスから引いた一文を逐語に直した (以前は要約を「」で囲んでいた)
2026-09-23 重要: GitHub の Releases は 10 進の MB で表示する (577 MiB が 605 MB に見える) という説明は逆でした。Releases の画面は 1,048,576 バイト単位で表示するので 577 MB と見える。API のバイト数と画面の表示を突き合わせて確認
2026-09-23 本家ヘッダの英文を訳して「」で示していた箇所を、英語の原文の引用に改めた (訳は括弧で添えた)
2026-09-23 原文でないもの (当方の要約、表の読み方、節の呼び名) を「」で括っていた箇所を地の文に改めた。コンパイラの文言は原文どおりに直した
2026-09-23 見出し帯の文字列の測定日を、記録のある 2026-09-21 に直した
2026-09-23 Windows 11 での直近の確認日を 2026-09-23 に改めた (同日に組み直した配布物で展開実行検査が PASS)
2026-09-23 export の件数が blink / blink_ で始まる名前だけの数であることを明記した。公開 API の前方宣言を自分で書いたときの挙動を訂正 (clang では警告で、止まるのは -Werror / /WX のとき)
2026-09-23 export 全体の件数 (Windows / Linux) を外した (数え方が両者で揃っていなかった)。前方宣言の注意を、ヘッダと自前の宣言が同じ翻訳単位に並んだときの話に限った (自前の宣言だけなら警告は出ない。clang で確認、cl.exe は未確認)
2026-09-23 行分割の差について、BlinkGTK の改変が無いためではない、と書いていたのを訂正。本体の実測は 153 だけで (上流のフラグの ON / OFF は両方測っている)、そこではフラグ ON なら改変は値を動かさない。フラグを持たない 152 では改変が無いことも差になりうる。ZIP の正確な大きさは verify.json にあり、SHA256SUMS はハッシュのみと正した。大きさの測定日を 09-23 に。描画を受け取る側の呼び方を一般的な言い方に改めた。履歴から export 全体の件数を外した
2026-09-23 本体の計測の範囲 (153 のみ、合成ページ・フォント 2 種。症状は span を含む場合) を明記。検証用のハーネスからのみ、を BlinkGTK のツリー内に限った。本家ヘッダの引用に原文に無い強調を付けていたのを外した
2026-09-23 Linux 版との違いの表で、既定の縦組みの版面を「差はありません」と断定し、下の注記 (2) と食い違っていた。列格子 snap の差に限った。注記の見出しを「一致しません」から「一致する保証はありません」に弱めた (実画での比較はしていない)
2026-09-23 直前の履歴行が縦組みの行のある表を取り違えていた (動作条件の表ではなく Linux 版との違いの表) のを直した。冒頭のファイル数を同梱文書の本数に改めた (本文にファイル数は無い)
2026-09-24 同梱する実行ファイルを simple_browser から blinkgtk_browser に替えたのに合わせて改めた (本体と同じ決まり: simple_browser は開発用のデモで配布物に入れない)。重要: SmartScreen を再現できない理由として挙げていた Defender の除外は、実際には入っていなかった (2026-09-24 実測。同日 C:\chromium を除外に追加)。再現できない理由は Mark of the Web が付かないことなので、除外の記述を外した
2026-09-24 本家の文書検査の指摘 (2026-09-24) を反映: Linux との比較は比べた時点の最新 1.2.2-build6 (Chromium 153) とのものと明記し、1.2.3-build1 (Chromium 154、2026-09-24 公開) との比較はしていないと書いた。new_with_profile は 1.2.2-build6 の目玉と改めた。引用した本家ヘッダの英文が 1.2.3 にも同じ形で残ることを確かめて書き添えた。絵文字を言葉に置き換えた (注意: / 重要:)。実測日を 2026-09-24 に更新