Skip to content

Gtk

Your app is a GTK 4 program, and Libadwaita adds a design system on top of GTK instead of replacing it — so a GNOME app draws widgets from both. There is no Adw.Entry, no Adw.DropDown and no Adw.MenuButton. An app that needs one uses GTK’s own widget, and the Adwaita stylesheet paints it.

This section holds those widgets: Gtk.Entry is here and Adw.EntryRow is under Adwaita, and the two are different widgets one namespace apart.

Which library a widget is documented under

A widget is documented under the library that owns its GType, which is the rule @gjsify/gtk-host already uses to name its tags.

These pages read like the Adwaita ones, three windows per widget with the Blueprint beside the TypeScript, as How a widget page reads explains. Blueprint is the way to lay these widgets out too, with the same setup.

On the desktop the widgets come from the GTK 4 library already installed on the machine. @girs/gtk-4.0 is the type package for it, and nothing else is needed:

TypeScript
import Gtk from 'gi://Gtk?version=4.0';
const entry = new Gtk.Entry({ placeholderText: 'Search files…' });

In the browser and on a phone these widgets come from the same packages as the Adwaita ones, installed the same way, and the GType rule names them there too: Gtk.Entry is <gtk-entry> and Gtk.MenuButton is <gtk-menu-button> in @gjsify/adwaita-web, and Gtk.Entry and Gtk.MenuButton in @gjsify/adwaita-nativescript. Both export them from a Gtk namespace. What makes them look Adwaita is the stylesheet, not the widget.

HTML
<gtk-entry placeholder="Search files…"></gtk-entry>
The namespaces beside `Gtk`

Both ports export Gtk beside Adw and a Gio namespace that holds Gio.Menu, which is what a menu button’s model takes, and Gtk.StringList and Gtk.Adjustment for the widgets that need them.

Everything libadwaita ships has its own section: boxed lists and their rows, header bars and clamps, split views, view switchers, avatars, banners and dialogs. Start at Adwaita.

The Adwaita Storybook carries both sets in one component browser you can poke at. Run it as a native window with gjsify storybook.