Application development
Parch GNU/Linux ships two desktop faces: Plasma editions built on Qt6/KDE Frameworks, and GNOME/Hyprland/XFCE editions built on GTK. First-party apps already span both worlds and more, so this section starts from a simple question, which toolkit fits your app, and then walks each path end to end: code, desktop integration, localization, debugging, security, and packaging.
What Parch apps actually look like
The toolchain mapping below comes from the real repositories, not from a style preference. Pick the row that matches your project and read the matching guide.
| Real Parch app | Language | Toolkit | Lesson for your project |
|---|---|---|---|
| parch-welcome | Rust | gtk4-rs + libadwaita | First-run assistants, relm4-style structure |
| PKM (parch-kernel-manager) | Python 3.9+ | GTK4 + libadwaita via PyGObject, VTE4 terminal, pkexec for privileged pacman | GUI plus privileged operations done safely |
| pastor (Parch Store) | Rust | GTK | Store-scale apps, packaging via cargo |
| gamehub, mirrorman, pordle | Rust | various | Small focused utilities in Rust |
| parchdroid, Parch-Driver-Manager | Python | PyGObject | Python beyond the CLI |
| plasma-setup | C++ | Qt6 + KF6 | Native Plasma configuration tools |
| systuner | C | lightweight | Minimal-dependency system tools |
The distribution also carries plain command-line tools (parch-update among them) that need no GUI toolkit at all.
Choosing a toolkit
Use this table to narrow the choice in one look.
| Your target | Language you want | Project size | Recommended path |
|---|---|---|---|
| GNOME, Hyprland, XFCE editions | Python | small to medium | GTK4 + libadwaita via PyGObject |
| GNOME, Hyprland, XFCE editions | Rust | medium to large | gtk4-rs + libadwaita |
| Plasma editions | C++ | medium to large | Qt6 + KDE Frameworks (KF6), CMake + ECM |
| Plasma editions | Python | small to medium | PySide6 or PyQt6, KF6 where needed |
| Any desktop | any | any | Follow the GTK or Qt path, then keep desktop-specific chrome minimal |
| No GUI, scripting or system tool | Python or Rust | small | Plain CLI, see the Python and Rust pages |
Three realities worth internalizing before you commit:
- Match the desktop of your target edition. A Plasma-native tool that imitates libadwaita chrome (or the reverse) reads as foreign. The platform integration page maps the same HIG intent onto both toolkits.
- Language follows the precedent, not the reverse. If you are contributing to an existing Parch app, it is Python, Rust, C++, or C already; keep it that way.
- A CLI is a legitimate Parch app. System tools with no window are easier to package, easier to localize, and easier to secure.
In this section
Choosing a toolkit
GTK4/libadwaita vs Qt6/KF6 vs TUI vs none: what each gives you natively.
GTK apps in Python
A complete libadwaita app from empty directory to packaged, the PKM way.
Qt and KDE apps
Qt6 + KF6 with CMake/ECM, KConfig, ki18n, and correct package names.
Rust apps
gtk4-rs + libadwaita, Cargo layout, and vendored PKGBUILD builds.
Python apps
CLIs, desktop integration, and packaging rules for Python on Parch.
Desktop integration
Desktop files, icons, portals, notifications, services, Wayland app ids.
Localization
gettext workflow, Persian specifics, and the Persian-at-release rule.
Debugging and profiling
Wayland debugging, GTK inspector, coredumpctl, valgrind, perf.
Security practices
polkit privilege separation, sandboxing, secrets, supply-chain hygiene.
Prerequisites for any path
- A Parch or Arch-based system with the
base-develgroup installed:sudo pacman -S --needed base-devel git - The toolkit packages listed at the top of each guide.
- For packaging what you build: the PKGBUILD reference and building packages pages.
- For how the result should look and behave: the Parch HIG and the design tokens.
Related sections
- HIG: window, layout, RTL, and desktop-file rules every app follows.
- Packaging: getting your app into world and Void.
- Localization: the distribution-level translation story.
- Security: the threat model your app is part of.
- Reference: quick lookups while you code.