Skip to content
CAI
Software that uses CAICheck a score

pablichjenkov/macao-sdk

48.0

Weak · 22 September 2026

8k

lines of production code

Kotlin

primary language

7

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is a cross-platform UI component toolkit that provides a structured, ViewModel-driven architecture for building user interfaces across Android, iOS, Desktop, and Web environments. It offers a comprehensive set of reusable components—including navigation drawers, pagers, and adaptive layouts—each with dedicated state presenters and lifecycle management. The framework standardizes platform-specific rendering and lifecycle events while enabling deep linking, multi-window support, and seamless integration with modern build systems.

How it got here

2018–2023 — Cross-platform component architecture

27 changes.

The project was refactored from a legacy Android-centric structure to a modern Compose Multiplatform architecture, enabling code sharing across Android, iOS, JS, and JVM platforms. This period focused on building a comprehensive, lifecycle-aware UI component toolkit that standardizes navigation, state management, and rendering across all target environments.

2024 — Cross-platform demo and toolkit expansion

13 changes.

This period focused on expanding the component toolkit with new abstractions like MacaoResult and platform-specific renderers, while simultaneously building out a comprehensive demo application. The work established a unified architecture for JS, Wasm, iOS, and Android platforms, enabling multi-window navigation and deep linking across all supported environments.

Features

Add Android preview renderers for the Drawer component

New classes have been added to the component toolkit to support Android-specific preview rendering for the Drawer component. This includes a new \DrawerComponentViewModelPreviewAndroidRender\ class that implements lifecycle callbacks (onAttach, onStart, onStop, onDetach) and a corresponding factory \DrawerComponentViewModelPreviewAndroidRenderFactory\ to instantiate it, enabling the Drawer component to be rendered in Android preview environments.

component-toolkit/src/androidMain/kotlin/com/macaosoftware/component/preview · high confidence

Add Compose-based lifecycle event observer

A new composable function, LifecycleEventObserver, is introduced to manage lifecycle events (ON\_START, ON\_STOP) within a Compose environment. This component registers a LifecycleEventObserver with the provided LifecycleOwner, allowing the UI layer to react to lifecycle state changes in a way that is compatible with Compose's memory and disposal model.

component-toolkit/src/commonMain/kotlin/com/macaosoftware/plugin/lifecycle · high confidence

Add HTML entry points for JS and Wasm targets

New index.html files have been added for the JS and Wasm targets, each providing the necessary script tags for Skiko and the application bundle, along with a canvas element for rendering. This establishes the web entry points for these platforms.

composeApp/src/jsMain/resources, composeApp/src/wasmJsMain/resources · high confidence

Add PagerComponent for horizontal/vertical swiping with indicator support

A new PagerComponent has been introduced to the component toolkit, enabling horizontal or vertical swiping between child components while keeping up to three children active simultaneously for warmup. The change includes the core PagerComponent, its ViewModel, a ViewModelFactory interface, and a default rendering implementation (PagerComponentDefaults) that uses a Compose HorizontalPager. It also adds a DefaultPagerIndicator composable that supports horizontal or vertical orientation, configurable colors, shapes, and click handling, along with PagerStyle and IndicatorType enums to control the indicator's appearance.

component-toolkit/src/commonMain/kotlin/com/macaosoftware/component/pager · high confidence

Add WasmJS target for browser component rendering

The component-toolkit now supports the WasmJS platform, enabling browser-based rendering for components. This change introduces platform-specific implementations for rendering components in a browser environment, including lifecycle event handling for active/inactive states and root component provision.

component-toolkit/src/wasmJsMain · high confidence

Add WindowWithCustomTopDecoration composable for custom window title bar

Users can now use the new WindowWithCustomTopDecoration composable to render a custom top decoration area for JVM-based windows. This component provides a header bar with clickable controls for closing, minimizing, and maximizing the window, along with refresh and back actions, allowing for a fully customized window title bar experience.

component-toolkit/src/jvmMain/kotlin/com/macaosoftware/app · high confidence

