SkillAgentSearch skills...

Notflix

My Kotlin Multiplatform playground that is NOT a clone of netflix

Install / Use

/learn @VictorKabata/Notflix

README

Notflix

<!-- <p align="center"><img src="assets/logo_notflix.png" alt="NotFlix" height="31px"></p> --> <p align="center"> <img src="https://img.shields.io/badge/-KOTLIN-E50914?logo=kotlin&logoColor=white&style=for-the-badge"> <img src="https://img.shields.io/badge/-ANDROID-E50914?logo=android&logoColor=white&style=for-the-badge"> <img src="https://img.shields.io/badge/-IOS-E50914?logo=ios&logoColor=white&style=for-the-badge"> <img src="https://img.shields.io/badge/-DESKTOP-E50914?logo=desktop&logoColor=white&style=for-the-badge"> </p>

Notflix is a Kotlin Multiplatform app that demonstrates cross-platform development using a single codebase and Compose Multiplatform for a consistent UI across Android, iOS and desktop(Linux, Windows & macOS) devices.

It consumes the TMDB API to fetch movie data and display it on all platforms.

[!note] This repository is under constant development/refactor since the project is designed to showcase the basics of Kotlin/Compose Multiplatform and is not intended for production use

Table Of Content

Screenshots

Android

<img src="screenshots/android1.png" width="200"/> <img src="screenshots/android2.png" width="200"/> <img src="screenshots/android3.png" width="200"/> <img src="screenshots/android4.png" width="200"/> <img src="screenshots/android5.png" width="200"/> <img src="screenshots/android6.png" width="200"/>

iOS

<img src="screenshots/ios1.png" width="200"/> <img src="screenshots/ios2.png" width="200"/> <img src="screenshots/ios3.png" width="200"/> <img src="screenshots/ios4.png" width="200"/> <img src="screenshots/ios5.png" width="200"/> <img src="screenshots/ios6.png" width="200"/>

Desktop

<img src="screenshots/desktop1.png" width="640"/> <img src="screenshots/desktop2.png" width="640"/>

Getting Started

Prerequisite

  • JDK - Required for Android development.
  • Android Studio - For Android development and project management.
  • Xcode - For iOS development and project management.
  • Kotlin Multiplatform Plugin- In Android Studio, select Settings/Preferences | Plugins, search Marketplace for Kotlin Multiplatform, and then install it.

Installation

  • Clone the repository from GitHub:
git clone https://github.com/VictorKabata/Notflix.git

To install the android application:

  • Open the project in Android Studio and connect your android device/emulator.
  • Configure the TMDB API key in the local.properties file.
api_key=<YOUR TMDB API KEY>
  • Sync the Gradle project to download dependencies.
  • Run the gradle command below from Android Studio terminal to build and install the android application on the connected android device/emulator:
./gradlew installDebug

To install the iOS application:

  • Open the iOS project from XCode and connect your iOS device/emulator.
  • Run the project.

To install the desktop application:

  • Open the project in Android Studio and run the gradle command below to build and install the application on the desktop:
gradlew desktopRun

Project Structure

The application has two main modules:

  1. composeApp: This is the core module containing the shared Kotlin Multiplatform code for network, caching, and UI logic.
  • androidMain: Contains Android-specific code, primarily serving as an entry point for the Android application. This directory includes the MainActivity class, application-level configuration, and Android-specific dependencies or initialization.

  • iOSMain: Contains iOS-specific code, primarily serving as an entry point for the iOS application. This directory includes the ContentView class, application-level configuration, and iOS-specific initialization for Koin.

  • desktopMain: Contains desktop-specific code, primarily serving as an entry point for the desktop application. This directory includes the main application class, window creation, and desktop-specific dependencies or initialization.

  • commonMain: Contains the core business logic, data access, and UI components that are shared across all platforms.

    • domain: This package houses the domain layer, which defines the business logic and entities of the application. It typically includes interfaces, data classes, and utils.
    • data: This package houses the data layer, which is responsible for fetching and caching data. It might include repositories, data sources, and network clients.
    • ui: This package houses the UI components that are shared across all platforms. These components can be implemented using Compose Multiplatform, allowing for a consistent user experience.
    • di: Contains the dependency injection setup, managing the creation and provision of dependencies throughout the application.
  1. appiOS: This module houses the iOS-specific app code, serving as the entry point for the iOS application, providing the necessary configuration and integration with the shared composeApp module.

Libraries

  • Kotlin Multiplatform - The foundation of the project, enabling shared code across platforms.
  • Compose Multiplatform - Enables building consistent UI components for Android, iOS, and desktop.
  • KotlinX Coroutines - Manages asynchronous operations for efficient app performance.
  • Datastore - Provides a mechanism for storing and retrieving key value pairs like user preferences.
  • Koin - A dependency injection framework for managing dependencies throughout the application.
  • kotlinx.serialization - Enables serialization and deserialization of data objects.
  • Ktor - A multiplatform HTTP client for making network requests and handling responses.
  • Napier - A logging library for providing detailed logs during development.
  • kotlinx.datetime - A multiplatform Kotlin library for working with date and time.
  • Room - Provides a persistence layer for storing data locally.
  • Paging - Enables efficient handling of large datasets for pagination in UI components.
  • BuildKonfig - Supports embedding values from gradle file.
  • Coil3 - Compose Image library for Kotlin Multiplatform
  • Jetpack Navigation - Provides navigation components for handling UI transitions within the app.
  • KMP Palette - Provides tools for working with colors on multiple platforms.
  • Ktlint: For enforcing code style consistency.
  • Detekt: For static code analysis and quality checks.

Related Resources

In this section I've included some resources ie. articles and GitHub repositories that i used to learn about kotlin multiplatform:

Videos 📽️

Articles/Blogs 📖

Sample Projects 🤖

  • KMM Sample - A sample project for experiments with Kotlin Multiplatform mobile.
  • Fantasy Premier League - Kotlin Multiplatform project with Jetpack Compose, Compose for Desktop and SwiftUI clients (and using Ktor for remote API requests and Realm for persistence).
  • KaMPKit
  • People In Space - Minimal Kotlin Multiplatform project with SwiftUI, Jetpack Compose, Compose for Wear OS, Compose for Desktop, Compose for Web, and Kotlin/JS + React clients along with Ktor backend.
  • Poetree - P
View on GitHub
GitHub Stars679
CategoryDevelopment
Updated27d ago
Forks98

Languages

Kotlin

Security Score

85/100

Audited on Mar 4, 2026

No findings