v0.1.0
shadcn-compose v0.1.0 — first release
A shadcn/ui-inspired component library for Kotlin Multiplatform /
Compose Multiplatform — Android, iOS, Desktop (JVM), and Web (JS + WasmJS) from one
commonMain source set. No Material dependency: every component is drawn from this
library's own design tokens and the experimental Compose Styles API, the same way real
shadcn/ui owns its Tailwind-driven CSS instead of wrapping a design system it doesn't
control.
What's in this release
- Full registry parity with real shadcn/ui's
docs/components/base/*— all 64 real
components accounted for, with one deliberate scope exception (native-select, which
would require real native OS widgets per platform, out of this library's pure-Compose
scope).docs/data-table/direction/toastare correctly treated as non-gaps per
shadcn's own docs (guide-only, Compose-native equivalent, and deprecated→sonner,
respectively). - shadcn's "AI Elements" family:
Message/MessageGroup,Bubble/BubbleGroup,
Attachment/AttachmentGroup,Marker, andMessageScroller— a chat-transcript
scroller with sticky-release auto-scroll semantics matching real shadcn's own
documented behavior, plus a real interactive streaming-reply demo in the catalog app. - shadcn's
docs/utils/*utilities:Modifier.shadcnShimmer()and
Modifier.shadcnScrollFade(), both implemented as real Compose draw-phase effects
(not stubs). - Token-based theming: 8 named style presets (Vega/Nova/Maia/Lyra/Mira/Luma/Sera/Rhea),
multiple base color families, accent overrides, and full light/dark mode support. - Slot-based composition APIs where real shadcn needs them (
DropdownMenu/ContextMenu/
Menubarfreely mix labeled sections, separators, and destructive items;Command
supports grouped/headed, live-filterable item lists).
Quality bar
- Compiles clean on all 6 KMP targets (JVM, Android, iOS arm64 + simulator arm64, JS,
WasmJS) for both the library and the catalog app. - Full test suite (unit tests + Roborazzi screenshot goldens) passes on every testable
target. ktlintCheckclean project-wide; a custom static check
(scripts/check_style_block_theme_reads.sh) guards against a real dark-mode-toggle
bug class found and fixed this cycle.ktlintCheck/detekt/the custom check all run in CI on every push.
Known limitations
- Not yet published to Maven Central.
library/build.gradle.ktsis fully wired for
it (vanniktech plugin, POM metadata), but publishing requires a real Sonatype account
and GPG signing key that don't exist yet —signAllPublications()is deliberately
left commented out until then../gradlew :library:publishToMavenLocalworks today if
you want to consume it locally in the meantime. - No
apiCheck/binary-compatibility-validator wired yet — the public API surface isn't
tracked for breaking changes between versions yet (reasonable for a pre-1.0 first
release, worth adding before the API is considered stable). - Detekt is currently only wired for the two thin platform-entry-point modules
(:app:desktopApp,:app:androidApp), not:libraryor:app:sharedwhere almost
all the actual logic lives.
See the README for the full component catalog, keyword index, and
Installation instructions.