> ## Documentation Index
> Fetch the complete documentation index at: https://docs.modaal.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Duet Framework Documentation Map

> Every Duet page in one map: the overview, the tutorials, whether to share code, the framework and architecture comparisons, Android primers and the glossary.

Duet is Modaal's cross-platform parity framework for native iOS and Android apps: feature logic is written once in Kotlin, each app keeps its platform's own interface, and a CI gate replays recorded behavior on both platforms and fails the build when the two results differ. This page lists every Duet page on this site, grouped by the question each page answers. If Duet is new to you, read the overview first.

## Where should you start?

<CardGroup cols={2}>
  <Card title="Duet overview" icon="mobile-screen-button" href="/articles/duet">
    What Duet is, what you get, what it requires of your project, and the two project cards that scaffold it.
  </Card>

  <Card title="Duet tutorials" icon="graduation-cap" href="/tutorials/duet">
    Nine hands-on tutorials build one native iOS and Android app, Foyer, from a first Kotlin feature to the CI checks, theming, localization and analytics.
  </Card>

  <Card title="Should you share code between iOS and Android?" icon="share-nodes" href="/articles/share-code-ios-android">
    The three ways to ship two apps, what each can prove about behavior, what sharing costs, and who should skip it.
  </Card>

  <Card title="Starting a new project" icon="wand-magic-sparkles" href="/articles/new-project">
    How the new-project flow works and how to pick between the multiplatform, iPhone-only, prototype and game templates.
  </Card>

  <Card title="Set up the Android toolchain" icon="android" href="/guides/setup-android">
    What the install-the-Android-SDK banner means and what its button installs.
  </Card>
</CardGroup>

## Learn Duet by building one app

The [Duet tutorial series](/tutorials/duet) teaches Duet by building one native iOS and Android app, Foyer, from its first Kotlin feature to its analytics: a splash, a sign-in gate, an onboarding gate, a home tab with one paid feature, an upgrade flow and a profile tree. You write each feature's logic once in Kotlin, mount it in a SwiftUI app and a Compose app, and record its behavior so the checks replay the same recordings on both platforms. Every tutorial opens a starting tree and ends with a finished tree in the public [duet-tutorials repository](https://github.com/modaal-agent/duet-tutorials); every tree is pinned to one family release and checked in that repository's CI. Tutorials 1 to 6 build on each other in order; Tutorials 7, 8 and 9 each start from Tutorial 6's finished tree, so you can take them in any order. Tutorial 1 needs a JDK only; from Tutorial 2 onward you need Xcode, XcodeGen and the Android SDK, which the [series index](/tutorials/duet#what-do-you-need-installed) lists. The index also [maps every Duet concept and engineering practice](/tutorials/duet#what-does-the-series-teach) to the tutorial step that teaches it. The nine tutorials, in order:

* [Tutorial 1: Your first feature](/tutorials/duet-01-first-feature): state, actions and effects as data, a pure reducer, and a scenario recorded and replayed, in Kotlin with no UI.
* [Tutorial 2: One behavior, two apps](/tutorials/duet-02-two-apps): the Kotlin core as an Apple framework, and a SwiftUI shell and a Compose shell over the same store.
* [Tutorial 3: Composing features](/tutorials/duet-03-composing-features): a feature tree mounted from state, delegate events as parent actions, ports, and chain recordings.
* [Tutorial 4: Workers](/tutorials/duet-04-workers): an on-device backend, streams observed by workers, and a slice projected down to two tabs.
* [Tutorial 5: Navigation as state](/tutorials/duet-05-navigation-as-state): route state, back as an action, deep links, process-death restore, and lateral state between siblings.
* [Tutorial 6: The checks in CI](/tutorials/duet-06-checks-in-ci): the lanes, the ten commands, one GitHub Actions workflow, and the mutation drill.
* [Tutorial 7: Theming with design tokens](/tutorials/duet-07-theming): a token vocabulary generated for both platforms and a second theme with no feature-code change.
* [Tutorial 8: Localizing the app](/tutorials/duet-08-localization): refusals as values, string catalogs and resources, and a second language that changes no recording.
* [Tutorial 9: Adding analytics](/tutorials/duet-09-analytics): events emitted from reducers as effect data, a console sink worker, and the taxonomy read back out of the recordings.

