VulCode

Kotlin: what we build with it and why

We write native Android apps in Kotlin with Jetpack Compose, and use Kotlin away from phones too: in a database engine and a language interpreter.

All technologies

Kotlin in real screenshots

The projects on this page on the screens from the portfolio and the case studies, each with a short description and the way to the full one.

An end-to-end encrypted chat in the Plazer phone app

Plazer: Android app

A native Jetpack Compose client: servers, channels, groups, voice calls and home screen widgets.

When Kotlin, and when something else

A technology has to fit the place the code will run and the team that will take it over. The final choice is made in the quote, together with you.

We pick Kotlin

Native Android apps

Flaem, Plazer and Gyred have Jetpack Compose clients on Android. The app starts at once, with no wait for a browser engine, and gestures and scrolling are the system's own.

Home-screen widgets

The Flaem and Plazer apps show the key information in widgets, without opening the app. Only a native app can have a widget.

Notifications that lead to a screen

An FCM notification about a server outage opens that very server's console. From the signal on the phone to the place you can act, it is one tap.

An interface on a Rust core

Plazer's Android app calls the Rust core through UniFFI and does not touch the cryptography itself. Kotlin draws the interface, and the protocol is the same code as in the browser.

An app for one job

Gyred on Android shows the agent sessions waiting for a decision and lets you answer from the phone. A native client starts fast, and what counts is the time from the notification to the answer.

Engines and interpreters on the JVM

kestrel is a database engine with a SQL parser, a B-tree, a WAL and transactions, and lumen is a language with a bytecode compiler. Sealed classes describe their syntax trees so that the compiler makes sure every kind of node is handled.

This is how we write it in our services

We pick something else

The same features on Android and iOS

When both platforms should do the same and widgets are not needed, one codebase in React Native with TypeScript or in Flutter costs less than two native apps.

Forms and viewing data

The VulCode client panel installs on a phone as a TypeScript web app, with no store. That is enough for invoices and tickets, and a fix does not wait for Google Play review.

An iPhone app

On iOS, widgets, APNs notifications and the Keychain are handled by Swift code. We write the Flaem and Plazer iOS clients in SwiftUI.

Cryptography and the protocol

We do not write Plazer's encryption in Kotlin. The Rust core is one for Android, the browser and the desktop, so the protocol has one implementation to check.

The app's back end

We write the services the app talks to in Go or Rust: the Plazer hub is in Go, the Flaem core in Rust. They have to run on many machines as single binaries, without a JVM.

A Minecraft plugin

Kotlin runs on Paper, but the documentation, examples and most plugin libraries are in Java. We write Frozcraft in Java so the next person on the project finds answers straight away.

Kotlin compared, point by point

Each need on a row of its own, with what each of the two columns gives you on it side by side.

Phone appKotlin and SwiftWeb app

System widgets and notifications

Full access
Limited

Cost of two platforms

Two codebases
One codebase

Store publishing

Yes, with review
Not needed

Background work

System jobs and services
Only as far as the browser allows

Shipping a fix

A new version through the store
Right after deployment

Hardware access

Camera, Bluetooth and sensors with system permissions
Some interfaces, depending on the browser

Logic shared with other clients

The Rust core through UniFFI
The same core through WebAssembly

Kotlin in all our code

How many lines we have written in Kotlin, and what part of everything we have written that is. We count the lines added in the commits of our repositories, language by language.

206,250
lines written in Kotlin
3.8%
of all the lines we have written
7
repositories with Kotlin code
4th
place among 26 languages

The libraries these projects stand on

From the dependency files of our repositories. With each, one sentence on what we use it for.

An invitation to a Minecraft server in the Flaem app: the server address and how to join
Disappearing messages in Plazer: a time set for both sides of the chat
  • Jetpack Compose

    The Android app interface.

  • Navigation Compose

    Navigation between screens.

  • kotlinx.serialization

    Reading API responses.

  • Firebase Cloud Messaging

    Push notifications on Android.

Questions about Kotlin

Answers about Kotlin, our projects and the numbers on this page.

A project in Kotlin?

Describe what you want to build. We reply within an hour and tell you plainly whether this technology is a good choice.