GNOME Gtk+ bindings for NodeJS
npm install node-gtk
GNOME Gtk+ bindings for NodeJS
Node-Gtk is a gobject-introspection library for nodejs. It makes it possible to
use any introspected library, such as Gtk+, usable. It is similar in essence to GJS or PyGObject. Please note this project is currently in a _beta_ state and is being developed. Any contributors willing to help
will be welcomed.
Supported Node.js versions: 20, 22, 24 (other versions may work but are untested)
Pre-built binaries available for: Linux, macOS
- Usage
- Documentation
- Installing and building
- Target Platforms
- Requirements
- How to build on Ubuntu
- How to build on Fedora
- How to build on ArchLinux
- How to build on macOS
- How to build on Windows
- Testing the project
- Browser demo
- Contributing
Below is a minimal example of how to use the code, but take a look at
our template or at
react-gtk to bootstrap your
project.
``javascript
const gi = require('node-gtk')
const Gtk = gi.require('Gtk', '3.0')
gi.startLoop()
Gtk.init()
const win = new Gtk.Window()
win.on('destroy', () => Gtk.mainQuit())
win.on('delete-event', () => false)
win.setDefaultSize(200, 80)
win.add(new Gtk.Label({ label: 'Hello Gtk+' }))
win.showAll()
Gtk.main()
`

See our examples folder for more examples, and in particular the
browser demo source for
a more complex application.

Note that prebuilt binaries are available for common systems, in those cases building is not necessary.
##### Target Platforms
- Linux: prebuilt binaries available
- macOS: prebuilt binaries available
- Windows: no prebuilt binaries
- gitnodejs@10
- or higherpython3
- (for node-gyp)gcc@8
- C compiler ( or higher, or clang)
Install basic dependencies.
`sh`
sudo apt-get install \
build-essential git \
gobject-introspection \
libgirepository1.0-dev \
libcairo2 \
libcairo2-dev
At this point npm install node-gtk should already install, fallback and build node-gtk without problems.
Install basic dependencies:
`sh`
sudo dnf install \
@development-tools \
nodejs \
nodejs-devel \
gobject-introspection \
gobject-introspection-devel \
gtk3 \
gtk3-devel \
cairo \
cairo-devel
After installing of packages, run npm install node-gtk.
The following should be the bare minimum to be able to build the project.
`sh`
pacman -S --needed \
base-devel git \
nodejs npm \
gtk3 gobject-introspection \
cairo
Feel free to install all base-devel utilities.
After installing those packages, npm install node-gtk would do.
Assuming you have brew installed, the following has been successfully tested on El Captain.
`sh`
brew install git node gobject-introspection gtk+3 cairo
At this point npm install node-gtk should already install, fallback and build node-gtk without problems.
Mandatory dependency is Visual C++ Build Environment: Visual Studio Build Tools (using "Visual C++ build tools" workload) or Visual Studio Community (using the "Desktop development with C++" workload).
The easiest/tested way to build this repository is within a _MinGW shell_ provided by the MSYS2 installer.
Once VS and its C++ compiler is available and MSYS2 installed, launch the MinGW shell.
`shupdate the system
in case of errors, wait for the update to complete
then close and open again MingW shell
pacman -Syyu --noconfirm
The
GYP_MSVS_VERSION could be 2017 or above.
Please verify which version you should useThe below blog post series will help you get started:
1. Node.js GTK Hello World on Windows
2. Find DLLs and Typelibs dependencies for Node.js GTK Application on Windows
3. Package Node.js GTK Application on Windows
#### Possible issue on MinGW shell
In case you are launching the general executable without knowing the correct platform,
the binary path might not be available.
In such case
python won't be available either, and you can check via which python command.If not found, you need to export the platform related binary path:
`sh
example for the 32bit version
export PATH="/mingw32/bin:$PATH"
npm run install
`This should do the trick. You can also check if there is any python at all via
pacman -Qs python.$3
If you'd like to test everything builds and work properly, after installing and building you can run any of the
examples:
`sh
node ./examples/hello-gtk.js
`If you'll see a little window saying hello that's it: it works!
Please note in macOS the window doesn't automatically open above other windows.
Try Cmd + Tab if you don't see it.
#### Browser demo
If you'd like to test
./examples/browser.js you'll need WebKit2 GTK+ libary.- in Ubuntu, you can
apt-get install libwebkit2gtk-3.0 (4.0 works too) and try it out.
- in Fedora, you should run sudo dnf install webkit2gtk3
- in ArchLinux, you can pacman -S --needed webkitgtk and try it out.
- in macOS, there is no way to run it right now because webkitgtk was removed from homebrewOnce installed, you can
./examples/browser.js google.com or any other page, and you might try the _dark theme_ out too:`sh
macOS needs to have the Adwaita theme installed
brew install adwaita-icon-theme
Usage: ./examples/browser.js [theme]
./examples/browser.js google.com dark
`Contributing
If you'd like to help, we'd be more than happy to have support. To setup your development environment, you can
run
npm run configure. You can then build the project with npm run build. To generate the compile_commands.json
for LSP to work nicely, you can use bear as bear -- npm run build`. - https://developer.gnome.org/gi/stable/index.html
- https://v8docs.nodesource.com/
- https://github.com/nodejs/nan#api
There is a Discord channel but it receives little monitoring, use github issues or
discussions preferably.