Open-source project
sadellie/unitto avatar
sadellie/unitto

Unitto is a Kotlin Multiplatform unit converter and calculator

😎 Superior Calculator and Converter

737 stars38 forksKotlinGPL-3.0

At a glance

What is it?
Unitto is an open source unit converter and calculator written in Kotlin with Compose Multiplatform, shipping as an Android app, a web app and a desktop target from one codebase. The Android app is mature, the web version is labelled alpha in the README, and the project ships four download channels.
Who is it for?
Unitto suits someone who wants a fast, offline unit converter on Android without an account or an advert, and who is willing to try a preview build, since the project publishes numbered preview releases and a SHA-256 digest of the artefact.
Can I use it commercially?
Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
Is it still maintained?
Yes. The repository last received commits 6 days ago.
What is it written in?
Mainly Kotlin, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.

Editorial analysis

One Kotlin Multiplatform codebase, four ways to install it

Unitto is described in the repository description as a Superior Calculator and Converter, and the project is written in Kotlin with the multiplatform and compose topics among its labels.

The repository layout shows how a Kotlin Multiplatform project of this kind is organised. There is a core directory holding the shared logic, an androidApp directory, a sharedApp directory, a feature directory for feature modules, a build-logic directory for convention plugins, and a detekt directory for static analysis configuration. The gradle.properties file, build.gradle.kts and settings.gradle.kts sit at the top level alongside the gradlew wrapper, so the whole thing is a standard Gradle build that the wrapper drives.

The distribution story is where the multiplatform claim pays off. The README's download section offers a web app hosted at sadellie.github.io/unitto/app, a Play Store listing, an F-Droid package under com.sadellie.unitto, GitHub releases, and two Obtainium entries, one for the stable channel and one for the preview channel with prereleases enabled.

That last pair is the detail that tells you how the project is run. Obtainium is configured to include prereleases for the preview entry and to fall back to older releases, and the README notes that F-Droid users may receive updates from the Preview channel. So there are effectively two release trains, a stable one and a rolling preview one, and the naming convention follows it: 80-preview (Unbleached Silk (Preview 7)), 79-preview (Unbleached Silk (Preview 6)) and 78-preview (Unbleached Silk (Preview 5)).

What the README says about the web build

The web version has its own status section, and it is the most useful part of the README for anyone deciding which build to install.

The heading is State of Unitto Web (Alpha), and the listed points are specific. Main features are on par with the Android version, including accuracy of calculations. Physical keyboard support is implemented with almost no limitations. The user interface adapts to bigger screens.

Then the limits. Language support is limited, theming support is limited, user data is not restored on page reload, and clipboard features are not implemented.

Read together, that is a clear picture. The calculation engine and the layout work, and a desktop keyboard user will be comfortable. What is missing is persistence and the small conveniences. Losing state on reload is the one that would decide it for me: a converter that forgets what you typed when the page refreshes is a different tool from one that remembers.

The web build also carries its own licence obligations, which the README handles by naming them. It uses a wasm port of kt-math with additional fixes, and the files in the kt-math folder are licensed under GPL-2.0, and an incomplete port of big-math with additional fixes, with the files in the core/common/wasmJsMain folder licensed under MIT.

The custom ROM notice is a warning to would-be contributors

There is a short section with an unusual heading, Custom ROM developers, and its body is a single word: Leave.

The context is the rest of the README. The project asks contributors to read CONTRIBUTING.md, states that hard forks and alterations of Unitto are NOT welcomed, and asks them to use the Fork button so that commits' author is not lost. It also says not to use branding assets, which it enumerates as the app name, icons, descriptions, screenshots and similar items.

So the position is clear. The code is open source under GPL-3.0, and you may read it, but the project does not want a rebranded Unitto in the wild. That is a legitimate position for a project that invests in a name and a store presence, and it differs from a project that simply asks for attribution.

For an evaluator, the practical implication is that the reuse story is narrower than the licence alone suggests. If you wanted to take the converter, rebrand it and ship it under your own name, the answer from the README is no, and the fork guidance points at contributing upstream instead.

Verifying the download and the security policy

The Security section is brief and has a specific shape.

It points at a SECURITY.md file, and it gives a SHA-256 digest:

plaintext
SHA-256 digest: b2d9938c97fa77df78142c311d234aae9e706f10ccba167f2a2a3e33528c1dcf

The line under it reads, in full, TL;DR: the app is legit, no cap fr fr.

Publishing a digest is the right move for an app distributed through several channels including direct APK downloads from GitHub releases, because a user installing outside a store has no other way to tell the file they fetched is the file the author built. Comparing that digest against your download is the concrete check to make, and the Obtainium configuration in the README is even set up with a verifyLatestTag option, so a channel-aware installer can check the tag as well.

