Skip to main content

KMP SaaS Kit | Production-Ready Kotlin Multiplatform Starter for iOS & Android

Every mobile SaaS app needs the same foundation: authentication, subscriptions, onboarding, settings, theming. You've built it before. It took weeks. Then you did it again. KMP SaaS Kit provides a solid foundation: production-ready, compatible with both platforms, and built on a single codebase. Skip 6-8 weeks of boilerplate and ship your app this week.

KMPCMPKotlinSwift

Stop wiring up auth, payments, and navigation from scratch.

Every mobile SaaS app needs the same foundation: authentication, subscriptions, onboarding, settings, theming. You've built it before. It took weeks. Then you did it again.

KMP SaaS Kit provides a solid foundation: production-ready, compatible with both platforms, and built on a single codebase. Skip 6-8 weeks of boilerplate and ship your app this week.

Built by David Cruz Anaya, with 12 years of mobile engineering at Sky, Comcast, WWE, and BritBox. 10M+ users shipped.
This isn't a tutorial project.


WHAT'S INSIDE

Auth That Works Out of the Box Email sign-in/up with Supabase, Google OAuth via Credential Manager (Android), Apple Sign-In via ASAuthorization (iOS). Validation, error handling, password strength - all wired.

Subscriptions with RevenueCat Dynamic paywall that renders whatever offerings you configure in RevenueCat. No hardcoded tiers. Purchase, restore, premium status check - all connected. Remove the entire paywall feature by deleting one line.

4-Step Onboarding Flow Welcome screen with Canvas animation, profile setup, notification permissions (platform-native), and paywall. All skippable, all customisable.

Enterprise-Grade Security Tokens encrypted with Google Tink AES-256-GCM (Android Keystore) and iOS Keychain. Not SharedPreferences. Not plain text. Production-ready from day one.

Arrow-kt Functional Architecture Typed error handling with Either<DomainError, T> and Raise DSL. Circuit breaker + exponential backoff retry on every API call. In-memory caching with TTL. Generated optics for immutable state. This is how production apps are built.

Pluggable Feature Architecture Every feature (auth, onboarding, home, settings, paywall) registers via FeatureRegistry. Remove a feature: delete the package, remove one line. The app compiles and runs. No navigation graph surgery, no DI module hunting.

Native Screen Escape Hatch 100% shared Compose Multiplatform UI - plus a documented pattern for dropping into native SwiftUI when you need it. iOS Liquid Glass? Platform-specific settings? You're covered.


FULL FEATURE LIST

  • Auth Email, Google (Credential Manager), Apple (ASAuthorization), forgot password

  • Subscriptions RevenueCat KMP, dynamic offerings, purchase, restore, premium check

  • Onboarding 4-step flow: welcome, profile, notifications, paywall

  • Home Time-of-day greeting, premium banner, placeholder feature cards, pull-to-refresh

  • Settings:

    • theme picker (light/dark/system)

    • language

    • notifications

    • subscription management

    • sign-out

    • delete account

  • Security Tink AES-256-GCM + Android Keystore, iOS Keychain, SecureStorage expect/actual

  • Networking Ktor with Arrow Resilience (circuit breaker + retry) and a Supabase client

  • Database Room KMP (User + Subscription entities), offline caching

  • Caching Arrow cache4k with TTL (user 5 min, offerings 15 min, subscription 2 min)

  • Error handling: Arrow Either + DomainError sealed class, Raise DSL in use cases

  • State Management Arrow Optics @optics on all UiState classes, parZip parallel loading

  • Theme Material 3, deep purple seed, Outfit + DM Sans bundled fonts

  • Navigation: Compose Navigation with @Serializable type-safe routes

  • Dependency Injection: Koin 4.x with viewModel{} DSL

  • CI/CD GitHub Actions (CI + signed release AAB)

  • Documentation: 16 documentation files, architecture guide, customisation guide

  • Scripts Package rename script, environment setup script


TECH STACK

  • Kotlin 2.3.20

  • Compose Multiplatform 1.10.3

  • Arrow-kt 2.2.2.1

  • Ktor 3.4.2

  • Room 2.8.4

  • Koin 4.2.0

  • Supabase 3.5.0

  • RevenueCat KMP

  • Coil3 3.4.0

  • Tink 1.21.0

  • Kermit 2.1.0


