Module

Gjs

Modules

gjs/cairo
gjs/console
gjs/dom
gjs/gettext
gjs/gjs
gjs/system

Readme

Gjs

version downloads/week

GJS TypeScript type definitions for Gjs using ts-for-gir v5.2.0.

GJS is GNOME's JavaScript runtime. With these type definitions your editor knows the GTK API: it type-checks calls, completes method names, and shows the upstream C documentation inline.

Install the type definitions with npm:

npm install @girs/gjs

Import it like any other module:

import Gjs from '@girs/gjs';

For CommonJS:

const Gjs = require('@girs/gjs');

After the import, the global types of GJS are also available:

import '@girs/gjs';

print('Hello World from print');

const ByteArray = imports.byteArray;

// And so on...

Some types that conflict with the DOM are outsourced to allow frameworks like Gjsify to rebuild the DOM API without causing type conflicts. Import them explicitly:

import '@girs/gjs/dom';

console.log('Hello World from console');

const encoder = new TextEncoder();
const encoded = encoder.encode('𝓽𝓮𝔁𝓽');

setTimeout(() => {
// ...
}, 1000);

// And so on...

These collide with the DOM types. Exclude the DOM lib in your tsconfig.json or jsconfig.json, or set noLib.

GJS's built-in ambient modules are importable too. For this you need to include the @girs/gjs or @girs/gjs/ambient in your tsconfig or entry point Typescript file:

index.ts:

import '@girs/gjs'

tsconfig.json:

{
"compilerOptions": {
...
},
"include": ["@girs/gjs"],
...
}

gettext, system and cairo now resolve as ESM imports, with types:

import gettext from 'gettext';
import system from 'system';
import cairo from 'cairo';

If you want to have types for GObject Introspection modules, you have to add them to your dependencies and import them as well, see the description of these modules, e.g. gtk-4.0, gio-2.0, adw-1 and much more.

These types will then be available to you:

import '@girs/gjs'
import '@girs/gjs/dom'
import '@girs/gio-2.0'
import '@girs/gtk-4.0'
import '@girs/adw-1'

import Gio from 'gi://Gio?version=2.0';
import Gtk from 'gi://Gtk?version=4.0';
import Adwaita from 'gi://adw?version=1';

const button = new Gtk.Button();

// ...

Most projects want a bundler. esbuild is the smallest thing that works; the examples directory has setups for several others.

All existing pre-generated packages can be found on gjsify/types.