The README also links three documents outside the repository: the Terms and Conditions, the Privacy Policy and a Help page, all under the sadellie.github.io/unitto domain.

For a calculator, the absence of a network or account requirement is itself the privacy story, and the README's silence on any server component is consistent with a tool that computes on the device.

The repository layout, and the maths libraries underneath

Beyond the app modules, the top level holds a few things that explain the engineering effort.

There is an alternative directory, an idea that recurs in Kotlin Multiplatform projects for hosting a variant of the app that avoids a Google dependency, and a kotlin-js-store directory for the JavaScript package registry output. The fastlane directory holds the store metadata, and the README's screenshots are pulled from fastlane/metadata/android/en-US/images, which is where the store listing assets are generated from.

The maths is the part that is not trivial. Unitto carries a kt-math directory in the repository, which is a port of kt-math, and the web build additionally uses a wasm port of it plus an incomplete port of big-math, a library for arbitrary precision arithmetic, in the core/common/wasmJsMain folder.

That tells you the project is not doing floating point conversion by hand. A unit converter that offers a large category set needs exact rational arithmetic for things like currency and fractional units, and a big-math style library is what makes that possible. The licence arrangement is that kt-math files are GPL-2.0 and the big-math files in wasmJsMain are MIT, which is why the repository carries a separate LICENSE file in each of those two folders.

There is also an ARCHITECTURE.md at the top level, which is where the module structure is presumably documented, and a password.txt file whose purpose the README does not explain.

Where Unitto sits against the platform calculators

The comparison worth making is with what a phone already has, and with the other open source converters.

The platform calculators on Android and iOS cover the common units and nothing else, and they differ between manufacturers. A dedicated converter app earns its place by covering a large category set, handling the awkward cases like currency and cooking measures, and doing so identically on every device. The README's emphasis on parity of calculation accuracy between the Android and web versions is a statement about exactly that.

Against other open source converters, the differentiator is the multiplatform build and the distribution breadth. A project that is Android only forces you to use an APK from a store with whatever review and update policy that store has. Unitto publishes to Play Store, F-Droid, Obtainium and GitHub releases simultaneously, and F-Droid users can opt into the preview channel, which means a tester's build is one tap away rather than a release-wait.

The honest weakness of the comparison is the preview cadence. Releases are named with a number and a codename, 80-preview (Unbleached Silk (Preview 7)), and the last push was on 2026-10-17, the same day as the newest tag. A project shipping that often will have rough edges, and a user who installs from the preview channel is opting into that. A user who wants a settled build should take the stable channel instead.

The other structural weakness is the same one the custom ROM section reveals. There is no supported way to run a modified Unitto, so the project cannot benefit from a community variant the way a permissive one would.

Editorial conclusion

Unitto suits someone who wants a fast, offline unit converter on Android without an account or an advert, and who is willing to try a preview build, since the project publishes numbered preview releases and a SHA-256 digest of the artefact. It is the wrong tool if you need a mature web version, because the README lists the web state as alpha with limited language and theming support and no clipboard features, and the wrong tool if you plan to fork and rebrand it, since the contributing guide explicitly says hard forks and alterations are not welcomed and branding materials may not be used. Before installing, check the published SHA-256 digest against your download, and decide whether the stable or the preview channel matches your needs.

Frequently asked questions

Where can I download Unitto?

The README links a web app at sadellie.github.io/unitto/app, a Play Store listing, an F-Droid package under com.sadellie.unitto, GitHub releases, and two Obtainium entries, one for the stable channel and one for the preview channel. F-Droid users may receive updates from the Preview channel.

Is the Unitto web version finished?

The README labels it as an alpha and states that main features are on par with the Android version including calculation accuracy, with physical keyboard support implemented with almost no limitations. Language support and theming support are limited, user data is not restored on page reload, and clipboard features are not implemented.

How do I verify a Unitto download?

The README publishes a SHA-256 digest for the app, b2d9938c97fa77df78142c311d234aae9e706f10ccba167f2a2a3e33528c1dcf, and points at a SECURITY.md file. Compare the digest against the file you downloaded.

Can I fork Unitto and change the app name and icons?

The contributing guidance says hard forks and alterations of Unitto are not welcomed, asks contributors to use the Fork button so that the commits' author is not lost, and says not to use branding materials, which it lists as the app name, icons, descriptions, screenshots and other materials.

What maths libraries does Unitto use?

The repository carries a kt-math directory, and the web version uses a wasm port of kt-math with additional fixes, licensed under GPL-2.0, plus an incomplete port of big-math with additional fixes in the core/common/wasmJsMain folder, licensed under MIT.

Official sources

  1. License: GPL-3.0
  2. Project website
  3. README
  4. Releases
  5. sadellie/unitto on GitHub
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/sadellie-unitto.svg)](https://hysenlabs.com/projects/sadellie-unitto)

Was this useful?