The Ultimate Guide to Plasma Development
This guide explains the basic steps to build a fully integrated application. This guide is targeted at developers with basic knowledge of QML. It guides through the complete process of developing an application from scratch.
Plasma allows to write applications that work well on different form factors or devices. Plasma is built to adapt to different input methods (mouse, touch, keyboard, etc.) screen sizes and to be resolution-independent. Most of the information in this guide is applicable to all form factors. Topics that may differ for different form factors are indicated as such.
A well-architectured Plasma application will be able to offer different user interface per form factor. For desktops, a landscape layout with quite a lot of space for display and interaction can be used, while the same underlying components in a different, portrait-oriented layout can be used to present the user interface on a phone. A tablet user interface may use either, or combine the components in yet another fashion to make the best use of available screen real estate. In general, Plasma widgets such as buttons and other controls, work well on touch, mouse and with keyboard input, but can be switched at application start or runtime, transparently to the application using it.
Plasma makes extensive use of QtQuick and QML to write the user interface and business logic of your application. Basic understanding of QtQuick is necessary, though Plasma is also a great environment to learn by doing it. This guide targets developers that are familiar with common programming paradigms, but do not have special knowledge of the Plasma APIs, libraries and mechanisms to solve certain problems.
Many things can be implemented without knowing or being able to write C++ code. Plasma provides high-level APIs to solve a great number of tasks and provide common functionality such as retrieving data, displaying information as well as widgets for common interaction patterns and themes and artwork to make your app beautiful and consistent.
In some cases, or in more complex apps, you may extend the functionality by writing a C++ plugin (or "import"). This allows to access custom functionality in your system, leverage an existing library, or move logic into a type-safe language that is easier to test (using unit tests, for example) or performs better.
- app vs plasmoid
- download template - hack application - metadata.desktop & main.qml
kpackagetool5 -i basic
kpackagelauncherqml -a org.kde.example.developerguide.basic
kpackagetool5 -r basic
- kpackagelauncherqml & .desktop file
- QML / QtQuick: ui primitives, app logic, rendering, states - imports - Plasma libs - underlying frameworks - runtime environment - kpackage
- system integration (systray, alternatives, mimetypes, arguments, formfactors)
The following are acceptable known entries for plasmoids and applets. If your applet does not fall within one of the following categories, leave the category field empty (it will be automatically categorized under "Miscellaneous" for the time being) and contact the Plasma development team to have a suitable category added to the list (at which point you may then use that category).
- cmake - plasmapkg2
- Layouts - plasmoid object - fullRepresentation vs. popup
+ links to API documentation! - PlasmaCore - PlasmaComponents - PlasmaExtras - kdeclarative's useful stuff: kcmOpen? more useful imports
- general guidelines: units, iconSizes,
- editor - commandline - plasmapkg2 - plasmoidviewer - plasmathemething - cuttlefish -
- theming - image display - dpi - ColorScope - Wayland vs. X11
- touch friendliness - layout considerations - formfactor support (X-KDE-FormFactors) - touch-specific overrides
- system tray - plasmoid status - dbus autoload
- i18n() & friends - making sure i18n is set up & how to x-test
- plasmoid package - appstream metadata - kdeapps online installation - distros - upstreaming code