Add bottom navigation component and view

Introduces a new bottom navigation component for the UI toolkit, including the main \BottomNavigationComponent\ for managing navigation state and backstack, a \BottomNavigationComponentViewModel\ for state presentation, a factory interface for dependency injection, and a \BottomNavigationView\ composable that renders the bottom bar with selectable items.

component-toolkit/src/commonMain/kotlin/com/macaosoftware/component/bottomnavigation · high confidence

Add demo components for navigation and state management

The demo application now includes new UI components to showcase core framework capabilities. A splash screen is displayed initially, followed by a root view that allows users to select between different demo types (drawer, pager, panel, bottom navigation, and adaptive navigation). The update also introduces SimpleRequestComponent and SimpleResponseComponent to demonstrate deep linking, lifecycle-aware state collection, and coroutine-based result handling within the Compose environment.

composeApp/src/commonMain/kotlin/com/macaosoftware/component/demo, composeApp/src/commonMain/kotlin/com/macaosoftware/component/demo/view · high confidence

Introduced a new desktop demo application that supports multiple concurrent windows. The main window features a menu bar with options to open a secondary 'Deep Link' window, which lists various navigation destinations. Clicking a destination in the secondary window triggers deep link navigation within the main window, demonstrating multi-window state management and inter-window communication in the demo.

composeApp/src/jvmMain · high confidence

Add new Drawer component and supporting classes

The component toolkit introduces a new \DrawerComponent\ and its associated view models, factories, and UI renderers. This includes the \DrawerComponent\ class that implements navigation and lifecycle management, the \DrawerComponentViewModel\ abstract class, and a \DrawerComponentViewModelFactory\ interface for dependency injection. The UI layer is represented by \DrawerView\, which renders the navigation drawer using Compose, and \DrawerHeaderView\ for displaying header states. Supporting types include \DrawerHeaderState\ for header configuration, \DrawerNavigationProvider\ for controlling drawer state, and \DrawerNavItem\ for navigation items. This adds a new drawer-based navigation pattern to the toolkit.

component-toolkit/src/commonMain/kotlin/com/macaosoftware/component/drawer · high confidence

Added Android back press and navigation utilities

Added new Android-specific implementations for handling back press events and detecting system navigation bar interaction modes. The \AndroidBackPressDispatcherPlugin\ provides a concrete implementation for managing back press callbacks on Android, while \SystemNavigationUtil\ exposes constants and logic to detect whether the device is using three-button, two-button, or full-screen gesture navigation. These additions support the broader back-press handling infrastructure by providing the Android platform-specific logic required to intercept and manage system navigation events.

component-toolkit/src/androidMain/kotlin/com/macaosoftware/plugin · high confidence

Added empty account plugin implementation for platforms without Firebase

A new empty implementation of the account plugin has been added to the common main source set. This stub class provides default, non-functional implementations for account-related operations, allowing the application to compile and run on platforms that do not support Firebase authentication. Most methods return success with dummy data or unit values, while several profile and security-related methods are marked as not yet implemented.

component-toolkit/src/commonMain/kotlin/com/macaosoftware/plugin/account · high confidence

Added utility components for back navigation and empty states

The component toolkit now includes three new composables to assist with navigation and UI states. BackPressHandler allows components to intercept and handle back press events based on their lifecycle state. FloatingBackButton provides a standard UI element for navigating back. EmptyNavigationComponentView displays a message when a navigation stack is empty, showing the component's instance ID and a default empty state message after a short delay.

component-toolkit/src/commonMain/kotlin/com/macaosoftware/component/util · high confidence

Introduce MacaoResult and Usecase interfaces

Added MacaoResult, a sealed class representing a success or error state, and four new interfaces (SingleNoInputUseCase, SingleInputUseCase, FlowNoInputUseCase, FlowInputUseCase) that define standard patterns for executing work, including support for Kotlin Coroutines Flow.

component-toolkit/src/commonMain/kotlin/com/macaosoftware/util · high confidence

Introduce PanelComponent with header and navigation list UI

