{"id":13617355,"url":"https://github.com/willowtreeapps/cordux","last_synced_at":"2025-05-07T08:49:09.418Z","repository":{"id":56906634,"uuid":"63899333","full_name":"willowtreeapps/cordux","owner":"willowtreeapps","description":null,"archived":false,"fork":false,"pushed_at":"2019-08-29T13:49:52.000Z","size":2063,"stargazers_count":61,"open_issues_count":15,"forks_count":4,"subscribers_count":29,"default_branch":"develop","last_synced_at":"2025-04-07T13:02:22.762Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://willowtreeapps.github.io/cordux/","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/willowtreeapps.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-07-21T20:11:13.000Z","updated_at":"2023-06-06T02:22:09.000Z","dependencies_parsed_at":"2022-08-21T03:20:46.904Z","dependency_job_id":null,"html_url":"https://github.com/willowtreeapps/cordux","commit_stats":null,"previous_names":[],"tags_count":39,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/willowtreeapps%2Fcordux","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/willowtreeapps%2Fcordux/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/willowtreeapps%2Fcordux/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/willowtreeapps%2Fcordux/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/willowtreeapps","download_url":"https://codeload.github.com/willowtreeapps/cordux/tar.gz/refs/heads/develop","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252847235,"owners_count":21813438,"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":[],"created_at":"2024-08-01T20:01:40.450Z","updated_at":"2025-05-07T08:49:09.398Z","avatar_url":"https://github.com/willowtreeapps.png","language":"Swift","funding_links":[],"categories":["HarmonyOS"],"sub_categories":["Windows Manager"],"readme":"# Cordux\n\n[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage)\n\n\u003cimg alt=\"You got your Redux in my app coordinator\" src=\"https://github.com/willowtreeapps/cordux/blob/develop/yougot.jpg?raw=true\" width=\"400\"\u003e\n\n## Installation\n\nCocoaPods:\n\n```ruby\npod 'Cordux'\n```\n\nCarthage:\n\n```ruby\ngithub \"willowtreeapps/cordux\" \u003e= 0.1\n```\n\n## Cordux combines app coordinators with Redux\n\nSoroush Khanlou's [blog post](http://khanlou.com/2015/10/coordinators-redux/)\ngives a great rationale for and explanation of app coordinators. This project\ncombines those ideas with a Redux-like architecture, which you can read about\non the [ReSwift](https://github.com/ReSwift/ReSwift) repository.\n\nCombining the two natively leads to a lot of advantages:\n\n* View controllers become even simpler\n* Action creator methods clearly live in app coordinators\n* Navigating via route becomes simpler\n  * Normal navigation and routing share code paths\n  * Deep linking becomes almost trivial\n\nIn this model, view controllers have exactly two responsibilities:\n\n1. Render latest state\n2. Convert UI interaction into user intents\n\nFor example...\n\n```swift\nstruct ProductViewModel {\n    let name: String\n    let sku: String\n    let price: Double\n}\n\nprotocol ProductViewControllerHandler: class {\n    func purchase(sku: String)\n}\n\nfinal class ProductViewController: UIViewController {\n    @IBOutlet var nameLabel: UILabel!\n\n    weak var handler: ProductViewControllerHandler!\n    var viewModel: ProductViewModel!\n\n    func inject(handler handler: ProductViewControllerHandler) {\n        self.handler = handler\n    }\n\n    func render(viewModel: ProductViewModel) {\n        self.viewModel = viewModel\n        nameLabel.text = viewModel.name\n    }\n\n    @IBAction func purchaseButtonTapped(sender: AnyObject) {\n        handler.purchase(viewModel.sku)\n    }\n}\n```\n\n## Usage\n\nTo use Cordux, you will need to create app coordinators for each main \"scene\" in\nyour app. For example coordinators, please see the included\n[sample app](https://github.com/willowtreeapps/cordux/tree/develop/Example).\n\n## Alternatives\n\nThe biggest win that Cordux provides is in routing. If your app does not need\nto manage route via state, or navigate via route, it may make more sense to\nimplement your own app coordinators and use ReSwift for your state management.\n\n## Goals \u0026 Non-Goals\n\n*Goals*\n\nThe primary goal is to simplify app level code with robust framework code. The\nfollowing are the main areas of interest:\n\n* Call point API\n* Navigation code\n* Routing code\n* Subscriptions to the store\n* View controller lifecycle needs\n\n*Non-Goals*\n\n* Time travel\n* State restoration\n* State and action serialization\n* Supporting additional strategies for asynchronous work or side effects\n\n## Roadmap\n\nProduction level apps at WillowTree are currently being developed with Cordux.\nBy the end of 2016 we hope to have the needs of this framework figured out.\n\nIf ReSwift adopts our routing needs, Cordux may become a ReSwift extension.\n\n## Code of Conduct\u003ca name=\"conduct\"\u003e\u003c/a\u003e\n\nPlease read our [code of conduct](https://github.com/willowtreeapps/cordux/blob/develop/CODE_OF_CONDUCT.md)\nbefore participating. Please report any violations to\n[open.source.conduct@willowtreeapps.com](mailto:open.source.conduct@willowtreeapps.com.).\n\n## Contributing\u003ca name=\"contributing\"\u003e\u003c/a\u003e\n\nPlease read our\n[contributing guidelines](https://github.com/willowtreeapps/cordux/blob/develop/CONTRIBUTING.md)\nbefore contributing. Included are directions for opening issues, coding\nstandards, and notes on development.\n\nBeyond contributing to the main code base, documentation and unit tests are\nalways welcome contributions.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwillowtreeapps%2Fcordux","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwillowtreeapps%2Fcordux","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwillowtreeapps%2Fcordux/lists"}