Skip to content

Overview

GJSify is a TypeScript framework for native Linux apps. You build GTK 4 / Adwaita applications, games and CLI tools against the APIs you already know — Node.js modules, Web standards, the DOM — and GJSify maps them onto the GNOME platform.

The runtime is a build-time decision, not an architecture decision:

  • On GJS, GNOME’s JavaScript runtime, GJSify implements the Node.js and Web APIs on top of Gio, libsoup, Cairo and friends.
  • On Node.js, Bun and Deno, GJSify implements the GJS side — gi:// imports and the GObject type system — through the node-gi reverse bridge, which runs the same unchanged GObject-Introspection code on Linux, macOS and Windows.
  • In the browser, the same source runs as a web app, with the Adwaita design system carried over as Web Components.

This also makes GJSify a bridge between the web and the native desktop in both directions: web code runs inside native GTK windows, and the native look and feel travels to the web. See Runtimes for the full picture of what runs where.

What makes GJSify different

Three worlds, one runtime

GNOME, Node.js, and the Web have lived in separate runtimes for a decade. GJSify dissolves the boundary — every API lands inside one SpiderMonkey process and shares the same memory, the same event loop, the same GTK main context.

For example

Ship a browser game engine — without shipping a browser.

Excalibur.js renders directly into a Gtk.GLArea through GJSify's WebGL bridge. Pointer, keyboard, and gamepad input flows through GTK4 event controllers, dispatched as W3C DOM events. Audio runs on GStreamer through the Web Audio API. The whole game lives in one process — the same one that draws the Adwaita window around it. No WebKit.WebView, no IPC bridge, no embedded Chromium.

Electron app ~150 MB Chromium runtime · separate renderer process · webContents bridge · X11/Wayland double-buffered
GJSify app Stock GJS · single process · native GTK4 widgets · uses the GNOME runtime the user already has installed
  • Getting Started — scaffold and run your first app
  • Runtimes — GJS, Node.js, Deno, Bun and the browser: what runs where
  • How It Works — the build pipeline: auto-aliasing, --globals auto, native prebuilds
  • Coverage — how complete the Node, Web and bridge surfaces already are
  • Showcases — end-to-end apps that run unchanged on GJS and in the browser