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: 16, 18 (other versions should work but are untested)
Pre-built binaries available for: Linux, macOS (all supported versions except 18)
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.
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.
git
nodejs@10
or higherpython3
(for node-gyp
)gcc@8
or higher, or clang
)Install basic dependencies.
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:
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.
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.
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.
# update the system
# in case of errors, wait for the update to complete
# then close and open again MingW shell
pacman -Syyu --noconfirm
# install git, gtk3 and extra dependencie
pacman -S --needed --noconfirm git mingw-w64-$(uname -m)-{gtk3,gobject-introspection,pkg-config,cairo}
# where to put the repository clone?
# pick your flder or use ~/oss (Open Source Software)
mkdir -p ~/oss/
cd ~/oss
# clone node-gtk there
git clone https://github.com/romgrk/node-gtk
cd node-gtk
# don't include /mingw64/include directly since it conflicts with
# Windows SDK headers. we copy needed headers to __extra__ directory:
./windows/mingw_include_extra.sh
# if MSYS2 is NOT installed in C:/msys64 run:
export MINGW_WINDOWS_PATH=$(./windows/mingw_windows_path.sh)
# first run might take a while
GYP_MSVS_VERSION=2017 npm install
The GYP_MSVS_VERSION
could be 2017 or above.
Please verify which version you should use
The below blog post series will help you get started:
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:
# 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
.
If you'd like to test everything builds and work properly, after installing and building you can run any of the examples:
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.
If you'd like to test ./examples/browser.js
you'll need WebKit2 GTK+ libary.
apt-get install libwebkit2gtk-3.0
(4.0
works too) and try it out.sudo dnf install webkit2gtk3
pacman -S --needed webkitgtk
and try it out.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:
# macOS needs to have the Adwaita theme installed
# brew install adwaita-icon-theme
# Usage: ./examples/browser.js <url> [theme]
./examples/browser.js google.com dark
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
.
Don't hesitate to join our Discord channel.