uber/RIBs
68.9
Adequate · 25 September 2026
24.2k
lines of production code
Kotlin
with Java
4
measurements over time
What this system is
Features
Add Android activity lifecycle delegation and coroutine testing utilities
This change introduces new infrastructure for Android and Kotlin Coroutines testing. For Android, it adds \ActivityDelegate\ and \CoreAppCompatActivity\ to allow \RibActivity\ and other activities to share a common parent and lifecycle management. For testing, it adds \RibCoroutinesRule\, \TestRibDispatchers\, and scope override utilities in the \rib-coroutines-test\ module, enabling controlled coroutine execution and dispatcher injection in tests. Additionally, the \rib-compiler-app\ module receives new annotation processing classes (\AnnotatedClass\, \InteractorAnnotatedClass\, \RibProcessor\, etc.) to handle \@RibInteractor\ annotations, accompanied by corresponding unit tests.
(repo-wide) · high confidence
Add Android demo app for Flipper integration
The Flipper demo application for Android has been added, introducing a new Android application entry point. This includes the AndroidManifest configuration, the main Activity, and the Application class that initializes Flipper and the RibTree plugin. The demo implements a RIB-based navigation flow starting with a 'Logged Out' screen for user login, which transitions to a 'Logged In' state. The logged-in state features an 'Off Game' screen and a 'Tic Tac Toe' game, allowing users to play a simple game within the demo environment.
(repo-wide) · high confidence
Add Compose-based RIB demo application
The \demos/compose\ directory now contains a complete RIB (Router-Interactor-View) demo application built with Jetpack Compose. This includes the application entry point, root activity, and a navigation hierarchy featuring a main screen that switches between logged-in and logged-out states. The logged-in state includes an 'Off Game' screen and a fully functional Tic-Tac-Toe game, demonstrating how Compose UI integrates with the RIB architecture.
demos/compose, demos/rib-workers · high confidence
Add RIB code generation and Android device management to the IntelliJ plugin
The IntelliJ plugin now includes a complete code generation system for RIBs, featuring a dialog for user input and multiple generator classes for creating Interactors, Presenters, Views, and Routers in both Java and Kotlin. Additionally, the plugin introduces an Android device repository to track connected devices and a project activity to attach the RIB project service, enabling deeper integration with Android development workflows.
tooling/rib-intellij-plugin · high confidence
Added Android Compose and Screen Stack base libraries, plus a Flipper debug plugin
Introduced new RIBs support for Android development: a Compose-based router and presenter in the \rib-android-compose\ library, a \ScreenStackBase\ interface and \ViewProvider\ base class for managing view-based screen stacks in \rib-screen-stack-base\, and a \RibTreePlugin\ for debugging RIBs via Flipper. The plugin tracks router events and provides visual overlays for debugging.
libraries/rib-android-compose, libraries/rib-screen-stack-base, tooling/rib-flipper-plugin · high confidence
Added Android demo app for memory leak detection
The memory-leaks demo now includes a complete Android application structure, including the main activity, application class, and RIB components for root, logged-in, and logged-out states. The app integrates LeakCanary to monitor for memory leaks, specifically demonstrating a potential leak in the logged-out state where a long-running RxJava subscription is not properly disposed. This provides a working example of how to set up memory leak detection in an Android app using the RIB architecture.
demos/memory-leaks · high confidence
Added RIBs testing utilities and compiler test generation
Introduced a suite of testing helpers and utilities for the RIBs framework. This includes the \InteractorTestGenerator\ which automatically generates test helper classes for annotated interactors, along with corresponding processor and test files. Additionally, new test helper objects were added for \Interactor\, \Presenter\, \Router\, and \Worker\ to simplify unit testing, alongside a \FakeComponent\ and \FakeRouter\ for mocking. A \TreeChart\ component was also added to the Flipper plugin desktop application to visualize the RIB tree structure.
(repo-wide) · high confidence
Added the Stack Nav demo application
A new Android demo application named 'Stack Nav Demo' has been added to the demos/stack-nav directory. This feature provides a functional example of a navigation stack, allowing users to push and pop screens in a hierarchical manner. The demo includes the necessary Android manifest, activity, and a complete set of Kotlin classes (including RootActivity, RootInteractor, RootRouter, and Screen components) that implement the stack navigation logic and UI.
demos/stack-nav · high confidence
Added tutorial4 sample app with RIB architecture
Added the complete source code for tutorial4, a sample Android application demonstrating the RIB (Router-Interactor-Builder) architecture. This includes the root activity and application classes, the root RIB with logged-in/logged-out states, and child RIBs for game selection, an off-game lobby, and two playable games (Tic-Tac-Toe and Random Winner). The implementation uses Dagger for dependency injection and RxJava for reactive streams, providing a full working example of the framework's patterns.
tutorials/tutorial4 · high confidence
New Android core components and lifecycle events
The \libraries/rib-android\ module introduces a suite of new classes to support Android activity lifecycle management and view routing. This includes \RibActivity\ as the base activity implementation, along with \ActivityStarter\, \IntentCreator\, \IntentFactory\, and \ViewBuilder\ to facilitate cleaner dependency injection and testing. Additionally, \ActivityLifecycleEvent\ and \ActivityCallbackEvent\ are added to expose activity lifecycle and callback events (such as \onSaveInstanceState\, \onActivityResult\, and \onNewIntent\) for reactive streams, while \XRay\ provides a debug overlay for visualizing riblet names on views.
libraries/rib-android · high confidence
New coroutine scope management with configurable lifecycle behavior
The \rib-coroutines\ library introduces new APIs for managing coroutine scopes tied to \ScopeProvider\ and \Application\ lifecycles. By default, accessing the \coroutineScope\ property after the provider has completed will throw a \LifecycleEndedException\. A new configuration option, \RibCoroutinesConfig.shouldCoroutineScopeFailSilentlyOnLifecycleEnded\, allows developers to suppress this exception and receive an immediately cancelled scope instead. The \RibDispatchers\ object provides a centralized way to configure default \CoroutineDispatcher\s for Rib scopes, and tests have been added to verify the new throwing and silent-fail behaviors.
libraries/rib-coroutines · high confidence
Repository governance and build infrastructure overhaul
The repository has been restructured with new governance files (CODE\_OF\_CONDUCT.md, CONTRIBUTING.md, and a detailed CHANGELOG.md) and updated documentation (README.md, including a notice about iOS moving to a separate repo). The project's licensing has changed from MIT to Apache 2.0, and the build system now includes a Gradle wrapper and a dedicated release script to automate versioning and publishing.
(repo-wide) · high confidence
Behavioural changes
Interactor lifecycle events now use StateFlow by default, improving ANR stacktraces
The \Interactor\ class now uses \MutableStateFlow\ for lifecycle events by default, replacing the previous \SharedFlow\ implementation. This change improves ANR stacktraces and reduces ANRs. Additionally, \RibEvents.setExtraBufferCapacity\ is now available to configure the buffer capacity for router and action events, and a new \FlowAsScope\ utility converts \SharedFlow\ of lifecycle events into a \CompletableSource\.
libraries/rib-base · high confidence
Standardized build conventions and code quality tooling for Android and Kotlin modules
The project introduces new Gradle build conventions that standardize the compilation environment and code quality checks. All Android and Kotlin modules now compile against Java 1.8 source and target compatibility while using a JDK 17 toolchain. The Android application and library conventions enforce explicit API modes, configure Spotless for consistent code formatting, and integrate Error Prone with NullAway to enforce non-nullability and other checks. Additionally, the Android application convention disables release variants in the build, and the library conventions adjust test variant configurations.
conventions · high confidence
Upgrade Gradle build system and dependencies
The project has upgraded its Gradle build infrastructure to use Gradle 8.14.3 and Android Gradle Plugin 8.13.0. This change introduces centralized version catalogs for both production and test dependencies, including updates to Kotlin, Compose, Coroutines, and other libraries, while also removing iOS-specific configurations to prepare for a separate repository.
gradle · medium confidence
Dependencies
Upgrade Android Gradle Plugin to 8.13.0 and Kotlin to 2.1.10
The project's build system has been updated to use Android Gradle Plugin 8.13.0 and Kotlin 2.1.10. This upgrade brings modern Gradle features and improved Kotlin support to the build configuration, affecting how the project is compiled and packaged. Additionally, the Gradle version catalog has been updated to reflect these new dependency versions, ensuring consistent dependency management across all modules.
(dependencies) · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.
Score
- CAI 49 → 69 (+20.0)
- Rubric changed (rubric-2026.08.15 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 100 → 97 (-3.1)
- Architecture 96 → 100 (+4.4)
- Maturity 51 → 63 (+11.6)
- Readiness 27 → 58 (+31.0)
- Security 76 → 91 (+15.0)
Resolved (23)
- Coverage not measured — test suite did not build
- Dimension evaluation failed
- Duplicated block (6 lines × 2) (tooling/rib-flipper-plugin/src/main/kotlin/com/uber/rib/flipper/RibTreePlugin.kt)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- LLM evaluation failed
- Medium: security finding (details withheld)
- Medium: security finding (details withheld)
- Medium: security finding (details withheld)
- Medium: security finding (details withheld)
- Medium: security finding (details withheld)
- Medium: security finding (details withheld)
- Medium: security finding (details withheld)
- Medium: security finding (details withheld)
- Medium: security finding (details withheld)
- Medium: security finding (details withheld)
- Medium: security finding (details withheld)
- No exposed public API
- …and 3 more
New (41)
- Concentrated knowledge decay
- Dependency hygiene PARTLY measured — Maven/Gradle declarations read, no dependency graph resolved
- Duplicated block (17 lines × 2) (demos/compose/src/main/kotlin/com/uber/rib/compose/root/RootRouter.kt)
- Duplicated block (9 lines × 2) (demos/compose/src/main/kotlin/com/uber/rib/compose/ComposeApplication.kt)
- Duplicated block (9 lines × 2) (demos/compose/src/main/kotlin/com/uber/rib/compose/root/main/MainScope.kt)
- Further sole-owners (lower concentration)
- HackComment (tooling/rib-intellij-plugin/src/main/kotlin/com/uber/intellij/plugin/android/rib/ui/HierarchyBrowserBase.kt)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- Medium: security finding (details withheld)
- Medium: security finding (details withheld)
- No ADRs found
- No dependency advisory monitoring
- Off-boarding risk: anonymized user #1
- Release publish has no approval gate
- RibTree.persistedStateReducer (cognitive 37) (tooling/rib-flipper-plugin/desktop/src/index.js)
- RibTree.persistedStateReducer (cyclomatic 17) (tooling/rib-flipper-plugin/desktop/src/index.js)
- …and 21 more
Architecture
- Containers 0 added · 0 removed · contexts 12 added · 0 removed · edges 9 added · 0 removed
Added bounded contexts (12)
- compose
- intellij-broadcast-rib
- rib-base
- rib-coroutines
- rib-coroutines-test
- rib-flipper-plugin
- rib-intellij-plugin
- rib-router-navigator
- rib-workers
- stack-nav
- tutorial3-completed
- tutorial4
Added dependency edges (9)
- compose → rib-base
- rib-coroutines-test → rib-coroutines
- rib-flipper-plugin → rib-base
- rib-router-navigator → rib-base
- rib-workers → rib-base
- stack-nav → rib-base
- stack-nav → rib-router-navigator
- tutorial3-completed → tutorial4
- tutorial4 → tutorial3-completed
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
uber/RIBs was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 25 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit e3aff84f660ac1232ffe7868fcbd51621eda277d — the exact code this score is about.
- Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-dd72cc24c749.