Added new files for the panel component, including PanelComponent, PanelComponentViewModel, and associated UI components (PanelView, PanelHeaderView, PanelHeaderState). This introduces a panel-based navigation interface that displays a header and a scrollable list of navigation items, allowing users to select different components via a side panel layout.

component-toolkit/src/commonMain/kotlin/com/macaosoftware/component/panel · high confidence

Introduce PlatformComponentRenderer for platform-specific rendering

A new \PlatformComponentRenderer\ composable function is added to the common component toolkit, serving as the entry point for rendering components on each platform.

component-toolkit/src/commonMain/kotlin/com/macaosoftware/component · high confidence

Introduce TopBarComponent with configurable back-arrow visibility

The topbar component now includes a new TopBarComponent class that manages the top bar's state and navigation logic. A key addition is the ShowBackArrowStrategy enum, which allows developers to control when the back arrow is displayed: Always, WhenParentCanHandleBack, or WhenStackCountGreaterThanOne. This provides explicit control over the back navigation UI behavior in the top bar.

component-toolkit/src/commonMain/kotlin/com/macaosoftware/component/topbar · high confidence

Introduce adaptive size component with window size classes

The adaptive component toolkit now includes an \AdaptiveSizeComponent\ that dynamically selects UI layouts based on the device's window size. This is achieved through a new \WindowSizeInfo\ sealed interface that defines six distinct size classes (Compact, Medium, and Expanded, each with Portrait and Landscape variants). The component uses a \ViewModelFactory\ to instantiate the associated \AdaptiveSizeComponentViewModel\, and manages child navigation components for each size state, allowing the UI to adapt its structure as the window dimensions change.

component-toolkit/src/commonMain/kotlin/com/macaosoftware/component/adaptive · high confidence

Introduce browser-specific component rendering for the JS platform

A new BrowserComponentRender composable is introduced for the JS platform, managing the lifecycle of the root component by dispatching attach, active, and inactive states in response to browser lifecycle events. This is exposed via a new PlatformComponentRenderer that delegates to this browser-specific implementation.

component-toolkit/src/jsMain · medium confidence

Introduce core Component lifecycle and navigation abstractions

The component toolkit now provides a foundational \Component\ class that manages a full lifecycle (Attached, Active, Inactive, Detached) and handles back press delegation up the parent hierarchy. This change introduces extension functions for handling back presses and collecting state flows in sync with the component's lifecycle. Additionally, new interfaces (\ComponentWithBackStack\, \ComponentWithChildrenOneActive\) and their extensions are added to support navigation stacks, child component management, and deep link routing, enabling developers to build complex navigation and state-driven UIs with built-in lifecycle awareness.

component-toolkit/src/commonMain/kotlin/com/macaosoftware/component/core · high confidence

Introduce demo startup tasks and root component initializer

Added new startup tasks for database migration, LaunchDarkly, and SDK XYZ, each implementing the StartupTask interface to perform initialization logic during application startup. Additionally, a new DemoRootComponentInitializer was introduced to configure the root component using a StackComponent with a StartupCoordinatorViewModel, enabling a structured navigation stack for the demo application.

composeApp/src/commonMain/kotlin/com/macaosoftware/component/demo/startup · high confidence

Introduces a new stack-based navigation component with configurable transition animations

The component toolkit now provides a \StackComponent\ that manages a back stack of components and renders them using a \StackView\. This view supports three animation styles—\NoAnimation\, \Default\ (horizontal slide), and \CustomPredictiveBack\ (swipe-to-dismiss). The specific animation for each navigation event (push, pop, etc.) is determined by a new \AnimationType\ enum, allowing developers to control how stack transitions appear to the user.

component-toolkit/src/commonMain/kotlin/com/macaosoftware/component/stack · high confidence

Introduces core plugin interfaces and dispatcher infrastructure

