Skip to content

The Linux desktop has excellent documentation. It is also spread across a dozen projects. This page collects the sources worth bookmarking, with a bias toward primary documentation and maintained projects.

Resource Why it matters
freedesktop.org specifications The index of XDG, desktop entry, MIME, icon, trash, notification, and MPRIS specs
XDG Base Directory Where config, data, state, cache, and runtime files belong
Desktop Entry The .desktop file format
Shared MIME-info File type detection and MimeType=
Icon Theme hicolor and icon naming
Trash Safe deletion
Autostart Login startup entries
Notifications Desktop notification protocol
MPRIS Media player controls
Secret Service Keyring access
Wayland Protocol documentation and compositor architecture
XDG Desktop Portal Portal interfaces and usage
AppStream Metadata for software centers
systemd User services, timers, journald, coredump
systemd user units Running background services per user
Resource Why it matters
Quality Signals The guide’s repeatable maintenance and community-health check
CHAOSS metrics Established community-health metrics
OpenSSF Scorecard Repository security practices
OSV Open-source vulnerability database
Reproducible Builds Build verification and reproducible-build guidance

The guide’s practical workflow is in User Documentation. These are the primary sources behind it. The guide’s own house rules are in the Style Guide.

Resource Why it matters
ISO/IEC/IEEE 26514:2022 Design and development of information for users; the software-documentation backbone
ISO 24495-1:2023 Plain-language principles: relevant, findable, understandable, usable
ISO/IEC/IEEE 26513:2017 Reviewing and testing information for users
IEC/IEEE 82079-1:2019 Horizontal principles for product information, when a contract or regulated market requires them
ISO 9241-11:2018 Usability vocabulary for task-based evaluation
WCAG 2.2 Accessible HTML documentation and in-app help
EN 301 549 V4.1.1 EU accessibility requirements, including documentation and support services
Diátaxis Structure model for tutorials, how-to guides, reference, and explanation
Resource Why it matters
Ubuntu for Developers Toolchains, IDEs, packaging, and support
Ubuntu Desktop documentation Desktop behavior, accessibility, and snap/deb policy
Ubuntu 26.04 release notes The baseline for this guide
Ubuntu Pro Client pro, ESM, Livepatch, FIPS, CIS
Snap documentation snapd, confinement, interfaces, updates
Snapcraft Building snaps
Rockcraft Ubuntu-based OCI images
Ubuntu packaging guide deb packaging
New package guide Ubuntu archive process
Build packages in a PPA PPA upload and signing
Ubuntu accessibility stack AT-SPI, GTK, Orca, BRLTTY
AppArmor Confinement profiles and auditing
Polkit Privileged actions
NetworkManager Connectivity and network state
PipeWire Audio/video graph
WirePlumber PipeWire session/policy manager
UPower Battery and power state
BlueZ D-Bus API Bluetooth
OpenPrinting CUPS Printing
UDisks2 API Disks and mounts
fwupd / LVFS Firmware updates
PackageKit Package management
snapd REST API Snap automation
Ubuntu Desktop snap/deb packages App Center package formats
Permissions prompting Security Center and Snap prompting
Ubuntu Insights Opt-in system telemetry
Resource Why it matters
Fedora Packaging Guidelines The normative rules for Fedora RPM packages
RPM Packaging Guide Upstream RPM tutorial and spec-file reference
Fedora Developer: RPM packaging Fedora’s packaging entry point
COPR user documentation Build service for packages outside Fedora
Fedora SELinux Wiki SELinux modes, policy, and troubleshooting
Fedora SELinux troubleshooting Diagnosing AVC denials
audit2allow(1) Turning audit denials into candidate rules
firewalld documentation Zones, services, and ports for host services
xdg-desktop-portal-kde Plasma’s portal backend
Fedora Kinoite Plasma Atomic desktop and Flatpak-first model
Toolbx Containerized Fedora development environment
Resource Why it matters
GNOME Human Interface Guidelines The design language behind libadwaita
GTK 4 documentation Widgets, layout, actions, accessibility
libadwaita documentation Adaptive widgets and GNOME patterns
Blueprint Declarative UI language for GTK
GNOME Builder IDE with Flatpak and GNOME integration
Workbench Rapid GTK prototyping
GNOME Icon Library Consistent symbolic and full-color icons
GNOME apps Reference implementations
GNOME developer documentation Tutorials, guides, and API docs
GTK Inspector Interactive debugging
Sysprof System-wide profiling
Accerciser Accessibility tree inspector
Orca Screen reader
Glycin Sandboxed image decoding for untrusted images
Resource Why it matters
KDE Human Interface Guidelines Plasma design conventions
Kirigami documentation Adaptive Qt Quick apps
Qt 6 documentation Qt Widgets, Qt Quick, Qt Test
Qt QML applications QML application structure
KDE Frameworks API KConfig, KIO, KNotification, KWallet
Qt Creator IDE and profiler
Breeze icons KDE icon theme
GammaRay Qt/QML runtime inspection
KDE Discuss Community support
Resource Why it matters
gtk-rs book GTK 4 bindings for Rust
gtk-rs documentation API docs and version support
Relm4 book Component architecture on gtk-rs
Iced Elm-inspired cross-platform GUI
Slint Declarative UI for embedded and desktop
libcosmic COSMIC toolkit
COSMIC Rust-native desktop environment
Resource Why it matters
Flatpak documentation Sandbox, manifests, runtimes, portals
Flatpak runtimes Runtime branches and support windows
Flatpak Builder Manifest format and build workflow
Flathub documentation Submission, maintenance, verification
Flathub requirements What gets accepted
Flathub metainfo guidelines Metadata, screenshots, branding, translations
Flathub quality guidelines Store-listing quality targets
Flathub linter Manifest and metainfo validation
Flathub submission The PR process
AppStream documentation Metadata, validation, screenshots
AppStream validator issue tags Exact appstreamcli issue names
Debian Policy The deb package contract
Debian packaging tutorial Practical deb building
Ubuntu packaging Ubuntu-specific packaging
Launchpad PPAs Personal package archives
Snapcraft documentation Snap packaging and confinement
AppImage documentation Portable single-file apps
Tool Use
Sysprof CPU, marks, and system profiling
heaptrack Heap allocation profiling
Valgrind Memory errors and callgrind
perf Linux perf events
dogtail AT-SPI UI automation
Accerciser Accessibility inspection
GammaRay Qt/QML inspection
GTK Inspector GTK layout, CSS, and accessibility
Workbench GTK prototyping
Blueprint GTK UI language
Meson i18n gettext/POTFILES integration
CMake documentation Build configuration and GNUInstallDirs
GStreamer documentation Media pipelines and VA-API
Resource Use
GNOME HIG Patterns, spacing, typography
GNOME Icon Library Symbolic and full-color icons
libadwaita CSS variables Semantic colors and spacing
KDE HIG Plasma patterns
Breeze icons KDE icon set
elementary HIG Minimal, structured design
Inter UI font used by many Linux apps
Cantarell GNOME UI font
JetBrains Mono Monospace font for code
Community Where
GNOME discourse.gnome.org
KDE discuss.kde.org
Flathub Matrix
freedesktop Mailing lists
GNOME development gitlab.gnome.org
KDE development invent.kde.org
Linux App Summit linuxappsummit.org
GUADEC guadec.org
Akademy akademy.kde.org

