{"id":20935426,"url":"https://github.com/ww-tech/roxie","last_synced_at":"2025-04-05T08:09:26.142Z","repository":{"id":47333740,"uuid":"159404378","full_name":"ww-tech/roxie","owner":"ww-tech","description":"Lightweight Android library for building reactive apps.","archived":false,"fork":false,"pushed_at":"2021-12-06T09:54:02.000Z","size":256,"stargazers_count":481,"open_issues_count":6,"forks_count":36,"subscribers_count":20,"default_branch":"master","last_synced_at":"2025-03-29T07:09:41.814Z","etag":null,"topics":["android-architecture","mvi","mvi-architecture","redux","rxjava","rxjava2","state-management","unidirectional-data-flow"],"latest_commit_sha":null,"homepage":null,"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/ww-tech.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-11-27T21:52:53.000Z","updated_at":"2025-02-05T20:34:35.000Z","dependencies_parsed_at":"2022-09-10T22:22:43.340Z","dependency_job_id":null,"html_url":"https://github.com/ww-tech/roxie","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ww-tech%2Froxie","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ww-tech%2Froxie/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ww-tech%2Froxie/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ww-tech%2Froxie/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ww-tech","download_url":"https://codeload.github.com/ww-tech/roxie/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247305935,"owners_count":20917208,"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-architecture","mvi","mvi-architecture","redux","rxjava","rxjava2","state-management","unidirectional-data-flow"],"created_at":"2024-11-18T22:14:55.804Z","updated_at":"2025-04-05T08:09:26.119Z","avatar_url":"https://github.com/ww-tech.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003e\u003cimg src=\"docs/roxie-logo.svg\" width=\"75%\" alt=\"Roxie logo\" /\u003e\u003c/h1\u003e\n\u003cp align=\"center\"\u003e\n\t\u003ca href=\"https://circleci.com/gh/ww-tech/roxie/tree/master\"\u003e\n\t\t\u003cimg src=\"https://circleci.com/gh/ww-tech/roxie/tree/master.svg?style=shield\u0026circle-token=86ceda91392b3e6720cc5fe553c90eec36195b03\" /\u003e\n\t\u003c/a\u003e\n\t\u003ca href=\"http://androidweekly.net/issues/issue-349\"\u003e\n    \t\u003cimg src=\"https://img.shields.io/badge/Android%20Weekly-%23349-2CA3E6.svg?style=flat\" /\u003e\n    \u003c/a\u003e\n\u003c/p\u003e\n\nRoxie is a lightweight Android library for building reactive apps. We successfully use it for Android product development at WW (formerly Weight Watchers).\n\n## Why Roxie?\n\nRoxie implements Unidirectional Data Flow (UDF) concepts introduced by [Redux](https://redux.js.org/). The core idea is that user Actions get dispatched to a Store (State container) which uses Reducers to transform them into States. In Android world, this design pattern is known as MVI (Model-View-Intent) where Model describes State and Intent describes user interaction.\n\nRoxie is a tiny library. It is implemented using widely adopted Lifecycle Google Architecture Components and RxJava2. Hopefully, the small footprint of this library will enable you to fully understand both concepts and implementation details.\n\n## Roxie in a nutshell\n\nThe Unidirectional Data Flow with Roxie can be summarized as follows:\n1. User interaction events (Actions) get dispatched to ViewModel via a single pipeline.\n2. Each Action gets transformed into Changes.\n3. Each Change combined with a previous State produces a new State using a Reducer.\n4. UI observes new States via a single pipeline and renders them as they come in.\n\nSome of Roxie's strengths are:\n* State Machine managing immutable States makes data predictable and easier to manage.\n* Support for state restoration after device rotation and process death.\n* A set of Actions, Changes, and States for each screen result in a thorough user-centric design.\n* Logging of Actions and States makes both debugging and crash reporting extremely efficient.\n* Rich RxJava APIs help achieve composable functional code.\n* Meaningful and consistent unit tests asserting that given Actions and initial State produce correct new States.\n\n## Documentation \n\nCheck out the sample bundled and [wiki pages]( https://github.com/ww-tech/roxie/wiki) to get started. Some of the topics covered are:\n\n* [ViewModel](https://github.com/ww-tech/roxie/wiki/1.-ViewModel)\n* [Actions](https://github.com/ww-tech/roxie/wiki/2.-Actions)\n* [Changes](https://github.com/ww-tech/roxie/wiki/3.-Changes)\n* [States](https://github.com/ww-tech/roxie/wiki/4.-States)\n* [Reducer](https://github.com/ww-tech/roxie/wiki/5.-Reducer)\n* [Rendering State](https://github.com/ww-tech/roxie/wiki/6.-Rendering-State)\n* [Logging](https://github.com/ww-tech/roxie/wiki/7.-Logging)\n* [Process Death](https://github.com/ww-tech/roxie/wiki/8.-Process-Death)\n* [Unit Tests](https://github.com/ww-tech/roxie/wiki/9.-Unit-tests)\n\n## Installation\n\nAdd the following Gradle dependency to your project `build.gradle` file:\n\n```groovy\ndependencies {\n    implementation 'com.ww:roxie:0.5.0'\n}\n```\n\n## License\n\n    Copyright 2019 WW International, Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fww-tech%2Froxie","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fww-tech%2Froxie","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fww-tech%2Froxie/lists"}