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.
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
@Serializabletype-safe routesDependency 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
Download your customised ZIP file with all project from vectencia.com/gumroad-verification
Fill in your Supabase and RevenueCat keys
./gradlew :composeApp:assembleDebug
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/
data/ Supabase auth, token storage, DTOs
domain/ User entity, AuthRepository interface, use cases
presentation/ AuthViewModel with Arrow Optics state
ui/ Sign in, sign up, forgot password screens
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: support@vectencia.com 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.
Related Articles
The Unified Codebase: A Comprehensive Blueprint for Kotlin Multiplatform Clean Architecture
Master the art of building production-grade Kotlin Multiplatform applications with shared business logic across Android, iOS, and Next.js while maintaining native UI fidelity on each platform
Lessons Learned Building Paglipat.com: KMP, Ktor, Supabase & Next.js from an Android Developer's Perspective
An Android developer's journey building a travel platform with Kotlin Multiplatform for shared business logic, Ktor for backend APIs, Supabase for auth/data, and Next.js for web including why Compose Multiplatform for Web was quickly discarded
5 Myths about a Software Developer job you should stop believing
In 2014 I had the huge privilege of starting my career in software development as a Junior Game Developer coming from a ZERO commercial…