{"id":15132267,"url":"https://github.com/ikarenkov/Modo","last_synced_at":"2025-09-29T00:31:31.086Z","repository":{"id":40267740,"uuid":"336628876","full_name":"ikarenkov/Modo","owner":"ikarenkov","description":"Navigation library based on UDF principles","archived":false,"fork":false,"pushed_at":"2024-11-16T18:49:00.000Z","size":37683,"stargazers_count":309,"open_issues_count":10,"forks_count":18,"subscribers_count":13,"default_branch":"dev","last_synced_at":"2025-01-10T11:59:50.339Z","etag":null,"topics":["android","cicerone","compose-navigation","jetpack-compose","jetpack-compose-navigation","kmm","kotlin","navigation","udf"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ikarenkov.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-02-06T20:23:10.000Z","updated_at":"2025-01-06T08:28:48.000Z","dependencies_parsed_at":"2024-11-11T13:33:56.044Z","dependency_job_id":"4c1f8c06-6809-4333-a69f-89f937c31917","html_url":"https://github.com/ikarenkov/Modo","commit_stats":null,"previous_names":["ikarenkov/modo","terrakok/modo"],"tags_count":10,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ikarenkov%2FModo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ikarenkov%2FModo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ikarenkov%2FModo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ikarenkov%2FModo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ikarenkov","download_url":"https://codeload.github.com/ikarenkov/Modo/tar.gz/refs/heads/dev","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":234575225,"owners_count":18854925,"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","cicerone","compose-navigation","jetpack-compose","jetpack-compose-navigation","kmm","kotlin","navigation","udf"],"created_at":"2024-09-26T04:04:40.751Z","updated_at":"2025-09-29T00:31:30.031Z","avatar_url":"https://github.com/ikarenkov.png","language":"Kotlin","funding_links":[],"categories":["Articles"],"sub_categories":["Navigation"],"readme":"# [Modo](https://ikarenkov.github.io/Modo) - State-Based Jetpack Compose Navigation\n\n[![Maven Central latest stable](https://img.shields.io/maven-central/v/com.github.terrakok/modo-compose?versionSuffix=0.10.1\u0026label=Latest%20stable\u0026color=28A745)](https://central.sonatype.com/artifact/com.github.terrakok/modo-compose/0.10.1/overview)\n[![Maven Central latest](https://img.shields.io/maven-central/v/com.github.terrakok/modo-compose?label=Latest\u0026color=FFA500)](https://central.sonatype.com/artifact/com.github.terrakok/modo-compose)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\nModo is a simple and convenient state-based navigation library for Jetpack Compose.\n\nhttps://github.com/ikarenkov/Modo/assets/17216532/e2977736-bdda-44a9-83f3-379731ddfecc\n\n## [Project Website](https://ikarenkov.github.io/Modo)\n\nCheck out our website to get the most up-to-date information about the library:\n\n* [**Modo Overview**](https://ikarenkov.github.io/Modo/modooverview.html)\n* [**Quick Start Guide**](https://ikarenkov.github.io/Modo/quickstartguide.html)\n* [**Core Concepts**](https://ikarenkov.github.io/Modo/core-concepts.html)\n* [**How to Integrate Modo into Your App**](https://ikarenkov.github.io/Modo/how-to-integrate-modo-to-your-app.html)\n* [**Features List**](https://ikarenkov.github.io/Modo/features.html)\n\n## Navigation is a Graph\n\nEach integration of Modo is a\n\u003ca href=\"https://en.wikipedia.org/wiki/Tree_(graph_theory)#Rooted_tree\" summary=\"A rooted tree is a tree in which one vertex has been designated the root.\"\u003erooted tree (wiki)\u003c/a\u003e that can be displayed as follows:\n\u003cimg src=\"Writerside/images/coreConcepts/diagram_1.png\" alt=\"modo graph\"/\u003e\n\n* Each node is a \u003ccode\u003eScreen\u003c/code\u003e or \u003ccode\u003eContainerScreen\u003c/code\u003e.\n* Leaf nodes are \u003ccode\u003eScreen\u003c/code\u003es.\n* Inner nodes are \u003ccode\u003eContainerScreen\u003c/code\u003es. They can contain other \u003ccode\u003eScreen\u003c/code\u003es or \u003ccode\u003eContainerScreen\u003c/code\u003es in their \u003ccode\u003e\n  navigationState\u003c/code\u003e.\n* The root node is a \u003ccode\u003eRootScreen\u003c/code\u003e. You can have multiple roots in your app.\n  See \u003ca href=\"https://ikarenkov.github.io/Modo/how-to-integrate-modo-to-your-app.html\"\u003eHow to integrate Modo\u003c/a\u003e for details.\n\n## State Defines UI\n\n* `NavigationState` defines the UI:\n    * The initial state is defined in the constructor of `ContainerScreen` by `navModel: NavModel\u003cState, Action\u003e`.\n    * To update the state, use `dispatch(action: Action)` on `NavigationContainer`, or use the built-in extension functions\n      for [StackScreen](modo-compose/src/main/java/com/github/terrakok/modo/stack/StackActions.kt)\n      and [MultiScreen](modo-compose/src/main/java/com/github/terrakok/modo/multiscreen/MultiScreenActions.kt).\n* There are `Screen` and `ContainerScreen`:\n    * `ContainerScreen` can contain and render child screens.\n    * There are some built-in implementations of `ContainerScreen` like `StackScreen` and `MultiScreen`.\n* You can easily create custom `Action` by extending `Action` or `ReducerAction`.\n\n# License\n\n```\nMIT License\n\nCopyright (c) Konstantin Tskhovrebov (@terrakok)\n          and Karenkov Igor (@KarenkovID)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fikarenkov%2FModo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fikarenkov%2FModo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fikarenkov%2FModo/lists"}