{"id":13773475,"url":"https://github.com/mutualmobile/Praxis","last_synced_at":"2025-05-11T05:34:51.238Z","repository":{"id":37727248,"uuid":"221002551","full_name":"mutualmobile/Praxis","owner":"mutualmobile","description":"Example Android project using MVVM, DaggerAndroid, Jetpack Compose, Retrofit, Coroutines and Multi module architecture ✌🏽","archived":false,"fork":false,"pushed_at":"2023-05-12T12:45:07.000Z","size":6866,"stargazers_count":364,"open_issues_count":12,"forks_count":48,"subscribers_count":9,"default_branch":"baseproject","last_synced_at":"2025-04-05T14:07:39.432Z","etag":null,"topics":["android","androidx","corou","dagger2","dagger2-android","databinding","jetpack-components","jetpack-compose","kotlin","kotlin-android","mvvm","rxjava","rxjava-android"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mutualmobile.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2019-11-11T14:44:59.000Z","updated_at":"2025-03-31T14:50:24.000Z","dependencies_parsed_at":"2023-02-04T06:45:31.185Z","dependency_job_id":"7661f03b-1355-4d07-ad65-cb4f66407476","html_url":"https://github.com/mutualmobile/Praxis","commit_stats":null,"previous_names":[],"tags_count":0,"template":true,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mutualmobile%2FPraxis","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mutualmobile%2FPraxis/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mutualmobile%2FPraxis/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mutualmobile%2FPraxis/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mutualmobile","download_url":"https://codeload.github.com/mutualmobile/Praxis/tar.gz/refs/heads/baseproject","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253523689,"owners_count":21921815,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","androidx","corou","dagger2","dagger2-android","databinding","jetpack-components","jetpack-compose","kotlin","kotlin-android","mvvm","rxjava","rxjava-android"],"created_at":"2024-08-03T17:01:16.045Z","updated_at":"2025-05-11T05:34:46.204Z","avatar_url":"https://github.com/mutualmobile.png","language":"Kotlin","readme":"\n# Praxis\n2022 Hit Refresh! Praxis now loves ❤️ Jetpack Compose\n\n\u003cdiv align=\"left\"\u003e\n    \u003ca href = \"https://developer.android.com/jetpack/androidx/versions/all-channel#may_5_2021\"\u003e\n        \u003cimg src = \"https://img.shields.io/badge/Jetpack%20Compose-1.0.0%20beta08-brightgreen\" /\u003e\n    \u003c/a\u003e\n\u003c/div\u003e\n\u003cbr\u003e\n\nThis is a sample app written in Kotlin following clean architecture principles which uses slack app features as an example.\n\nThe purpose of this app to showcase:\n- Implementation of Jetpack Android Architecture components with Dagger Hilt and Data Binding to minimize boilerplate code.\n- Implementation of an architecture that will support both XML and the new Compose.\n- Implementation of Modular Multi Module Navigation Architecture.\n- Performing background task with Kotlin Coroutines\n\n# Requirements\n1. Android Studio : Arctic Fox | 2020.3.1\t3.1 or higher\n2. Android Emulator or Physical android device\n\n# Built With 🏗\n\n| Tools | Link |\n|     :---      |          :---: |\n| 🤖   Kotlin | [Kotlin](https://kotlinlang.org/) |\n| 🏛   Architecture Components | [Android Architecture Components](https://developer.android.com/topic/libraries/architecture) |\n| ⛓   Data Binding | [Android Data Binding](https://developer.android.com/topic/libraries/data-binding) |\n| 💉   Dagger Hilt | [Dagger Hilt](https://developer.android.com/training/dependency-injection/hilt-android) |\n| 🌐   Retrofit | [Retrofit](http://square.github.io/retrofit/) |\n| 🚦   OkHttp | [OkHttp](http://square.github.io/okhttp/) |\n| 📄   Gson Parsing | [Gson](https://github.com/google/gson) |\n| 🌊   Coroutines | [Kotlin Coroutines](https://developer.android.com/kotlin/coroutines) |\n| 🏄🏼‍♀️   Flows | [Flows](https://developer.android.com/kotlin/flow) |\n\n\n## Architecture\n### Praxis follows the principles of Clean Architecture with Android Architecture Components.\n\n### Architecture's layers \u0026 boundaries:\n\n\u003cimg src=\"art/architecture.jpeg\" /\u003e\n\n**Presentation Layer**  contains  _UI (Activities \u0026 Fragments)_  that are coordinated by  _ViewModels which execute 1 or multiple UseCases._  Presentation Layer depends on Domain Layer.\n\n**Domain Layer** is the most INNER part of the circle (no dependencies with other layers) and it contains _Entities, Use cases \u0026 Repository Interfaces._ Use cases combine data from 1 or multiple Repository Interfaces.\n\n**Data Layer**  contains  _Repository Implementations and 1 or multiple Data Sources._  Repositories are responsible to coordinate data from the different Data Sources. Data Layer depends on Domain Layer.\n\n**Notes:** Mapping between response models and transformed models will happen via extension functions defined in transformed model file\n\n\n### Conventions:\nFiles are suffixed with be defined Class types.\n- ViewModels are suffixed with **VM**. Ex: `LoginVM`\n- UseCases are suffixed with **UseCase**. Ex: `LoginUseCase`\n- Sources are suffixed with **Source**. Ex: `LoginRemoteSource`, `LoginLocalSource`\n- Repositories are suffixed with **Repo**. Ex: `LoginRepo`\n\n## Conclusion\nThis project can be used as a template for new apps.\nThis project is continually evolving to integrate other libraries and techniques to keep it up to date.\n","funding_links":[],"categories":[":art: Pattern"],"sub_categories":["MVVM"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmutualmobile%2FPraxis","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmutualmobile%2FPraxis","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmutualmobile%2FPraxis/lists"}