Developer Information
Please note: This is a draft, and the authoring person is not an app developer, so take the following with a grain of salt. Feedback and MRs are most welcome!
Hardware specs to consider
In order to reach a good rating it‘s important to consider the screen size and resolution when designing the app UI:
| Phone | Pixels | Points1 |
|---|---|---|
| FuriLabs FLX 1s | 720 x 1600 | 360 x 800 |
| PinePhone (Pro) | 720 × 1440 | 360 × 720 |
| Librem 5 | 720 × 1440 | 360 × 720 |
| Moto G4 Play | 720 × 1280 | 360 × 640 |
| FuriLabs FLX 1 | 1080 x 2412 | 360 x 804 |
| Google Pixel 3a | 1080 x 2220 | 360 x 740 |
| OnePlus 6 | 1080 × 2280 | 360 × 760 |
| Xiaomi Poco F1 | 1080 × 2246 | 360 × 752 |
| Shift 6mq | 1080 × 2160 | 360 × 720 |
| Fairphone 5 | 1224 × 2700 | 408 × 900 2 |
When landscape use and the mobile shell's own UI are also considered, this leads to a recommended dimension of 360×294px in GNOME's HIG for a fully mobile compliant app.3
By using nested Phosh for app development or using an app like Length, you can check how your app fits a mobile screen without owning or having to use a mobile device.
Tutorials
Plasma Mobile ecosystem
- dimitris.cc: Linux applications with Python and QML
Phosh/GNOME on Mobile ecosystem
- Phosh.mobi: Developing for Mobile Linux with Phosh - Part 0: Running nested
- TuxPhones.com: Building responsive Linux mobile apps with libhandy 1.0 and Gtk3
- Radu Zaharia for devgenius.com: Using the libadwaita Leaflet widget for a responsive GTK4 UI in Rust
- Lupyuen: Build a PinePhone App with Zig and zgt
Generic Linux app development resources
Templates (as a starting point for app development)
GTK3/GTK4 apps
- sadiq: my-gtemplate
- naipotato: A small to-do list app, written using MVVM in the 5 most popular languages for developing GNOME apps.
QtQuick/Kirigami apps
- templates/kirigamiaddons6 · master · Libraries / Kirigami Add-ons · GitLab
- SDK / KAppTemplate · GitLab
- Jonah Brüchert / plasma-mobile-app-template · GitLab
- GitHub - trin94/PySide6-project-template: An unofficial and opinionated project template designed for a quick start with PySide6 and QtQuick
Flutter
Finding a project
If you have time on your hands, but don't have an idea (and looking through the app list has not helped you with coming up with what is not there nor inspired you to help out a listed project), you could do the following:
-
Pick up an existing project that's
and go ahead and revive it!
-
Make adjustments to an app that mostly works, but does not really fit the screen and thus has a mobile compatibility rating of
If you rather want to start your own project, maybe the Wishlist on the Mobian Wiki can be a source of inspiration. If that's not it, maybe go through related subreddits, or the PINE64 or Purism forums to find out what people are longing for.
When you have something that works and want others to use or try it
Tag a release
Tag a release! Otherwise, your app is unlikely to land in distributions (beyond, maybe, the AUR or NixOS unstable).
(Or, if you have forked another project and improved on it, submit your patches upstream.)
Add a flatpak manifest
Make it easy to try - by publishing it, e.g., on flathub.org, or, if you don't feel ready for that, by fulfilling parts of the requirements by including a working flatpak manifest in your repository to enable users and potential contributors to easily build and try the app (see also).
Add Metadata
Don't forget to add appstream metadata! It tells the story of your app and is commonly used as a source of information for nice, descriptive app listings in Linux software centers like GNOME Software, KDE Discover, or Bazaar.
The Appstream MetaInfo Creator helps with getting started. For extra credit, check the Appstream docs. Sometimes the Appstream docs may be hard to grasp - that's where the Flathub MetaInfo guidelines can come in handy.
Mobile specific-metadata
To advertise your app as 'this works on mobile', first make sure that it actually works when it is 360 logical pixels wide and with touch - any Linux Computer with a touch screen combined with a measuring app like Length should be enough to do so.
For Appstream Metainfo, the Flathub Metainfo guidelines sections on Mobile only apps and Desktop and mobile apps are the fastest path to correct metadata that lets people know that your app works on mobile. Technically though, especially with the latter, be aware that if, e.g., your app is also still useful at a width of 300 logical pixels, the specification wants you to put that width of 300px into your metainfo.
Desktop file in Phosh
Phosh is a popular mobile shell, and users can select to have non-mobile friendly apps filtered out of its app drawer (the app would then still show up, when an external screen is connected to the phone, which some phones support). Some distributions default to this behavior in Phosh. Especially if you are developing your app with GTK, you should thus add the line
X-Purism-FormFactor=Workstation;Mobile;
to your mobile-friendly apps .desktop file to make sure its launcher shows up after installation. See this blog post for more information on the topic.
Mobile App Testing
If you don't have a device, get in touch by opening an issue or sending an email to our discuss list: https://lists.sr.ht/~linuxphoneapps/linuxphoneapps.org-discuss
Logical pixels at default scaling of 2x on low-end devices, and 3x on Snapdragon 845 devices. Fortunately, almost all phones with good mobile Linux support default to a width of 360 logical pixels.
Assuming 300% scaling, the Fairphone 5 unfortunately does not fit the 'standard' 360 logical pixels schema. At 340% scaling, it would come in at 360 × 794 logical pixels - at the price of the issues fractional scaling brings.
That said, few of our 5/5 rated apps actually fulfill the landscape criterion.