Apps for iOS and Android

Apps for both platforms from a single codebase, including release to the App Store and Google Play.

One codebaseLogic · data · designiPhoneAndroidCameraPushBiometricsOfflineApp StoreGoogle Play

Written once, not twice

Business logic, data handling and design are built once. Two separate developments mean two sources of error, two schedules and two invoices for the same thing.

What comes with it

One build for both

One codebase, both platforms. What is decided once holds on iPhone and Android alike, and a fix does not have to be made twice and checked twice.

Fluid even with a lot in it

Large lists are rendered virtualised and prefetched ahead of the scroll. Only what is needed goes over the wire, and on a phone both are the difference between fluid and sluggish.

The device used fully

Camera, push notifications, biometrics and offline storage are bound natively rather than imitated.

It continues after launch

Release to the App Store and Google Play including the review process, then updates, crash reporting and maintenance.

From our own projects

Two examples where this can be read up. The technical points are set out in full under our work.

txts

Messenger
iOS · Android · Windows · macOS · Linux

The security-critical part is written in Rust and kept separate from the application. Five platforms use the same implementation, behaving identically on every device.

  • A cryptographic core

    The encryption logic is kept entirely separate from the application code and implemented in Rust as a standalone core. There is exactly one security-critical implementation, shared by iOS, Android, Windows, macOS and Linux, behaving identically on every device. That makes maintenance and security review markedly simpler.

  • Keys stay on the device

    Private keys live in the operating system's keystore and never leave it. The server handles ciphertext only, with access to neither message content nor key material.

  • Incremental synchronisation

    Messages, group information and state changes travel as changes rather than as complete records. Together with packet aggregation, efficient serialisation and compact binary formats, that noticeably reduces bandwidth, server load and battery use, including on long histories and unreliable connections.

txts.chat

sooreal

Social media platform

Virtual lists, lazy loading and predictive prefetching keep even very large feeds fluid, including on mobile devices, where the difference shows most.

  • An interface tuned for speed

    Virtual lists, lazy loading, predictive prefetching and tuned rendering keep even very large feeds fluid. Network calls are kept to a minimum, and only what is actually needed goes over the wire. The result stays responsive, including on mobile devices.

  • Efficient compression

    Images and media files are optimised automatically on the server. Modern compression cuts file size substantially without a visible loss in perceived quality. That saves bandwidth, shortens load times and reduces what the infrastructure has to store.

sooreal.net

Common questions

  • Flutter or React Native?

    Both, depending on the project. What decides it is the binding to existing native code, the demands on how it has to look, and the knowledge already present in the client’s team. Habit does not decide it.

  • Can you tell an app was not built natively?

    It should not feel like it, and that is what the work on the interface is for: virtualised lists, predictive prefetching, and native binding of what the device offers.

  • Do you handle the release as well?

    Yes, from certificates and signing through the review requirements to the release itself. After that updates, crash reporting and maintenance.

  • Do we own the code in the end?

    Yes. Source code, documentation and infrastructure stay transferable, with no lock-in to us.

Got an app in mind?

Tell us briefly what it is about. We will say plainly whether we are the right people for it and roughly what it takes.