{"id":19773987,"url":"https://github.com/badoo/decompose","last_synced_at":"2025-04-04T18:09:54.034Z","repository":{"id":40332602,"uuid":"287788515","full_name":"badoo/Decompose","owner":"badoo","description":"Kotlin Multiplatform lifecycle-aware business logic components (aka BLoCs) with routing functionality and pluggable UI (Jetpack Compose, SwiftUI, JS React, etc.), inspired by Badoos RIBs fork of the Uber RIBs framework","archived":false,"fork":false,"pushed_at":"2022-05-14T06:44:15.000Z","size":67336,"stargazers_count":812,"open_issues_count":7,"forks_count":40,"subscribers_count":24,"default_branch":"master","last_synced_at":"2025-03-28T17:11:13.534Z","etag":null,"topics":["android","components","hacktoberfest","jetpack-compose","kotlin","lifecycle","lifecycle-aware-components","multiplatform","tree-structure"],"latest_commit_sha":null,"homepage":"https://arkivanov.github.io/Decompose","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/badoo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null},"funding":{"custom":["https://www.buymeacoffee.com/arkivanov"]}},"created_at":"2020-08-15T16:57:17.000Z","updated_at":"2025-03-10T08:41:15.000Z","dependencies_parsed_at":"2022-07-24T19:02:07.055Z","dependency_job_id":null,"html_url":"https://github.com/badoo/Decompose","commit_stats":null,"previous_names":[],"tags_count":29,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/badoo%2FDecompose","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/badoo%2FDecompose/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/badoo%2FDecompose/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/badoo%2FDecompose/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/badoo","download_url":"https://codeload.github.com/badoo/Decompose/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247226215,"owners_count":20904465,"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","components","hacktoberfest","jetpack-compose","kotlin","lifecycle","lifecycle-aware-components","multiplatform","tree-structure"],"created_at":"2024-11-12T05:11:41.268Z","updated_at":"2025-04-04T18:09:54.017Z","avatar_url":"https://github.com/badoo.png","language":"Kotlin","readme":"[![Maven Central](https://img.shields.io/maven-central/v/com.arkivanov.decompose/decompose?color=blue)](https://search.maven.org/artifact/com.arkivanov.decompose/decompose)\n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](http://www.apache.org/licenses/LICENSE-2.0)\n[![Twitter URL](https://img.shields.io/badge/Twitter-@arkann1985-blue.svg?style=social\u0026logo=twitter)](https://twitter.com/arkann1985)\n\n![badge][badge-android]\n![badge][badge-ios]\n![badge][badge-js]\n![badge][badge-jvm]\n![badge][badge-mac]\n![badge][badge-tvos]\n![badge][badge-watchos]\n\n# Maintenance notice\n\n**This repository is not maintained. [Arkadii Ivanov](https://github.com/arkivanov) continued to work on the fork [arkivanov/Decompose](https://github.com/arkivanov/Decompose).**\n\n# Decompose\n\nPlease see the [project website](https://arkivanov.github.io/Decompose/) for documentation and APIs. \n\nDecompose is a Kotlin Multiplatform library for breaking down your code into lifecycle-aware business logic components (aka BLoC), with routing functionality and pluggable UI (Jetpack Compose, Android Views, SwiftUI, JS React, etc.). This project is inspired by [Badoos RIBs](https://github.com/badoo/RIBs) fork of the [Uber RIBs](https://github.com/uber/RIBs) framework.\n\n## Setup\n\nPlease check the [Installation](https://arkivanov.github.io/Decompose/getting-started/installation/) section of the documentation.\n\n## Overview\n\nHere are some key concepts of the library, more details can be found in the documentation.\n\n* [Component](https://arkivanov.github.io/Decompose/component/overview/) - every component represents a piece of logic with its own lifecycle, the UI is optional an is plugged externally\n* [ComponentContext](https://arkivanov.github.io/Decompose/component/overview/#componentcontext) - every component has its own [ComponentContext], which makes components lifecycle-aware and allows state preservation, instances retaining (aka AndroidX `ViewModel`) and back button handling\n* [Router](https://arkivanov.github.io/Decompose/router/overview/) - enables navigation between child components, nested navigation is also supported\n* [Lifecycle](https://arkivanov.github.io/Decompose/component/lifecycle/) - provides a way to listen for lifecycle events in components\n* [StateKeeper](https://arkivanov.github.io/Decompose/component/state-preservation/) - makes it possible to preserve state or data in a component when it gets destroyed\n* [InstanceKeeper](https://arkivanov.github.io/Decompose/component/instance-retaining/) - retains instances in your components (similar to AndroidX `ViewModel`)\n* [BackPressedHandler](https://arkivanov.github.io/Decompose/component/back-button/) - provides a way to handle and intercept back button presses\n\n### Component hierarchy\n\n\u003cimg src=\"docs/media/ComponentHierarchy.png\" width=\"512\"\u003e\n\n### Pluggable UI hierarchy\n\n\u003cimg src=\"docs/media/PluggableUiHierarchy.png\" width=\"512\"\u003e\n\n### Typical component structure\n\n\u003cimg src=\"docs/media/ComponentStructure.png\" width=\"512\"\u003e\n\n## Samples\n\nCheck out the [project website](https://arkivanov.github.io/Decompose/getting-started/samples/) for a full description of each sample.\n\n## Articles\n\n- [Decompose — experiments with Kotlin Multiplatform lifecycle-aware components and navigation](https://proandroiddev.com/decompose-experiments-with-kotlin-multiplatform-lifecycle-aware-components-and-navigation-a04ef3c7f6a3?source=friends_link\u0026sk=f7d289cc329b6c8a765fc049e36c313f)\n- [Fully cross-platform Kotlin applications (almost)](https://proandroiddev.com/fully-cross-platform-kotlin-applications-almost-29c7054f8f28?source=friends_link\u0026sk=4619fdcb17912fde589bc4fca83efbbd)\n\n## Author\n\nTwitter: [@arkann1985](https://twitter.com/arkann1985)\n\nIf you like this project you can always \u003ca href=\"https://www.buymeacoffee.com/arkivanov\" target=\"_blank\"\u003e\u003cimg src=\"https://cdn.buymeacoffee.com/buttons/v2/default-blue.png\" alt=\"Buy Me A Coffee\" height=32\u003e\u003c/a\u003e ;-)\n\n[badge-android]: http://img.shields.io/badge/platform-android-6EDB8D.svg?style=flat\n[badge-ios]: http://img.shields.io/badge/platform-ios-CDCDCD.svg?style=flat\n[badge-js]: http://img.shields.io/badge/platform-js-F8DB5D.svg?style=flat\n[badge-jvm]: http://img.shields.io/badge/platform-jvm-DB413D.svg?style=flat\n[badge-mac]: http://img.shields.io/badge/platform-macos-111111.svg?style=flat\n[badge-tvos]: http://img.shields.io/badge/platform-tvos-808080.svg?style=flat\n[badge-watchos]: http://img.shields.io/badge/platform-watchos-C0C0C0.svg?style=flat\n","funding_links":["https://www.buymeacoffee.com/arkivanov"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbadoo%2Fdecompose","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbadoo%2Fdecompose","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbadoo%2Fdecompose/lists"}