Production-grade Kotlin Multiplatform App targeting Desktop, Android, iOS
🇬🇧 Made in the UK, For the UK.
📝 Complementary article: Releasing my First True Kotlin Multiplatform App
⭐️ If you like this app, consider to star this repository.
This is a dashboard-type app that runs on desktop (desktop-first), Android, and iOS. It implements an adaptive layout that works on different window sizes. The app honours light and dark modes on all available platforms.
The main purposes of this app are:
- Track the Agile Octopus tariff unit rates for the coming 24 hours, with countdown and automatic refresh.
- Compile smart meter electricity usage; estimate and project electricity usage and cost.
- Browse available Octopus Energy tariffs.
This is a fully functional app that I developed and tested myself every day, successfully reducing my personal energy expenses by more than 50%.
This project accesses Octopus Energy’s public APIs, but has no official affiliation with Octopus Energy Ltd.
Note
This is an experimental product sponsored by and sublicensed to RW MobiMedia UK. As of July 2025, OctoMeter has entered maintenance mode. The app remains functional and continues to serve my personal needs. However:
- No further feature development is planned.
- Dependency updates will continue via Renovate.
- Critical fixes may be addressed if time permits, but active maintenance is not guaranteed.
- The iOS TestFlight build will expire and be removed starting 24 August 2025.
I want to ensure my time and efforts remain fairly aligned with my professional commitments. Keeping OctoMeter in active development could unintentionally benefit organisations that have chosen not to work with me - and it’s important for me to manage my open-source involvement responsibly.
The project dependencies are maintained by Renovate. By default, the app builds on the latest Xcode and Android Studio.
All downloadables are provided under the Release Section.
- MacOS Desktop App: We provide a DMG installer.
- Windows Desktop App: We provide both EXE and MSI installers.
- Android: We provide signed APK and App Bundle.
- iOS: Test Flight distribution is scheduled to expire on 24 August 2025. Existing testers can continue using the app until expiry. No new TestFlight builds will be uploaded..
- To build and run the Desktop app yourself, execute
./gradlew run
Archived To-Do List: There were planned enhancements during active development but are no longer being actively pursued. Logged issues are kept for reference. Outstanding items are now all closed.
Octopus Energy and Kraken prefer GraphQL over REST API. This project migrated most REST APIs to GraphQL, although both are still used.
Features | Implementation |
---|---|
Account and meters | 🕸️ GraphQL |
Products Search (by postcode) | 🕸️ GraphQL |
Tariff details | 🕸️ GraphQL |
Consumptions | 🕸️ GraphQL |
Half-hourly tariff rates | 😴 RestAPI (Needs access to tariffs not subscribed) |
Version 1.4.0 is the last version it contains pure Ktor-RestAPI implementation.
This app can run under the demo mode without requiring any credentials.
To pull real smart meter data from your Octopus Energy account, you need to generate an API key for your account at https://octopus.energy/dashboard/new/accounts/personal-details/api-access. This app never asks for your Octopus customer account password, and you can always generate a new API key to invalidate the old keys.
This app does not have write access to any of your customer data kept at Octopus Energy's systems.
-
/composeApp
is for Kotlin code shared across the Compose Multiplatform application. It contains several subfolders:commonMain
is for code that’s common for all targets.androidMain
is the traditional Android project root.desktopMain
is for the desktop (JVM) app.iosMain
is for the Kotlin code to be exposed to the iOS app.
-
/iosApp
contains the iOS application. OpenOctoMeter.xcworkspace
to build the App.
- Kermit - Apache 2.0 - A Kotlin Multiplatform logging library
- KoalaPlot - MIT - A plotting library for Kotlin Multiplatform
- AndroidX Activity Compose - Apache 2.0 - Jetpack Compose integration with Activity
- AndroidX Core Splashscreen - Apache 2.0 - Core splash screen
- AndroidX Security Crypto - Apache 2.0 - Security library for Android
- Jetpack Compose UI Tooling - Apache 2.0 - UI tooling for Jetpack Compose
- AndroidX Test Core KTX - Apache 2.0 - Core KTX library for AndroidX test
- AndroidX Room - Apache 2.0 - Room Database
- AndroidX SQLite Bundled - Apache 2.0 - Bundled SQLite for AndroidX
- Robolectric - Apache 2.0 - Unit testing framework for Android
- Ktor - Apache 2.0 - Framework for building asynchronous servers and clients in connected systems
- Kotlinx DateTime - Apache 2.0 - A multiplatform Kotlin library for working with date and time
- Kotlinx Coroutines - Apache 2.0 - Libraries for Kotlin coroutines
- Kotlinx Serialization - Apache 2.0 - Kotlin multiplatform serialization library
- Material3 Window Size Class Multiplatform - Apache 2.0 - Material Design components for Jetpack Compose
- Koin - Apache 2.0 - Dependency injection framework for Kotlin
- LeakCanary - Apache 2.0 - A memory leak detection library for Android
- Multiplatform Settings - Apache 2.0 - Multiplatform settings library for Kotlin
- Jetpack Navigation Compose - Apache 2.0 - Navigation component for Jetpack Compose
- AndroidX Lifecycle - Apache 2.0 - Lifecycles-aware components
- Theme Detector - MIT - Detect system theme (light/dark mode)
- AndroidX Test Ext JUnit - Apache 2.0 - Extensions for Android testing
- AndroidX Espresso - Apache 2.0 - UI testing framework
- AndroidX UI Automator - Apache 2.0 - UI automation testing framework
- AndroidX Benchmark - Apache 2.0 - Benchmarking library
- AndroidX Profile Installer - Apache 2.0 - Install profiles for faster startup
- SLF4J - MIT - Simple facade for logging systems
- Skiko - Apache 2.0 - Kotlin Multiplatform bindings to Skia
- Apollo GraphQL - MIT - A strongly-typed, caching GraphQL client for Android and Kotlin Multiplatform
- Android Application Plugin - Google - Plugin for building Android applications
- Android Library Plugin - Google - Plugin for building Android libraries
- KSP Plugin - Google - Kotlin Symbol Processing API
- Android Test Plugin - Google - Plugin for Android test projects
- AndroidX Room Plugin - Google - Plugin for AndroidX Room
- Jetbrains Compose Plugin - JetBrains - Plugin for Jetpack Compose
- Compose Compiler Plugin - JetBrains - Plugin for Jetpack Compose
- Kotlin Multiplatform Plugin - JetBrains - Plugin for Kotlin Multiplatform projects
- Kotlin CocoaPods Plugin - JetBrains - Plugin for integrating with CocoaPods
- Kotlin Power Assert Plugin - JetBrains - Plugin for enhanced assertions in Kotlin
- Ktlint Plugin - JLLeitschuh - Plugin for Kotlin linter
- Kover Plugin - JetBrains - Code coverage tool for Kotlin
- Serialization Plugin - JetBrains - Plugin for Kotlin serialization
- BuildConfig Plugin - gmazzo - Plugin for generating BuildConfig classes
- Baseline Profile Plugin - AndroidX - Plugin for generating baseline profiles
- Apollo GraphQL Plugin - Apollo GraphQL - Plugin for integrating Apollo GraphQL client with Android and Kotlin projects
- Detekt Plugin - Artur Bosch - A static code analysis tool for Kotlin projects
This project is licensed under the Mozilla Public License Version 2.0 (MPL-2.0) with a non-commercial clause. See the LICENSE file for details.
Every tiny piece matters. This App contains the icons contributed by:
MIT License:
- Bootstrap Icons
- Eva Icons
- Lineicons
- Fluent UI System Icons
- Fluent UI React
- Phosphor Icons
- Tabler Icons
- akar-icons
Apache 2.0 License:
CC BY 4.0 License:
ISC License: