Skip to main content

Gradle plugins

dev.cstories.gradle​

The main catalog plugin. Applies to the module that hosts your stories.

  • adds the required CStories dependencies (cstories-annotations, cstories-runtime, the cstories-processor KSP dependency)
  • generates a catalog entry point for whichever target(s) (jvm(), wasmJs) the module already declares
  • registers the runCStoriesDesktop, runCStoriesDesktopHotReload, runCStoriesWasm, and cstoriesExportWeb tasks

Applying it with neither jvm() nor wasmJs declared fails fast with a clear error.

Global theme wrapper​

The plugin automatically discovers an accessible object named exactly CustomCStoriesThemeWrapper that implements CStoriesThemeWrapper. No Gradle configuration is required. If it is not present, the runtime uses DefaultCStoriesThemeWrapper.

dev.cstories.gradle.components​

A lightweight plugin for plain component/design-system library modules. Applies to the module that declares your components, when it's different from the module that declares the stories demonstrating them.

  • does not apply Compose Multiplatform
  • does not require a jvm()/wasmJs() target
  • does not wire any catalog/entry-point task
  • makes cstories-annotations available at compile time without publishing it as a runtime dependency
  • wires KSP to process @CStoryComponent and generate io.cstories.generated.CStoryComponentRefs

See Reference a component in a story for when this plugin is needed.

Choosing between the two​

SituationPlugin to apply
Published reusable librarydev.cstories.gradle.components on the component module, dev.cstories.gradle on a separate stories module
Application-owned design systemdev.cstories.gradle may be applied to the single module
Components and stories live in different modulesdev.cstories.gradle on the stories module, dev.cstories.gradle.components on the components module

Publication rule​

Do not apply dev.cstories.gradle to a reusable component library that is published for external consumers.

That plugin adds cstories-runtime and catalog-related dependencies to the module where it is applied. Those dependencies can therefore become part of the published dependency graph.

For a published library:

  • the component module contains the reusable components;
  • the component module may apply dev.cstories.gradle.components;
  • a separate stories module depends on the component module;
  • only the stories module applies dev.cstories.gradle.