The component toolkit now provides a set of new plugin interfaces and supporting classes to manage application lifecycle, data persistence, and background operations. Specifically, the diff introduces the base MacaoPlugin interface, along with specialized interfaces for application callbacks (MacaoApplicationCallback), data persistence (DataPersistencePlugin, KeyValuePersistencePlugin), image loading (ImageLoaderPlugin), and back press handling (BackPressDispatcherPlugin). Additionally, a new CoroutineDispatchers class is added to standardize coroutine execution across main, default, and IO threads.

component-toolkit/src/commonMain/kotlin/com/macaosoftware/plugin · high confidence

Introduces new component-based UI architecture with dedicated ViewModels and StatePresenters

The component toolkit now provides a structured, ViewModel-driven approach for building UI components. Each major UI element—such as the Bottom Navigation, Drawer, Panel, and Top Bar—now has a corresponding StatePresenter interface and default implementation to manage state and user interactions. This is supported by a new Navigator class that manages the component back-stack, allowing for push, pop, and replace operations. Additionally, a base ComponentViewModel class has been introduced to manage lifecycle states (Attached, Active, Inactive, Detached) and expose them via StateFlow. The demo application has been refactored to use these new components, demonstrating how to wire up navigation and state management through the ViewModel pattern.

macao-sdk-app · high confidence

Project initialization with public domain license and documentation

The repository was initialized with a public domain license (UNLICENSE) and a comprehensive README.md that outlines the Macao SDK's architecture, modules (component-toolkit, macao-sdk-app, macao-sdk-koin, macao-sdk-jetpack-navigation), and demo applications. The project also includes updated Gradle wrapper scripts (.gradlew, .gradlew.bat) and a .gitignore file to manage build artifacts and IDE files.

(repo-wide) · high confidence

iOS demo app bootstraps Macao SDK startup and plugin initialization

The iOS demo application now includes the necessary bridge and initializer classes to configure the Macao SDK. A new \IosBridge\ class exposes plugin interfaces to the native layer, while \IosPluginManagerInitializer\ configures the plugin manager with application lifecycle callbacks. The \MacaoSdkDemo\ entry point wires these components together, registering startup tasks such as database migration, LaunchDarkly integration, and SDK initialization, ensuring the application starts up correctly on iOS.

composeApp/src/iosMain · high confidence

Removals

Removal of the legacy workflow architecture

The \workflow\ module's core implementation has been removed, including the \Flow\ and \FlowManager\ classes, the \WorkFlowActivity\ base class, and associated interfaces like \BindableView\ and \ViewBox\. This change eliminates the custom flow management system and its Android lifecycle integration, along with the related unit and instrumented tests.

workflow · high confidence

Behavioural changes

Add JS and Wasm platform-specific plugin initializers

The JS and Wasm demo applications now each have a dedicated plugin manager initializer (JsPluginManagerInitializer and WasmPluginManagerInitializer) that registers the MacaoApplicationCallback plugin. The main entry points for both platforms have been updated to use these initializers, ensuring that the application state is correctly configured with the appropriate platform-specific plugin management for browser-based environments.

composeApp/src/jsMain/kotlin, composeApp/src/wasmJsMain/kotlin · medium confidence

Android plugin manager initialization logic added

A new Android-specific implementation of the plugin manager initializer has been added. This class sets up the Macao application callback plugin, which allows the Android activity to be finished when the application exits, ensuring proper lifecycle management on the Android platform.

composeApp/src/androidMain/kotlin · high confidence

Introduce Android-specific component rendering

Added Android-specific rendering logic via new \AndroidComponentRender\ and \PlatformComponentRenderer\ files. The \AndroidComponentRender\ composable now manages the lifecycle of the root component by observing \onStart\, \onStop\, and \onAttach\ events, and provides the back-press dispatcher. This change shifts Android lifecycle handling from the platform bridge to the component toolkit.

component-toolkit/src/androidMain/kotlin/com/macaosoftware/component · high confidence

Introduce desktop-specific component rendering and lifecycle integration

The desktop implementation of the component rendering system has been refactored to explicitly manage lifecycle events. A new \DesktopComponentRender\ composable now wraps the root component's content and integrates with the \LifecycleEventObserver\ to dispatch \onStart\, \onStop\, and \onAttach\ events to the component. This replaces previous ad-hoc or temporary lifecycle handling, ensuring that the desktop platform properly reflects the component's active and inactive states.

component-toolkit/src/jvmMain/kotlin/com/macaosoftware/component · medium confidence

Migrate demo app to new Compose project structure

The demo application's viewmodels have been reorganized into a new Compose project structure. This change introduces new ViewModel classes and their corresponding factories for various UI components, including adaptive size, bottom navigation, drawer, home, pager, panel, and settings screens. Each component now has its own dedicated ViewModel and Factory, facilitating better separation of concerns and easier maintenance within the demo app.

composeApp/src/commonMain/kotlin/com/macaosoftware/component/demo/viewmodel · high confidence

Migrate iOS demo app to SwiftUI

The iOS demo application has been migrated from UIKit to SwiftUI. The app entry point and main view are now implemented in Swift using the SwiftUI framework, integrating with the shared Macao SDK via a platform bridge.

iosApp/iosApp · high confidence

New StateComponent and factory abstraction for viewmodels

The component toolkit introduces a new StateComponent class that automatically manages the lifecycle of a ComponentViewModel, dispatching attach, start, stop, and detach events. A corresponding ComponentViewModelFactory interface is added to support the creation of these viewmodels. This change provides a streamlined, boilerplate-free way to integrate viewmodels with the component lifecycle, replacing the previous manual or delegate-based setup.

component-toolkit/src/commonMain/kotlin/com/macaosoftware/component/viewmodel · high confidence

Removal of legacy workflow and UI components

The app's main activity, login flow implementation, and associated test files have been removed. This eliminates the previous single-activity structure and its associated resources, including the main layout, styles, and drawable assets, effectively stripping out the legacy workflow module.

app/src · high confidence

Unify iOS component rendering with lifecycle event handling

The iOS implementation of the component rendering layer has been refactored to unify lifecycle event handling. The new IosComponentRender composable now explicitly manages lifecycle states by dispatching attach, active, and inactive events to the root component, ensuring consistent lifecycle behavior across platforms.

component-toolkit/src/iosMain · medium confidence

Updated Gradle wrapper to version 8.10.2

The Gradle wrapper has been upgraded from version 4.1 to 8.10.2. This update ensures the project uses a modern, supported version of the Gradle build tool, which may bring performance improvements, new features, and compatibility with newer Java and Android SDK versions.

gradle · high confidence

iOS app configuration for UI state demo

The iOS application now includes a dedicated configuration file (TeamId.xcconfig) that defines the team identifier, bundle identifier, and app name for the component demo, replacing previous build-time or manual configuration methods.

iosApp/Configuration · high confidence

iOS build configuration updated to use Gradle for framework embedding

The Xcode project configuration has been updated to automate the build process for the iOS app. Specifically, the project now includes a build phase that executes a Gradle task (\composeApp:embedAndSignAppleFrameworkForXcode\) to embed and sign the Apple framework. This change ensures that the iOS application is correctly linked with the shared Kotlin/Compose code, streamlining the build process for developers working on the iOS side of the application.

iosApp/ComponentDemo.xcodeproj · high confidence

Dependencies

Migrate to Compose Multiplatform and modernize build configuration

The project has been migrated from an older Android/Kotlin setup to a Compose Multiplatform (CMP) architecture. This includes replacing the legacy \build.gradle\ and \settings.gradle\ files with modern Kotlin DSL (\build.gradle.kts\) and a \libs.versions.toml\ version catalog. The configuration now targets Android, iOS, JS, Wasm, and JVM platforms, integrating libraries such as Kotlin 2.0.21, Compose 1.7.0, and Android Gradle Plugin 8.5.2, while removing older dependencies like RxJava and Android Support libraries.

