Open-source KMP client toolkit

frnk

A modular Kotlin Multiplatform toolkit for indie and small-team mobile apps.

Headless Compose UI, pluggable Supabase + Firebase backends, MVI presentation, SQLDelight persistence, and RevenueCat monetization — wired together via Koin so day-to-day work stays on features, not plumbing.

Why frnk

frnk gives indie / small-team apps a fast-compiling foundation with a clean architecture, aggressive modularization, and a standardized MVI presentation layer — so the day-to-day work stays on features and business logic.

What it ships

  • MVI presentation engine

    MviContract, MviViewModel<S, A, E>, and ObserveAsEvents ship in shared-ui-atoms. New screens subclass MviViewModel and stay consistent across the toolkit.

  • Headless Compose UI

    Built on compose-unstyled so consuming apps bring their own design system instead of fighting opinionated defaults.

  • Pluggable backends

    Supabase and Firebase implementations sit behind capability interfaces. Pick one at runtime via BackendChoice without touching feature code.

  • Strict api / impl modules

    *-api modules expose only interfaces and DTOs; *-impl modules carry the concrete bindings — wired via Koin and swappable per project.

  • One-shot Koin bootstrap

    frnkModules(BackendChoice) and initializeFrnk() set up DI in one call so host apps stand up the toolkit in their Application class.

  • SQLDelight persistence

    Multiplatform driver factory and Multiplatform Settings key/value store. The toolkit owns the driver; your host app owns the schema.

  • RevenueCat monetization

    Entitlement and feature-gate interfaces with a RevenueCat implementation behind them — paywall logic stays out of feature modules.

  • Fast CI + pre-commit ktlint

    A single CI job runs compileAndroidMain and testDebugUnitTest; ktlint formatting is enforced via an auto-installed git pre-commit hook.

Built with

  • Kotlin
  • Compose Multiplatform
  • Coroutines
  • MVI
  • Koin
  • Nav3
  • SQLDelight
  • Supabase
  • Firebase
  • RevenueCat
  • Unstyled Compose

Project status

Early / pre-1.0. APIs may shift between minor versions — pre-1.0 policy is that 0.x.0 may break API while 0.x.y stays additive and fix-only.

View CHANGELOG on GitHub