WHAT MAKES THIS DIFFERENT

Others ship plain text token storage. KMP SaaS Kit uses Tink AES-256-GCM + iOS Keychain.

Others hardcode subscription tiers. KMP SaaS Kit uses dynamic RevenueCat offerings.

Others use monolithic architecture. KMP SaaS Kit uses FeatureRegistry – remove features in 2 steps.

Others return basic error strings. KMP SaaS Kit uses typed DomainError hierarchy with Either.

Others skip resilience patterns. KMP SaaS Kit includes a circuit breaker + exponential backoff on every call.

Others are Compose-only on iOS. KMP SaaS Kit includes a native SwiftUI escape hatch, documented.

Others include minimal docs. KMP SaaS Kit ships with 16 comprehensive docs + an architecture guide.


QUICK START

WHAT DO YOU GET?

  • Complete source code (120+ Kotlin files)

  • 33+ passing unit tests

  • 16 documentation files CI/CD workflows (GitHub Actions)

  • Setup + package rename scripts Lifetime access to this version Material 3 theme with bundled Outfit + DM Sans fonts

  • Supports: Android minSdk 26 / iOS 16+

REQUIREMENTS

  • Android Studio Meerkat (or later)

  • Xcode 16+ (for iOS builds)

  • JDK 21 Supabase account (free tier works)

  • RevenueCat account (free tier works)

WHO IS THIS FOR?

  • Indie developers who want a ready-to-ship SaaS app template without rebuilding the same foundation for the tenth time.

  • Experienced mobile devs looking for a KMP architecture reference with Arrow-kt, Tink security, and production patterns.

  • Agencies and teams who need a production-grade starting point that cuts 6-8 weeks of boilerplate setup time.

ARCHITECTURE OVERVIEW

  • UI (Compose Multiplatform)

  • ViewModel (@optics state, parZip loading)

  • UseCase (either{} / Raise DSL)

  • Repository (Either<DomainError, T>)

  • DataSource (Supabase, Room, RevenueCat)

Each feature is a self-contained plugin:

features/auth/

  1. data/ Supabase auth, token storage, DTOs

  2. domain/ User entity, AuthRepository interface, use cases

  3. presentation/ AuthViewModel with Arrow Optics state

  4. ui/ Sign in, sign up, forgot password screens

  5. AuthFeature.kt One file: registers routes, DI, and navigation


DOCUMENTATION INCLUDED

  • GETTING_STARTED.md - Prerequisites, first build, common issues

  • ARCHITECTURE.md - Data flow, library rationale, adding features

  • CUSTOMIZATION.md - Rename app, change theme, add screens

  • THEMING.md - Colors, fonts, spacing, dark mode

  • BACKEND_SUPABASE.md - SQL tables, RLS policies, auth providers

  • CUSTOM_BACKEND.md - Interface contracts for swapping backends

  • REVENUECAT_SETUP.md - RevenueCat project + sandbox testing

  • IOS_SETUP.md - Xcode project, Swift entry point, capabilities

  • NATIVE_SCREENS.md - SwiftUI escape hatch pattern

  • CICD_SETUP.md - GitHub Secrets, keystore setup

    • 6 more docs covering Google Sign-In, static analysis, Fastlane, iOS CI


FAQ

Can I use Firebase instead of Supabase? Yes. The AuthRemoteSource and SubscriptionSource are interfaces. Implement Firebase and register it in Koin, and you're done. docs/CUSTOM_BACKEND.md has the full interface contracts and a Firebase skeleton.

Can I remove features I don't need?

  • Yes. Delete the feature package and remove one line from FeatureRegistry. The app compiles and runs.

Does it work on real iOS devices?

  • Yes. The Shared framework compiles for iosArm64 (devices) and iosSimulatorArm64 (simulator). See docs/IOS_SETUP.md for Xcode configuration.

What about push notifications?

  • The kit includes the NotificationPermission platform bridge (Android POST_NOTIFICATIONS + iOS UNUserNotificationCenter). Push notification delivery (FCM/APNs) is project-specific – add it to your Supabase or Firebase setup.


SUPPORT

This purchase includes priority email support. For help: [email protected] Please include your purchase confirmation along with a description of your issue.


Built by Vectencia Ltd - vectencia.com | Production-grade mobile code, not tutorial work. 12+ years shipping real apps to 10M+ users.