(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

Score

  • CAI 47 → 48 (+1.2)
  • Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 95 → 96 (+1.4)
  • Architecture 96 → 96 (+0.4)
  • Maturity 54 → 54 (+0.4)
  • Readiness 15 → 17 (+1.9)
  • Security 100 → 100 (+0.0)

Resolved (22)

  • Change coupling: BottomNavigationComponent.kt ↔ ComponentWithBackStackExt.kt (component-toolkit/src/commonMain/kotlin/com/macaosoftware/component/bottomnavigation/BottomNavigationComponent.kt)
  • Change coupling: BottomNavigationComponent.kt ↔ NavigationComponentExt.kt (component-toolkit/src/commonMain/kotlin/com/macaosoftware/component/bottomnavigation/BottomNavigationComponent.kt)
  • Change coupling: ComponentWithBackStackExt.kt ↔ DrawerComponent.kt (component-toolkit/src/commonMain/kotlin/com/macaosoftware/component/core/ComponentWithBackStackExt.kt)
  • Change coupling: ComponentWithBackStackExt.kt ↔ PagerComponent.kt (component-toolkit/src/commonMain/kotlin/com/macaosoftware/component/core/ComponentWithBackStackExt.kt)
  • Change coupling: ComponentWithBackStackExt.kt ↔ PanelComponent.kt (component-toolkit/src/commonMain/kotlin/com/macaosoftware/component/core/ComponentWithBackStackExt.kt)
  • Change coupling: ComponentWithBackStackExt.kt ↔ StackComponent.kt (component-toolkit/src/commonMain/kotlin/com/macaosoftware/component/core/ComponentWithBackStackExt.kt)
  • Change coupling: NavigationComponentExt.kt ↔ DrawerComponent.kt (component-toolkit/src/commonMain/kotlin/com/macaosoftware/component/core/NavigationComponentExt.kt)
  • Change coupling: NavigationComponentExt.kt ↔ PanelComponent.kt (component-toolkit/src/commonMain/kotlin/com/macaosoftware/component/core/NavigationComponentExt.kt)
  • Change coupling: StackView.kt ↔ StackViewWithDefaultAnimations.kt (component-toolkit/src/commonMain/kotlin/com/macaosoftware/component/stack/StackView.kt)
  • Change coupling: StackViewWithCustomPredictiveBack.kt ↔ StackViewWithDefaultAnimations.kt (component-toolkit/src/commonMain/kotlin/com/macaosoftware/component/stack/StackViewWithCustomPredictiveBack.kt)
  • Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
  • Duplicated block (16 lines × 2) (component-toolkit/src/commonMain/kotlin/com/macaosoftware/component/stack/StackViewWithCustomPredictiveBack.kt)
  • Duplicated block (16 lines × 2) (composeApp/src/commonMain/kotlin/com/macaosoftware/component/demo/viewmodel/drawer/DrawerDemoViewModel.kt)
  • Duplicated block (17 lines × 3) (composeApp/src/commonMain/kotlin/com/macaosoftware/component/demo/viewmodel/bottomnavigation/BottomNavigationDemoViewModel.kt)
  • Duplicated block (18 lines × 2) (composeApp/src/jsMain/kotlin/com/macaosoftware/component/demo/JsPluginManagerInitializer.kt)
  • Duplicated block (19 lines × 2) (composeApp/src/commonMain/kotlin/com/macaosoftware/component/demo/viewmodel/pager/PagerDemoViewModel.kt)
  • Duplicated block (19 lines × 4) (component-toolkit/src/androidMain/kotlin/com/macaosoftware/component/AndroidComponentRender.kt)
  • Duplicated block (22 lines × 2) (component-toolkit/src/commonMain/kotlin/com/macaosoftware/component/stack/StackViewWithCustomPredictiveBack.kt)
  • Duplicated block (24 lines × 2) (component-toolkit/src/commonMain/kotlin/com/macaosoftware/component/stack/StackViewWithCustomPredictiveBack.kt)
  • Duplicated block (24 lines × 3) (composeApp/src/commonMain/kotlin/com/macaosoftware/component/demo/viewmodel/home/HomeTopBarViewModel.kt)
  • …and 2 more

New (28)

  • Change coupling: DrawerComponent.kt ↔ BackPressHandler.kt (component-toolkit/src/commonMain/kotlin/com/macaosoftware/component/drawer/DrawerComponent.kt)
  • Change-coupling hub: ComponentWithBackStackExt.kt → BottomNavigationComponent.kt, DrawerComponent.kt, PagerComponent.kt, PanelComponent.kt, StackComponent.kt (component-toolkit/src/commonMain/kotlin/com/macaosoftware/component/core/ComponentWithBackStackExt.kt)
  • Change-coupling hub: NavigationComponentExt.kt → AdaptiveSizeComponent.kt, BottomNavigationComponent.kt, DrawerComponent.kt, PanelComponent.kt (component-toolkit/src/commonMain/kotlin/com/macaosoftware/component/core/NavigationComponentExt.kt)
  • Dependency hygiene PARTLY measured — Maven/Gradle declarations read, no dependency graph resolved
  • Documentation: no installation or build instructions (README.md)
  • Documentation: no usage examples (README.md)
  • Duplicated block (11 lines × 3) (component-toolkit/src/commonMain/kotlin/com/macaosoftware/component/bottomnavigation/BottomNavigationComponent.kt)
  • Duplicated block (14 lines × 5) (composeApp/src/commonMain/kotlin/com/macaosoftware/component/demo/viewmodel/bottomnavigation/BottomNavigationDemoViewModel.kt)
  • Duplicated block (15 lines × 2) (component-toolkit/src/commonMain/kotlin/com/macaosoftware/component/stack/StackViewWithCustomPredictiveBack.kt)
  • Duplicated block (15 lines × 3) (composeApp/src/commonMain/kotlin/com/macaosoftware/component/demo/viewmodel/drawer/DrawerDemoViewModel.kt)
  • Duplicated block (18 lines × 2) (composeApp/src/jsMain/kotlin/com/macaosoftware/component/demo/JsPluginManagerInitializer.kt)
  • Duplicated block (22–30 lines × 2) (component-toolkit/src/jsMain/kotlin/com/macaosoftware/component/BrowserComponentRender.kt)
  • Duplicated block (27 lines × 3) (composeApp/src/commonMain/kotlin/com/macaosoftware/component/demo/viewmodel/home/HomeTopBarViewModel.kt)
  • Duplicated block (32 lines × 2) (composeApp/src/commonMain/kotlin/com/macaosoftware/component/demo/viewmodel/drawer/DrawerDemoViewModel.kt)
  • Duplicated block (37 lines × 2) (composeApp/src/commonMain/kotlin/com/macaosoftware/component/demo/viewmodel/bottomnavigation/BottomNavigationDemoViewModel.kt)
  • Duplicated block (38–40 lines × 2) (component-toolkit/src/commonMain/kotlin/com/macaosoftware/component/stack/StackViewWithCustomPredictiveBack.kt)
  • Duplicated block (47 lines × 2) (component-toolkit/src/commonMain/kotlin/com/macaosoftware/component/stack/StackViewWithCustomPredictiveBack.kt)
  • Duplicated block (9 lines × 2) (composeApp/src/commonMain/kotlin/com/macaosoftware/component/demo/viewmodel/home/HomeTopBarViewModel.kt)
  • Members sharing a duplicated core (5 members, 50+ identical tokens) (composeApp/src/commonMain/kotlin/com/macaosoftware/component/demo/viewmodel/bottomnavigation/BottomNavigationDemoViewModel.kt)
  • No ADRs found
  • …and 8 more

Architecture

  • Containers 0 added · 0 removed · contexts 2 added · 0 removed · edges 3 added · 0 removed

Added bounded contexts (2)

  • component-toolkit
  • composeApp

Added dependency edges (3)

  • composeApp → component-toolkit (coupling)
  • composeApp → macao-sdk-app
  • macao-sdk-app → component-toolkit

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

pablichjenkov/macao-sdk 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 22 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 656395c11b877c86c5b422b3049bcfba15fde79d — 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-821afab8930d.