Gnim

November 22, 2025 ยท View on GitHub

Library which brings JSX and reactivity to GNOME JavaScript.

If you are not already familiar with GJS and GObject, you should read gjs.guide first.

This library provides:

Obligatory Counter Example

function Counter() {
  const [count, setCount] = createState(0)

  function increment() {
    setCount((v) => v + 1)
  }

  createEffect(() => {
    console.log("count is", count())
  })

  return (
    <Gtk.Box spacing={8}>
      <Gtk.Label label={count((c) => c.toString())} />
      <Gtk.Button onClicked={increment}>Increment</Gtk.Button>
    </Gtk.Box>
  )
}

Templates