{"id":19882804,"url":"https://github.com/reactivecircus/blueprint","last_synced_at":"2025-08-09T08:35:32.279Z","repository":{"id":37396968,"uuid":"196925833","full_name":"ReactiveCircus/blueprint","owner":"ReactiveCircus","description":"Architectural frameworks and toolkits for bootstrapping modern Android codebases.","archived":false,"fork":false,"pushed_at":"2023-03-09T04:02:05.000Z","size":12179,"stargazers_count":57,"open_issues_count":1,"forks_count":6,"subscribers_count":6,"default_branch":"main","last_synced_at":"2024-05-21T11:57:11.498Z","etag":null,"topics":["android","architecture","kotlin","kotlin-coroutines","kotlin-flow","rxjava2","rxjava3","testing"],"latest_commit_sha":null,"homepage":"https://reactivecircus.github.io/blueprint/","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/ReactiveCircus.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":"2019-07-15T04:49:28.000Z","updated_at":"2024-03-19T12:04:01.000Z","dependencies_parsed_at":"2023-02-17T21:30:38.306Z","dependency_job_id":null,"html_url":"https://github.com/ReactiveCircus/blueprint","commit_stats":null,"previous_names":[],"tags_count":23,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ReactiveCircus%2Fblueprint","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ReactiveCircus%2Fblueprint/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ReactiveCircus%2Fblueprint/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ReactiveCircus%2Fblueprint/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ReactiveCircus","download_url":"https://codeload.github.com/ReactiveCircus/blueprint/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224315447,"owners_count":17291048,"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","kotlin","kotlin-coroutines","kotlin-flow","rxjava2","rxjava3","testing"],"created_at":"2024-11-12T17:18:33.747Z","updated_at":"2024-11-12T17:18:34.478Z","avatar_url":"https://github.com/ReactiveCircus.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Blueprint\n\n![CI](https://github.com/ReactiveCircus/blueprint/workflows/Build/badge.svg)\n[![Maven Central](https://maven-badges.herokuapp.com/maven-central/io.github.reactivecircus.blueprint/blueprint-ui/badge.svg)](https://search.maven.org/search?q=g:io.github.reactivecircus.blueprint)\n[![Android API](https://img.shields.io/badge/API-21%2B-blue.svg?label=API\u0026maxAge=300)](https://www.android.com/history/)\n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\n\nArchitectural frameworks and toolkits for bootstrapping modern Android codebases, written in **Kotlin**.\n\n## Motivation\n\nThese days whenever I kickoff a new Android project I always start by adding a bunch of infrastructure code (frameworks and toolkits) I developed over the years as they work really well in modern Android codebases which follow **Clean Architecture** and **reactive paradigm**, with strong emphasis on **automated UI testing**.\n\nThese frameworks and toolkits have now become a library.\n\n## Dependencies\n\n**Blueprint** offers multiple independent artifacts covering different use cases. But they are all \"optional\" which means you can choose to only use the ones that make sense for your codebase.\n\nDependencies are hosted on [Maven Central][maven-central].\n\nLatest stable version:\n\n```groovy\ndef blueprint_version = \"1.18.0\"\n```\n\nIf you use **Kotlin Coroutines and Flow**:\n\n```groovy\n// Building Interactors based on Kotlin Coroutines and Flow\nimplementation \"io.github.reactivecircus.blueprint:blueprint-interactor-coroutines:${blueprint_version}\"\n\n// Wrapper API for doing async work with Kotlin CoroutineDispatcher\nimplementation \"io.github.reactivecircus.blueprint:blueprint-async-coroutines:${blueprint_version}\"\n\n// Android UI extensions, utilities and widgets\nimplementation \"io.github.reactivecircus.blueprint:blueprint-ui:${blueprint_version}\"\n\n// Android UI testing framework with Testing Robot DSL\nimplementation \"io.github.reactivecircus.blueprint:blueprint-testing-robot:${blueprint_version}\"\n```\n\nIf you use **RxJava 2**:\n\n```groovy\n// Building Interactors based on RxJava 2\nimplementation \"io.github.reactivecircus.blueprint:blueprint-interactor-rx2:${blueprint_version}\"\n\n// Wrapper API for doing async work with RxJava 2 Schedulers\nimplementation \"io.github.reactivecircus.blueprint:blueprint-async-rx2:${blueprint_version}\"\n\n// Android UI extensions, utilities and widgets\nimplementation \"io.github.reactivecircus.blueprint:blueprint-ui:${blueprint_version}\"\n\n// Android UI testing framework with Testing Robot DSL\nimplementation \"io.github.reactivecircus.blueprint:blueprint-testing-robot:${blueprint_version}\"\n```\n\nIf you use **RxJava 3**:\n\n```groovy\n// Building Interactors based on RxJava 3\nimplementation \"io.github.reactivecircus.blueprint:blueprint-interactor-rx3:${blueprint_version}\"\n\n// Wrapper API for doing async work with RxJava 3 Schedulers\nimplementation \"io.github.reactivecircus.blueprint:blueprint-async-rx3:${blueprint_version}\"\n\n// Android UI extensions, utilities and widgets\nimplementation \"io.github.reactivecircus.blueprint:blueprint-ui:${blueprint_version}\"\n\n// Android UI testing framework with Testing Robot DSL\nimplementation \"io.github.reactivecircus.blueprint:blueprint-testing-robot:${blueprint_version}\"\n```\n\nSnapshots of the development version are available in [Sonatype's `snapshots` repository][snap].\n\n## Samples\n\nThere are a couple of [sample apps][samples] demonstrating how you may use **Blueprint**, one based on **Kotlin Coroutines** and the other one based on **RxJava 2**.\n\n## Overview\n\nThe following is a high-level overview of what each **Blueprint** artifact does. For details and sample usage please check the [samples][samples] and the documentation (**README.md**) in each of the sub-projects.\n\n### Blueprint Interactor Coroutines\n\nThis artifact provides 2 base classes for building Interactors (use case in Clean Architecture):\n\n* `SuspendingInteractor` for single-shot tasks\n* `FlowInteractor` for cold streams \n\nPlease check [blueprint-interactor-coroutines][interactor-coroutines] for details.\n\n### Blueprint Async Coroutines\n\nThis artifact provides a `CoroutineDispatcherProvider` API for encapsulating the threading behavior with Kotlin CoroutineDispatcher.\n\nPlease check [blueprint-async-coroutines][async-coroutines] for details.\n\n### Blueprint Interactor RxJava 2\n\nThis artifact provides 3 base classes for building Interactors (use case in Clean Architecture):\n\n* `SingleInteractor` for single-shot (with result) tasks\n* `CompletableInteractor` for single-shot (no result) tasks\n* `ObservableInteractor` for cold streams\n\nPlease check [blueprint-interactor-rx2][interactor-rx2] for details.\n\n### Blueprint Async RxJava 2\n\nThis artifact provides a `SchedulerProvider` API for encapsulating the threading behavior with RxJava 2 Schedulers.\n\nPlease check [blueprint-async-rx2][async-rx2] for details.\n\n### Blueprint Interactor RxJava 3\n\nThis artifact provides 3 base classes for building Interactors (use case in Clean Architecture):\n\n* `SingleInteractor` for single-shot (with result) tasks\n* `CompletableInteractor` for single-shot (no result) tasks\n* `ObservableInteractor` for cold streams\n\nPlease check [blueprint-interactor-rx3][interactor-rx3] for details.\n\n### Blueprint Async RxJava 3\n\nThis artifact provides a `SchedulerProvider` API for encapsulating the threading behavior with RxJava 3 Schedulers.\n\nPlease check [blueprint-async-rx3][async-rx3] for details.\n\n### Blueprint UI\n\nThis artifact provides convenient Kotlin extensions and widgets for working with the Android UI toolkit.\n\nPlease check [blueprint-ui][ui] for details.\n\n### Blueprint Testing Robot\n\nThis artifact provides a UI testing framework and [Testing Robot][testing-robot-article] DSL for authoring structured, readable, and framework-agnostic UI tests.\n\nPlease check [blueprint-testing-robot][testing-robot] for details.\n\n## License\n\n```\nCopyright 2019 Yang Chen\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n   http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n```\n\n[maven-central]: https://search.maven.org/search?q=g:io.github.reactivecircus.blueprint\n[snap]: https://s01.oss.sonatype.org/content/repositories/snapshots/\n[samples]: samples/\n[interactor-coroutines]: blueprint-interactor-coroutines/\n[async-coroutines]: blueprint-async-coroutines/\n[interactor-rx2]: blueprint-interactor-rx2/\n[async-rx2]: blueprint-async-rx2/\n[interactor-rx3]: blueprint-interactor-rx3/\n[async-rx3]: blueprint-async-rx3/\n[ui]: blueprint-ui/\n[testing-robot]: blueprint-testing-robot/\n[testing-robot-article]: https://academy.realm.io/posts/kau-jake-wharton-testing-robots/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Freactivecircus%2Fblueprint","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Freactivecircus%2Fblueprint","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Freactivecircus%2Fblueprint/lists"}