The guide is published for human readers and agents from the same source. The agent-facing files are generated at build time, so they cannot drift from the HTML.

  • llms.txt — curated index grouped by section, with links to every Markdown page.
  • llms-full.txt — the complete guide in one Markdown file.
  • Per-page Markdown — append .md to a route: /start/why-linux.md, /platform/ubuntu.md, /reference/baseline.md.
  • Discovery — every HTML page advertises its Markdown sibling with <link rel="alternate" type="text/markdown"> and points to /llms.txt with rel="describedby".
  • Local MCP server — npm run mcp:docs starts a read-only stdio server with search_docs, get_page, list_pages, get_related, and get_baseline.

The MCP server runs locally over stdio; the project does not operate a remote endpoint. Content negotiation (Accept: text/markdown) depends on host or CDN support and is not enabled by the static site. The .md endpoints work on any static host.

  • Prefer primary documentation over blog posts.
  • Check the release notes for the toolkit version you target.
  • Re-test links and commands at least once per release cycle.
  • If a tool is unmaintained, say so and point to the replacement.
  • When in doubt, read the specification. It is shorter than the argument.
  1. Check the Ubuntu release notes and release cycle; note any support-date discrepancy.
  2. Check GNOME/GTK/libadwaita, Qt/KDE, Snapcraft, Flatpak, and Flathub release notes for the versions you target.
  3. Update src/data/baseline.json and reference/baseline.mdx together.
  4. Re-check the pages that cite the changed versions or channels.
  5. Run npm run check:baseline, npm run build, npm run check:agent-docs, and npm run test:docs-mcp.
  6. Re-run the external link check and the internal link/anchor check.
  7. Review the diff for unsourced claims, vendor promotion, and Apple/macOS/Windows comparisons.
  8. Record the review date and the sources you checked.

Back to The Native Standard or Checklists.