Atlas Framework
The shared base of every Atlas app, with the Atlas.Ui QML controls, the icon fonts, the Rust crates for startup, settings, logging and system work, and the app template.
Atlas Framework is what every Atlas app is built on, so they all look and behave the same. AtlasOS installs it once and every app uses that copy. It runs on Qt 6.11 and KDE Frameworks 6 on Fedora 44.
Which library to use
| You want to | Use |
|---|---|
| Build the app's interface: windows, pages, buttons, fields, lists, tables, dialogs, charts | Atlas.Ui, the QML module (import Atlas.Ui) |
| Show an icon | Symbols: Symbol { icon: Symbols.Home } draws Material Symbols |
| Name the app, read its settings file, log to the journal | atlas-framework-core |
| Start a GUI app: app ID, one instance per session, crash hooks, the Atlas.Ui version check | atlas-framework-ui |
| System work: crash reports, update history, bootc state, polkit checks, desktop notifications | atlas-framework-system |
| Flatpak updates | atlas-framework-flatpak |
| Start a new app | The app template |
A small app needs only Atlas.Ui and atlas-framework-ui, which brings in atlas-framework-core. Add the other crates only when the app does that kind of work.
Getting started
- Copy the app template and rename it. It builds on its own: a Rust backend through CXX-Qt, a QML interface on Atlas.Ui, and one line of C++ that starts the app.
- Build on Fedora 44 with the
atlas-uipackage installed. Atlas.Ui is a QML module next to Qt's own, so the app writesimport Atlas.Uiand links nothing. - Build pages from AtlasWindow, AtlasPage and the controls. Colours, spacing, fonts and motion come from AtlasStyle, never hard-coded.
- Run the framework's checks on the app (
tools/lint-app.shandtools/check-app-names.shfrom the framework repository) in its CI.
import QtQuick
import Atlas.Ui
AtlasWindow {
title: qsTr("Hello")
width: 640
height: 480
visible: true
AtlasPage {
anchors.fill: parent
title: qsTr("Hello")
PrimaryButton {
text: qsTr("Say hello")
symbol: Symbols.WavingHand
onClicked: console.log("hello")
}
}
}Versions
Atlas.Ui only ever adds API: a type, property, signal, function, enum value or symbol name is never renamed or removed in a later version. Each page says which version added it (since). An app declares the oldest Atlas.Ui it works with (ui: in app!), and at startup it refuses to run on an older one, with a plain message instead of a broken window.
Libraries
- Atlas.UiThe QML module every Atlas app imports, with windows, pages, buttons, fields, lists, dialogs, charts and the style and services behind them; how to install it, check it and find a type.126 pages
- SymbolsGoogle's Material Symbols as fonts, drawn with the Symbol type and named by Symbols.Name: styles, filled and outline, size, colour and how to find a name.1 page
- atlas-framework-coreThe small Rust crate every Atlas app uses, with app identity, the settings file, journal logging, os-release and a safe append helper, and no Qt or async runtime.5 pages
- atlas-framework-uiThe Rust crate that starts every Atlas GUI app, with the app! macro, the C functions main.cpp calls, one instance per session, journal logging, crash hooks and the Atlas.Ui version check.3 pages
- atlas-framework-systemThe Rust crate for Atlas system apps, with opt-in crash reports, AtlasOS state (bootc status, boot history, update events), polkit checks for root helpers and desktop notifications.7 pages
- atlas-framework-flatpakThe Rust crate for Flatpak updates through libflatpak, used by Atlas Updater and the future Atlas Store, with update listing, update runs and a check for newly requested permissions.2 pages
- App templateA minimal Atlas app to copy: a Kirigami window on Atlas.Ui, one Rust QObject exposed through CXX-Qt, built with CMake and Corrosion on the framework's crates.3 pages