Script or command-line tool
Your own problem; you are the only user
$0 · Minimal
△ Someone else wants to use it and cannot open a terminal
Drawing set · L0–L3
Desktop software gets what web pages never get: the file system, system audio, the GPU, always-on background work. The price is that you now ship a program onto machines you have never seen, past security warnings you did not write. This drawing set maps the shapes a desktop program can take and what each level of seriousness adds.
Design philosophy
Desktop software is a program that lives on someone else's machine for years. It is trusted with their files and their system; it has to earn that and keep earning it.
The best desktop tools start as a fix for their author's own daily annoyance. A real problem gives you a real test case every single day.
Idle means idle: no hidden CPU, no background downloads, no files outside the places you said you would write. Users notice fans spinning.
An installer that fails, a warning that scares, an update that never arrives — these are bugs in the product, not chores around it.
Solving your own problem? Start with a script, then a small window around it. Only invest in installers, signing and auto-update once strangers need to run it.
You have an annoyance you hit every day and want to know whether a program can remove it. The only user is you, so a terminal is a perfectly good interface.
One script, run by hand or at login. It reads and writes files in one known folder and prints what it did. No window, no installer.
Δ New at this level
Shapes on the map: Script or command-line tool
Use the language with the best library for the hard part — audio, files, images — not the one with the prettiest UI framework. The UI can come later; the core cannot be faked.
Someone else wants your tool and cannot or will not open a terminal. Their machine has different settings, a different language and none of your libraries.
The script gains a window and is packaged together with its runtime into something that installs with a double click. Settings move to the operating system's standard per-user folder, and the program asks for system permissions only when a feature needs them.
Δ New at this level
Shapes on the map: Native UI toolkit (Qt, WPF, SwiftUI) · Web UI in a desktop shell (Tauri, Electron)
Pick the UI approach by what the core needs: native toolkits for audio, latency and small memory; a web shell when the interface is the product. Test the packaged build, not the development run — they fail differently.
Also worth knowing — not verified by this site
The software is sold, or it handles recordings, documents or accounts. Unsigned builds now cost you sales at the security warning, and a crash that loses a user's file costs you their trust.
Builds are code-signed in CI with a certificate kept outside the repository. A small online service checks licenses and serves the update feed; the program keeps working offline for a grace period. Crash reports leave the machine only with consent and without file contents.
Δ New at this level
Shapes on the map: Desktop app + online service
The signing certificate is the most valuable file you own at this level: keep it out of the repository and out of any log. Never let the license check lock a paying user out when your server is down.
Also worth knowing — not verified by this site
Thousands of installs run different versions on Windows, macOS and perhaps Linux, on both Intel and ARM. A bad update now breaks many machines at once, and some of them belong to companies.
Every release is built and signed for each operating system and chip architecture by CI. Updates go out through channels — beta, then a percentage of stable — and a bad version can be pulled from the feed so machines stop receiving it.
Δ New at this level
Shapes on the map: Desktop app + online service · Web UI in a desktop shell (Tauri, Electron)
Automate everything about building and signing; at this level a manual release step is a release that will one day be skipped.
Every shape this can take. Most exist so you know what not to build yet.
Your own problem; you are the only user
$0 · Minimal
△ Someone else wants to use it and cannot open a terminal
Deep system access, low latency, small memory — Subtitle-Windows' shape
$0 (check toolkit license) · Mid
△ You need the same app on several operating systems with one team
Cross-platform from one web codebase; UI-heavy apps
$0 · Low–mid
△ Memory use or startup time becomes a complaint, or you need system APIs the shell does not expose
Licenses, sync, accounts or cloud processing
$5–100/mo + signing certificate · Mid–high
△ Thousands of installs across versions — you need staged update channels
One plain sentence and one metaphor each. Click any tool module for the same treatment.