Desktop application development for Windows, macOS and Linux
Some work does not belong in a browser tab. We build desktop software for operations that need local processing power, direct hardware access and the certainty that the software runs whether or not the network does.
Where desktop still wins.
We are not going to argue that everything should be a desktop app. These are the cases where it is genuinely the right call.
Production and lab tooling
Software that sits next to the machine it controls. Serial and USB devices, measurement hardware, label printers, scales, PLC bridges. Browsers cannot reach this hardware reliably; desktop applications can, and they keep working when the building loses its connection.
Data-heavy analysis
Applications that chew through files too large to push over a network on every operation — imaging, CAD exports, financial datasets, log archives. Processing happens on the workstation that already has the CPU and the disk, not on a server you have to rent by the hour.
Regulated and offline environments
Places where data is not allowed to leave the building, or where there is no reliable connection to begin with. The application holds its own local store and synchronises deliberately, on terms your compliance team has actually approved.
Built to survive an OS upgrade.
Desktop software has a specific failure mode: it works perfectly for three years, then an operating system update breaks it and nobody remembers how it was built. We engineer against that from the start — reproducible builds, pinned dependencies and a signing pipeline that still works when the person who set it up has moved on.
Stack
We choose on the project, not on our preferences. C#/.NET where the environment is Windows-centric and the software has to integrate with Microsoft infrastructure. Qt or Electron where one codebase has to cover Windows, macOS and Linux — Qt when performance and hardware access matter, Electron when the interface is the hard part and the team already knows the web stack. Native Swift on macOS when the product has to feel like it belongs there.
What we handle beyond the code
- Signed installers for each platform — signing is now a condition of entry, not a formality
- Auto-update channels, so a fix reaches users without a manual rollout across every workstation
- Crash reporting from real installations, not just from the machines we test on
- Silent deployment packages when IT has to push the application across a fleet
- A migration path when data has to move from a legacy tool the business has outgrown
Replacing something that already exists
Desktop work is more often a replacement than a greenfield build — an Access database that outgrew itself, a Delphi application whose author retired, an Excel workbook doing the job of a system. We start by reading the thing that exists, because the awkward edge cases inside it are usually the actual business rules, written down nowhere else.
Things clients ask before starting.
Why not just build a web application?
Can it run on Windows, macOS and Linux from one codebase?
What about code signing and distribution?
Can you take over software someone else wrote?
Often built alongside.
Tell us what the software has to run on.
Describe the workflow, the hardware and the operating systems involved. We will come back with an approach and a scoped estimate.