## How does Duet compare to the alternatives?

<CardGroup cols={2}>
  <Card title="The best cross-platform frameworks in 2026" icon="map" href="/articles/best-cross-platform-framework">
    Flutter, React Native, Compose Multiplatform, KMP, MAUI, Ionic, Skip and two native apps on one set of axes.
  </Card>

  <Card title="Duet vs Flutter" icon="code-compare" href="/articles/duet-vs-flutter">
    Which layer draws the screen, what ships in the binary, and what verifies that the two apps behave the same.
  </Card>

  <Card title="Duet vs React Native" icon="atom" href="/articles/duet-vs-react-native">
    Shared logic in a shipped JavaScript engine versus a compiled Kotlin core verified with recordings.
  </Card>

  <Card title="Duet vs Compose Multiplatform" icon="clone" href="/articles/duet-vs-compose-multiplatform">
    Both are Kotlin Multiplatform; one shares the UI on a canvas, the other keeps SwiftUI native.
  </Card>

  <Card title="Best iOS app architecture" icon="sitemap" href="/articles/best-ios-app-architecture">
    TCA, RIBs, VIPER, MVVM, MVC and Clean Architecture scored on testability, onboarding, cross-platform reach and AI-agent fit.
  </Card>
</CardGroup>

## What does a Duet app look like inside?

<CardGroup cols={2}>
  <Card title="Inside a Duet Android app" icon="folder-tree" href="/articles/duet-android-app-anatomy">
    A thin Compose shell over a shared Kotlin core: one Gradle module per feature, plus the recorded fixtures the iOS app replays.
  </Card>

  <Card title="How to build testable Android apps" icon="vial-circle-check" href="/articles/testable-android-apps">
    Logic in pure reducers, nondeterminism behind effects, recorded scenarios as the regression suite.
  </Card>

  <Card title="Handling platform-specific UI" icon="layer-group" href="/articles/cross-platform-ui-parity">
    The presentation contract, the kind-to-renderer registry, and the ledger that records deliberate iOS/Android divergence.
  </Card>

  <Card title="Migrating a CombineRIBs app to Duet" icon="arrow-right-arrow-left" href="/articles/combineribs-to-duet">
    How an existing app gains a shared Kotlin core and an Android app one feature at a time, with the iOS app shipping throughout.
  </Card>
</CardGroup>

## What do you need to know about Android first?

<CardGroup cols={2}>
  <Card title="How Android apps work" icon="cubes" href="/articles/how-android-apps-work">
    An APK or app bundle: a manifest declaring entry points, Compose screens driven by state holders, and a Gradle build behind it.
  </Card>

  <Card title="Android API levels" icon="table" href="/articles/android-api-levels">
    Every Android version with its API level, codename, year and live device coverage, and how to choose a minSdk.
  </Card>
</CardGroup>

## Where is the reference material?

<CardGroup cols={2}>
  <Card title="Duet glossary" icon="book" href="/articles/duet-glossary">
    Every Duet term defined in one place, with the name the tools use for each.
  </Card>

  <Card title="The Duet framework on GitHub" icon="github" href="https://github.com/modaal-agent/duet">
    Both flavors, the recording toolchain and the versioned contracts.
  </Card>
</CardGroup>

## Where does Duet live outside these docs?

* [Duet on modaal.dev](https://modaal.dev/duet) is the product page: what Modaal scaffolds and what it costs.
* [github.com/modaal-agent/duet](https://github.com/modaal-agent/duet) holds the framework itself under an open license, with its contracts and CONTRIBUTING rules.
* [github.com/modaal-agent/duet-tutorials](https://github.com/modaal-agent/duet-tutorials) holds every tutorial's starting and finished tree, pinned to one family release and gated in that repository's CI.
