The usual route: four separate apps
An app for four platforms is usually written four times: Swift for iOS and macOS, Kotlin for Android, C# or web technology for Windows. That is four codebases, often four teams, and every new feature has to be built, tested and maintained four times. Meanwhile the versions inevitably drift apart.
Our route: one Rust codebase
In the ChatLord native client, both the interface and the logic are written in Rust. The interface is drawn by the egui library, which works the same on every platform, so the same code compiles for all four systems. A new feature is built once and appears everywhere at the same time.
The browser version is a separate web client, but it talks to the same Rust server over the same protocol. Whatever the server can do, every client sees in the same way.
What differs per platform
One codebase does not mean ignoring the differences between platforms. We handle these parts separately, so the app feels natural everywhere:
- notifications: through Apple's service on iOS, Firebase on Android and Web Push in the browser,
- the system's own notifications and an installer on Windows, a disk image on macOS,
- the on-screen keyboard on phones, mouse and physical keyboard on tablets,
- the orientation of phone photos on upload,
- voice calls over WebRTC, ringing on every device.
What does this mean for a client?
If a company needs both a mobile app and a desktop program, this approach means paying for one project instead of two or three. Development is faster, maintenance cheaper, and a feature never works on iPhone months before it reaches Android.
- one codebase, one team, one bug list,
- new features on every platform at once,
- native speed is kept, with no interface wrapped in a browser.
When do you still need separate native code?
If an app is built around very specific capabilities of one platform – deep system integration or custom graphics effects, for example – that platform's own tools may be better. For most business applications this is not a question, and the benefit of a shared codebase is far greater.