SlackComposeMultiplatform
SlackComposeMultiplatform copied to clipboard
A Kotlin Multiplatform Slack clone using gRPC
Slack Compose Multiplatform Application
🏗️️ Built with 💪🏼 using Jetpack Compose And Kotlin Multiplatform 😁
What | How |
---|---|
🎭 User Interface (Android,Desktop,iOS) | Jetpack Compose JB! |
🏗 Architecture | Decompose + Clean Architecture |
💉 DI (Android) | Koin |
🌊 Async | Coroutines + Flow |
🌐 Networking | gRPC |
📄 Pagination | moko-paging |
🪔 Lint | ktlint gradle plugin , ktlint Pinterest |
🤿 Testing with Turbine | Turbine |
Before running!
- check your system with KDoctor
- install JDK 17 on your machine
- add
local.properties
file to the project root and set a path to Android SDK there
Android
To run the application on android device/emulator:
- open project in Android Studio and run imported android run configuration
To build the application bundle:
- run
./gradlew :composeApp:assembleDebug
- find
.apk
file incomposeApp/build/outputs/apk/debug/composeApp-debug.apk
Desktop
Run the desktop application: ./gradlew :composeApp:run
iOS
To run the application on iPhone device/simulator:
- Open
iosApp/iosApp.xcproject
in Xcode and run standard configuration - Or use Kotlin Multiplatform Mobile plugin for Android Studio
Browser
Make sure to run envoy!
Run the browser application: ./gradlew :composeApp:jsBrowserDevelopmentRun
Prerequisities
- Fetch grpc-KMP submodule and install :plugin and :grpc-multiplatform-lib to mavenLocal()
- Setup env variables for the grpc-server with firebase creds and email info using setup.sh in the root of this project
- Run the server
The project supports android, compose iOS and jvm platform, make sure you match the ip:addr in the class GrpcCalls() once you run the slackserver locally!
Architecture
Video Demo with Andorid, iOS and JVM Desktop
https://user-images.githubusercontent.com/4393101/229371347-1cebf7bf-384d-4ec0-bfcf-19b1e34e6290.mp4
UI Tests introduced with commoncomposeui module
https://github.com/oianmol/SlackComposeMultiplatform/assets/4393101/05a37ed9-c27c-41dd-b493-26cb55506095
License
Copyright 2024 Anmol Verma
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.