Adwaita
User Manual
·
GitHub
·
Contributor Docs
Adwaita is a framework for creating user interfaces for GNOME with an API similar to SwiftUI.
The following code:
struct Example: View {
@State private var count = 0
var view: Body {
Text("\(count)")
.style("title-1")
.padding(50)
.topToolbar {
HeaderBar.start {
Button(icon: .default(icon: .goPrevious)) {
count -= 1
}
Button(icon: .default(icon: .goNext)) {
count += 1
}
}
}
}
}
Creates a simple counter view:
More examples are available in the demo app:
Table of Contents
Goals
Adwaita’s main goal is to provide an easy-to-use interface for creating GNOME apps. The backend should stay as simple as possible, while not limiting the possibilities there are with Libadwaita and GTK.
If you want to use Adwaita in a project, but there are widgets missing, open an issue on GitHub.
Widgets
Name |
Description |
Widget |
Button |
A widget that triggers a function when being clicked. |
GtkButton |
EitherView |
A widget that displays one of its child views based on a boolean. |
GtkStack |
HeaderBar |
A widget for creating custom title bars for windows. |
GtkHeaderBar |
Text |
A widget for displaying a small amount of text. |
GtkLabel |
VStack |
A widget which arranges child widgets into a single column. |
GtkBox |
HStack |
A widget which arranges child widgets into a single row. |
GtkBox |
List |
A widget which arranges child widgets vertically into rows. |
GtkListBox |
Menu |
A widget showing a button that toggles the appearance of a menu. |
GtkMenuButton |
NavigationSplitView |
A widget presenting sidebar and content side by side. |
AdwNavigationSplitView |
ScrollView |
A container that makes its child scrollable. |
GtkScrolledWindow |
StatusPage |
A page with an icon, title, and optionally description and widget. |
AdwStatusPage |
StateWrapper |
A wrapper not affecting the UI which stores state information. |
- |
View Modifiers
Syntax |
Description |
inspect(_:) |
Edit the underlying GTUI widget. |
padding(_:_:) |
Add empty space around a view. |
hexpand(_:) |
Enable or disable the horizontal expansion of a view. |
vexpand(_:) |
Enable or disable the vertical expansion of a view. |
halign(_:) |
Set the horizontal alignment of a view. |
valign(_:) |
Set the vertical alignment of a view. |
frame(minWidth:minHeight:) |
Set the view’s minimal width or height. |
frame(maxSize:) |
Set the view’s maximal size. |
transition(_:) |
Assign a transition with the view that is used if it is a direct child of an EitherView. |
onUpdate(_:) |
Run a function every time a view gets updated. |
navigationTitle(_:) |
Add a title that is used if the view is a direct child of a NavigationView. |
style(_:) |
Add a style class to the view. |
onAppear(_:) |
Run when the view is rendered for the first time. |
topToolbar(visible:_:) |
Add a native toolbar to the view. Normally, it contains a HeaderBar. |
bottomToolbar(visible:_:) |
Add a native bottom toolbar to the view. |
modifyContent(_:modify:) |
Replace all occurrences of a certain view type with another view. |
stopModifiers() |
Ignore all the modifyContent(_:modify:) modifiers from higher above in the view tree. |
Button
Modifiers
Syntax |
Description |
keyboardShortcut(_:window:) |
Create a keyboard shortcut for the window with the button's action. |
keyboardShortcut(_:app:) |
Create a keyboard shortcut for the application with the button's action. |
Syntax |
Description |
headerBarTitle(view:) |
Customize the title view in the header bar. |
List
Modifiers
Syntax |
Description |
sidebarStyle() |
Change the style of the list to match a sidebar. |
Window Types
Name |
Description |
Widget |
Window |
A simple application window. |
AdwApplicationWindow |
Window Modifiers
Syntax |
Description |
appKeyboardShortcut(_:action:) |
Create a keyboard shortcut available in the whole the application. |
quitShortcut() |
Create a keyboard shortcut for quitting the application with "Ctrl + q". |
Window
Modifiers
Syntax |
Description |
keyboardShortcut(_:action:) |
Create a keyboard shortcut available in one window. |
closeShortcut() |
Create a keyboard shortcut for closing the window with "Ctrl + w". |
overlay(windows:) |
Add windows that attach to a window of this type when being presented. |
Name |
Description |
Widget |
MenuButton |
A button in a menu. |
GMenuItem |
MenuSection |
A collection of menu widgets grouped with lines. |
GMenuItem |
Submenu |
A collection of menu widgets grouped by navigation. |
GMenuItem |
Syntax |
Description |
keyboardShortcut(_:) |
Assign a keyboard shortcut to the button's action. |
Installation
Dependencies
If you are using a Linux distribution, install libadwaita-devel
or libadwaita
(or something similar, based on the package manager) as well as gtk4-devel
, gtk4
or similar.
On macOS, follow these steps:
- Install Homebrew.
- Install Libadwaita (and thereby GTK 4):
brew install libadwaita
Swift Package
- Open your Swift package in GNOME Builder, Xcode, or any other IDE.
- Open the
Package.swift
file.
- Into the
Package
initializer, under dependencies
, paste:
.package(url: "https://github.com/david-swift/Adwaita", from: "0.1.0")
Usage
Basics
Advanced
Thanks
Dependencies
Other Thanks