{"id":30697569,"url":"https://github.com/richardpiazza/coordinatorplus","last_synced_at":"2025-09-02T09:12:59.514Z","repository":{"id":43351961,"uuid":"272725972","full_name":"richardpiazza/CoordinatorPlus","owner":"richardpiazza","description":"A protocol-oriented approach to the Coordinator app architecture pattern.","archived":false,"fork":false,"pushed_at":"2022-03-06T16:08:07.000Z","size":29,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-08-17T08:25:04.833Z","etag":null,"topics":["coordinator-pattern","swift"],"latest_commit_sha":null,"homepage":"","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/richardpiazza.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}},"created_at":"2020-06-16T14:12:14.000Z","updated_at":"2022-10-27T22:31:45.000Z","dependencies_parsed_at":"2022-09-06T06:40:36.016Z","dependency_job_id":null,"html_url":"https://github.com/richardpiazza/CoordinatorPlus","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/richardpiazza/CoordinatorPlus","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/richardpiazza%2FCoordinatorPlus","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/richardpiazza%2FCoordinatorPlus/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/richardpiazza%2FCoordinatorPlus/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/richardpiazza%2FCoordinatorPlus/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/richardpiazza","download_url":"https://codeload.github.com/richardpiazza/CoordinatorPlus/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/richardpiazza%2FCoordinatorPlus/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273258933,"owners_count":25073821,"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","status":"online","status_checked_at":"2025-09-02T02:00:09.530Z","response_time":77,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["coordinator-pattern","swift"],"created_at":"2025-09-02T09:12:55.181Z","updated_at":"2025-09-02T09:12:59.504Z","avatar_url":"https://github.com/richardpiazza.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"# CoordinatorPlus\n\nA protocol-oriented approach to the Coordinator app architecture pattern.\n\n\u003cp\u003e\n    \u003cimg src=\"https://github.com/richardpiazza/CoordinatorPlus/workflows/Swift/badge.svg?branch=main\" /\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Swift-5.2-orange.svg\" /\u003e\n    \u003ca href=\"https://twitter.com/richardpiazza\"\u003e\n        \u003cimg src=\"https://img.shields.io/badge/twitter-@richardpiazza-blue.svg?style=flat\" alt=\"Twitter: @richardpiazza\" /\u003e\n    \u003c/a\u003e\n\u003c/p\u003e\n\n## Installation\n\n**CoordinatorPlus** is distributed using the [Swift Package Manager](https://swift.org/package-manager). To install it into a project, add it \nas a dependency within your `Package.swift` manifest:\n\n```swift\nlet package = Package(\n    ...\n    dependencies: [\n        .package(url: \"https://github.com/richardpiazza/CoordinatorPlus.git\", from: \"0.3.0\")\n    ],\n    ...\n)\n```\n\nThen import the **CoordinatorPlus** packages wherever you'd like to use it:\n\n```swift\nimport CoordinatorPlus\n```\n\n## Why the 'Protocol-Oriented' approach?\n\nMany projects use this architecture pattern, and each have a slightly different implementation.\n\nImplementing the architecture through protocols and protocol extensions allows for simple implementations with minimal need to customize \nthe handling and presentation of Coordinators \u0026 View Controllers.\n\nThis reduces the differences on a project-by-project basis and improves the comprehension and understanding of all those who interact with \nthe framework.\n\n## Features\n\nThe primary classes to note are:\n* `AppCoordinator`\n* `Flow`\n* `FlowCoordinator`\n* `FlowCoordinatorDelegate`\n\nAll of the other files fall outside of what someone could consider a _standard_ Coordinated MVC architectural pattern. The purpose of these \nfiles is to provide default/sample implementations for specific use cases when used on a `UIKit` platform. This implement is rather \n_opinionated_.\n\n## References\n\nHeavily influenced by [Josh Sullivan's](https://github.com/JoshuaSullivan) [article](http://www.chibicode.org/?p=121) and example project \n[BeyondViewControllers](https://github.com/JoshuaSullivan/CoordinatedMVC).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frichardpiazza%2Fcoordinatorplus","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frichardpiazza%2Fcoordinatorplus","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frichardpiazza%2Fcoordinatorplus/lists"}