Skip to content

allwrite

allwrite is a CLI tool and a collection of OpenRewrite recipes for automated code transformations across YAML, Gradle, Java/Kotlin, and Spring projects.

It wraps OpenRewrite's runtime into a CLI that can run recipes by name, integrate with GitHub Actions, and work with Dependabot pull requests.

How is allwrite different from OpenRewrite CLI?

OpenRewrite provides the transformation engine and a broad recipe ecosystem. allwrite builds an opinionated workflow on top of it: it adds human-friendly recipe names, bundles curated recipes, supports private recipes from external JARs, and integrates recipe execution with GitHub Actions and Dependabot. It is not a replacement for OpenRewrite; it makes selected OpenRewrite capabilities easier to discover and automate.

Why allwrite?

Use friendly recipe names instead of fully qualified Java class names, combine OpenRewrite's ecosystem with project-specific migrations, and package private recipes as external JARs.

What is included

allwrite is a modular project, utilizing dependency injection capabilities from the Koin framework.

It consists of the following Gradle modules (that may contain one or more Koin modules):

  • allwrite-api - published API with incoming port interfaces (RecipeExecutor, RecipeSource, RecipeCoordinates) for interacting with allwrite-runtime
  • allwrite-spi - published SPI with base classes for recipe authors (AllwriteRecipe, AllwriteScanningRecipe, RecipeMetadata)
  • allwrite-cli - provides both Application and Infrastructure layers for the CLI app
  • allwrite-runtime - provides core implementation (implements allwrite-api interfaces); equivalent of the Domain layer
  • allwrite-recipes - contains OpenRewrite recipes to be executed by allwrite-cli
  • allwrite-completions - provides annotation processors generating CLI auto-completions