Version: 1.2.2-build6 / Language: English | 日本語
BlinkGTK is a component for building screens with web
technology. Screens written in
HTML, CSS and JavaScript are embedded in, and run inside, a Linux
application.
The screenshots we publish are of an e-book reader, which may make
this look like a
library for reading Japanese books. That is one use. This document looks
at
the uses first, then closes with the properties
that do the work across
all of them — grounded in features that actually exist.
AI is no longer a research topic. Document summarisation and
translation,
meeting transcription, OCR for scanned paperwork, inspection-image
classification, conversational guidance at service counters — it
is
becoming standard equipment in everyday software. And much of
it is also
published in a form that runs inside a browser: web inference built
on
WebAssembly and WebGPU, with a growing ecosystem of in-browser runtimes
such
as Transformers.js and ONNX Runtime Web.
BlinkGTK brings that same foundation into a desktop
application as a
single GTK widget. Which means this: entering the AI
field does not
require building a machine-learning stack from scratch. You can start
by
running, inside your own application, what already runs on the
web.
Imagine the screens you could build:
The common strength is a single one: serve the model from
inside the
machine over a custom URL scheme, and the inference inputs never leave
the
device. The stronger the privacy or confidentiality barrier in
a field,
the more on-device AI is worth there.
The first steps are concrete, too:
GPU-backed inference (WebGPU) depends on the hardware and
driver
combination; as with the automotive section, verify on the real
device.
This project itself is researching whether Japanese page layout can
be
accelerated with WebGPU — experiment reports from the similarly curious
are
welcome.
On a device the public touches, the requirement is that the
screen does not leave the
state you intended. Close operations off with
BLINK_CONTENT_POLICY_KIOSK, take the
screen fullscreen, and serve on-device content through a custom scheme —
the pieces map
directly.
Authoring the display in HTML also helps upkeep: changing what is
shown is a content
swap, not an application rebuild.
Rich, continuously moving screens in an embedded device — the
requirements of
entertainment hardware are one of the shapes BlinkGTK is best at.
With both GPU (EGL) and software rendering available, you can match
the
cabinet's GPU configuration. As everywhere else, verify on the
real
device — rendering performance depends on the hardware and the
screen
design.
In-vehicle screens must keep working when connectivity
drops. Serving from the device
through a custom scheme means display still succeeds out of coverage.
Scale control suits
switching between at-distance legibility while moving and close-up
operation when parked.
Both GPU and software rendering paths exist, which leaves room to run
on automotive SoCs
with constrained GPU configurations. Verification on the actual
hardware is essential
— the rendering path depends on the hardware and compositor
combination.
Authoring a device's control panel in HTML means the same
screen can serve both on the
device and in a browser at hand. BlinkGTK covers the on-device
side.
There is a path from JavaScript into your C code
(blink_web_view_execute_javascript()
and script injection), so the web screen can be wired to hardware
control.
To be clear first: BlinkGTK cannot warrant conformance as a
medical device.
Regulatory compliance belongs to whoever builds the equipment. What
follows is only
which features answer requirements commonly seen in
that field.
| Common requirement | Feature |
|---|---|
| Never reach an external network | On-device delivery via custom scheme |
| Restrict operations (guard against mistakes) | Per-operation content policy |
| Record what was displayed | blink_web_view_capture_screenshot() |
| Reproducibility of the display | Version obtainable at runtime and recordable |
For visualising measurement data or GUIs for research instruments —
outside regulatory
scope, where the need is simply "render graphs and tables well" — it is
straightforward.
This is where we have the most experience today. Vertical writing,
ruby, emphasis marks,
combined upright text and line-breaking rules are handled by Chromium's
rendering engine
as-is.
What works and what does not is documented version by version, with
measurements, in
Chromium 147 → 152. In
Chromium 151, for instance,
emphasis marks no longer grow the line pitch when the
leading has room.
In the current Chromium 153, placing a ruby annotation without
inflating the
line height is on by default, and ruby placement itself has
been rebuilt
(it does not apply in multi-column vertical writing — see the link
above).
Here is what has been doing the work across all the uses above. Even
for a use
we did not list, these six properties are how to judge whether BlinkGTK
fits.
blink_web_view_register_custom_scheme() registers
your own URL scheme. A URL like
myapp://screen/main is handed to a function in your
application, which returns the
content — so content already on the device is served
directly.
No web server, no outbound connection. This matters for devices on
closed networks, for
equipment operating out of radio coverage, and for environments where
connectivity is
not permitted.
blink_web_view_set_content_policy() disables individual
operations on the page.
| Constant | Disables |
|---|---|
BLINK_CONTENT_POLICY_NO_COPY |
Copying to the clipboard |
BLINK_CONTENT_POLICY_NO_SAVE |
Saving the page |
BLINK_CONTENT_POLICY_NO_PRINT |
Printing |
BLINK_CONTENT_POLICY_NO_CONTEXT_MENU |
The context menu |
BLINK_CONTENT_POLICY_NO_DEVTOOLS |
Developer tools |
BLINK_CONTENT_POLICY_NO_SELECTION |
Text selection |
BLINK_CONTENT_POLICY_NO_SCREENSHOT |
Screen capture |
BLINK_CONTENT_POLICY_NO_DRAG |
Extraction by dragging |
BLINK_CONTENT_POLICY_KIOSK applies them
together. It answers the problem of
"browser features" surfacing on a device the general public touches.
blink_web_view_set_javascript_dialog_handler() lets the
application intercept and
replace alert() and confirm() raised
by the page — so an unattended device does not
stall behind a dialog nobody can dismiss.
blink_web_view_set_fullscreen_handler() and
blink_web_view_is_fullscreen() control
fullscreen presentation. blink_web_view_set_zoom_level()
changes the display scale, so
the same content can serve both a screen read from a distance
and one operated by hand.
The C API is exposed as GObject, and GObject Introspection typelibs
(.gir / .typelib)
ship with the distribution. Python (PyGObject), Rust, C++,
JavaScript (GJS), Vala and
Go can call the same API with no extra binding layer.
Between the screen (JavaScript) and the application (C and friends)
runs a
two-way bridge — messages from JavaScript to C
(app integration
API), script
execution and injection from C to JavaScript. Which means: any
device you
can reach from C, the screen can use. Printers, cameras,
sensors, IC-card
readers, payment terminals, serial devices — what you attach around
the
terminal is your application's choice.
BlinkGTK tracks upstream Chromium (currently 153.0.8010.36). New
CSS,
WebAssembly, WebGPU — the web platform's evolution arrives with
version
updates, without swapping engines. What became possible in which version
is
recorded, with measurements, in the
Chromium feature
history.
BlinkGTK was first shown publicly at Interop Tokyo 2026 (Makuhari Messe).
The above explains "these features exist, so these uses should fit" —
it is
not a list of deployments. If you have built something
with BlinkGTK, please send
screenshots to the
call for
submissions.
What belongs here is what is actually running, not what we imagine.
For extensions targeting a specific environment —
support for unusual
hardware, built-to-order features, or an accompanied proof of concept —
we
take on custom development at blinkgtk.com. If the
standard distribution does not reach your requirement, start with
a
conversation.