A Kotlin Multiplatform app that is a mate to any chef in the kitchen managing recipes, grocery lists, and meal planning. It is available on Android, iOS, MacOS, Windows & Linux.
This is a Kotlin Multiplatform project targeting Android, iOS, Web, Desktop (JVM), Server. It aims to share as much code as possible in a modular way, so the general file structure of the project is as follows:
- client - all the shared client code and client application code
- composeApp - the compose multiplatform applications
- aichat - AI chat and recipe extraction flows
- auth - authentication data, UI, and use cases
- bottomnav - bottom navigation and tab ordering
- browser - in-app recipe browser and browser history
- cook - cook mode and active cooking sessions
- database - client database
- developer-settings - debug-only developer settings and test-user support
- featureflag - feature flag evaluation, overrides, and admin-facing data
- root - root BLoC (business logic component) to manage navigation of the whole app
- grocery - grocery data plus list and detail BLoCs
- meal - meal planning data and UI logic
- recipe - recipe data, list/detail flows, categories, import, and export
- recipebook - recipe book data and editing flows
- settings - settings root, app settings, and more menu flows
- shared - common client code
- testing - common testing helpers
- text - shared text and resource helpers
- ui - shared Compose UI components, theme, robots, and screenshot tests
- util - shared utility APIs and implementations
- admin - Compose Multiplatform admin app for managing feature flags
- iosApp - iOS application shell and share extension
- supabase - Supabase migrations and backend configuration
- docs - architecture, deployment, deep linking, and feature documentation
- build-logic - all the convention plugins to share logic of modular libraries
- devkit - shared Gradle snippets for module conventions
- scripts - local development and release helper scripts
./gradlew :client:composeApp:installDebug./gradlew :client:composeApp:runTo build and run the development version of the iOS app, use the run configuration from the run widget in your IDE’s toolbar or open the /iosApp directory in Xcode and run it from there.
- Architecture overview
- Build configuration (Supabase + Bugsnag)
- Developer settings (debug-only env switch + test-user login)
- Deployment (Android / iOS / Desktop)
- Deep linking setup
- Email verification
- Coroutines - asynchronous programming framework
- kotlinx.serialization - multiplatform serialization library
- kotlinx-datetime - multiplatform date time library
- ktfmt - kotlin code formatting and linter
- Compose Multiplatform - shared UI for client
- SqlDelight - sqlite database
- Essenty - lifecycle, instance keeper, back handler, state keeper
- Decompose - navigation
- metro - dependency injection
- kermit - logging
- Bugsnag - error logging
- multiplatform-settings - key value storage
- Kotlin test - KMP testing framework
- Kotest - assertions
- Mokkery - mocking library
- Turbine - coroutines testing library
- Compose Preview Screenshot Testing - snapshot tests for
@Previewcomposables (seeclient/ui/screenshot-test/andCLAUDE.mdfor the workflow) - Compose testing - official KMP Compose UI testing docs