Skip to content

Coverage

This page answers one question before you start building: is the thing I need already there?

Expand a category to see every module or standard with its status.

  • Full means the part a normal app touches works.
  • Partial means the core works and the specific corners that do not are named in the entry.
  • Stub means it resolves so a dependency check passes, but does nothing.
  • Planned means it is in scope and not built yet.
  • Out of scope means it makes no sense in a desktop GTK app and will not be built.

The pillar totals are regenerated from the project’s own status data on every site build, so they cannot drift from it. The three inventories under them are curated by hand, and we run more real-world packages end to end than the selection shown here, so read a missing entry as “not listed”, never as “not supported”.

What the numbers measure is the APIs gjsify implements itself, on top of GNOME libraries. There are most of them on GJS, which has no node:fs, no fetch and no <canvas> of its own. Node, Bun and Deno have all three, so a --app node build takes them straight from the runtime and most of the Node and Web entries below never enter that bundle. A few entries are gjsify’s own code on every runtime, because no JavaScript runtime ships them at all, DOMParser, <canvas> and WebGL among them. The Adwaita, framework and tooling entries are runtime-independent to begin with.

For what is validated on Node.js, Bun, Deno and in the browser, see Runtimes; for which operating systems each native bridge reaches, see Platform Support.

Project Coverage

190 of 193 pillar entries implemented

Every category of the project status snapshot, rendered as a live progress bar. The data file is regenerated from the status data and the package manifests on every build, so the bars never lag behind reality.

98% 173 full 17 partial 3 stub
38 / 41 (93%) 20 / 20 (100%) 5 / 5 (100%) 2 / 2 (100%) 22 / 22 (100%) 6 / 6 (100%) 3 / 3 (100%) 24 / 24 (100%) 9 / 9 (100%) 24 / 24 (100%) 37 / 37 (100%)

Node.js API Coverage

38 of 41 Node.js modules

User-facing Node modules backed by GLib, Gio, Soup, and native Vala bridges. 3 deprecated or browser-irrelevant modules ship as stubs so dependency checks resolve.

93% 33 full 5 partial 3 stub
4 / 4 Full Full Full Full 8 / 8 Full Full Full Server + ClientRequest + Agent Full Full h2 via ALPN; pushStream/respondWithFD/respondWithFile via @gjsify/http2-native (libnghttp2) Full Full npm ws drop-in; Autobahn 510 OK / 0 FAIL Partial 4 / 4 Full Full Full Full 1 / 1 Full 3 / 4 Full Cross-process IPC, file-based workers Partial Full Stub 6 / 6 Full Full Full Full Full Full 9 / 11 Full Full Full Full Full Full GLib-source-safe (GLib.timeout_add) Full Full Deprecated alias for util Full Stub Deprecated by Node Stub 1 / 1 Partial 2 / 2 runInThisContext via eval; no realm isolation Partial Wire-format v15 serialize/deserialize; no heap snapshot or CPU profile Partial

Web Platform Coverage

34 of 59 web standards

Coverage of relevant W3C and WHATWG standards, including 10 APIs that are explicitly out of scope for desktop GTK apps (Service Worker, FS Access, Web Bluetooth, …).

58% 32 full 2 partial 15 planned 10 out of scope
5 / 5 Full Full Full Full Full 1 / 5 localStorage + sessionStorage Full libgda could back Planned Planned Service Worker companion Out of scope Browser sandbox; GTK uses Gio.File directly Out of scope 5 / 5 Full Full Full Full Full 1 / 1 Full 4 / 5 Full Full Full Full scheduler.postTask — GLib idle could back Planned 2 / 4 file-based; no DOM-Worker shim Partial Full Browser multi-tab concept Out of scope HTTP cache proxy — irrelevant for GTK apps Out of scope 4 / 7 Phase 1: AudioContext + Source + Gain Partial Full Full Full GStreamer encodebin could back Planned no GNOME backend yet — multi-year effort Planned Native apps use ALSA/JACK directly Out of scope 4 / 8 Full Full Full Full Needed for Adwaita component composition Planned Planned Browser render-pipeline specific Out of scope Planned 2 / 5 Full Full Gdk.Seat.grab could back Planned GTK apps use BlueZ directly Out of scope Native apps use libusb/udev directly Out of scope 3 / 5 Full Full Full Trivial via Blob+streams Planned GTK uses Gio.File directly Out of scope 3 / 3 Full Full Full 0 / 3 Gio.Notification candidate Planned GeoClue2 + consent dialog Planned Planned 0 / 3 GLib.Mutex async wrapper Planned Planned Service Worker tier Out of scope

Integration Tests

22 npm packages, end-to-end

Real-world libraries whose own test suites (or a curated subset) run unmodified against @gjsify/*. Catches regressions that polyfill-internal tests would miss.

Parsing

acorn minify-xml gettext-parser

Build tooling

deepkit-type-compiler rolldown-native GJS rollup-pluginutils lightningcss ts-for-gir

Filesystem

fast-glob pkg-types cosmiconfig

Language core

effect

Process & CLI

execa yargs

Networking

axios socket.io autobahn mcp-typescript-sdk mcp-inspector-cli

Streams & workers

streamx worker-stress

Peer-to-peer

webtorrent
  • A partial module is often good enough. Its entry names exactly what is not there.
  • If a global is the problem rather than a module, one build flag usually fixes it. How It Works walks through it.
  • Otherwise, open an issue on GitHub and say which package you are trying to run. That is the signal that moves things up the list.