8.88.0 release (2026-07-30)
Total recipe count: 4091
info
This changelog only shows what recipes have been added, removed, or changed. OpenRewrite may do releases that do not include these types of changes. To see these changes, please go to the releases page.
Corresponding CLI version
- CLI version
4.4.3
Removed Artifacts
- rewrite-codemods
New Recipes
- io.quarkus.updates.camel.camel418_3.CamelQuarkusMigrationRecipe: Migrates
camel 4.18Quarkus application tocamel 4.18.3. - io.quarkus.updates.camel.camel421.CamelQuarkusMigrationRecipe: Migrates
camel 4.20Quarkus application tocamel 4.21. - io.quarkus.updates.core.quarkus338.ElasticsearchRestClientMigration: Migrate Elasticsearch low-level REST client from org.elasticsearch.client to co.elastic.clients.transport.rest5_client.low_level.
- org.apache.camel.upgrade.Camel418LTSMigrationRecipe: Migrates Apache Camel application to 4.18 LTS. This recipe aggregates all migration steps from 4.0 to 4.18.3.
- org.apache.camel.upgrade.camel418.upgradeDnsHeaders: Renames DNS header constants from dns.* pattern to CamelDns* pattern only if camel-dns dependency is present.
- org.apache.camel.upgrade.camel418.upgradeKafkaRecipes: Renames Kafka header constants only if camel-kafka dependency is present.
- org.apache.camel.upgrade.camel418.upgradeSalesforceHeaders: Renames Salesforce-specific header constants to CamelSalesforce* pattern when camel-salesforce is present. Only migrates headers with Salesforce-specific terminology (sObject*, apex*, pkChunking*) to minimize false positives. Generic headers like 'limit', 'contentType', 'jobId' are excluded as they could conflict with other components.
- org.apache.camel.upgrade.camel418_1.CamelMigrationRecipe: Migrates
camel 4.18.0application tocamel 4.18.1. - org.apache.camel.upgrade.camel418_1.XmlDsl418_1SagaRecipe: Apache Camel XML DSL migration from version 4.18 to 4.19. Converts saga compensation and completion child elements to attributes.
- org.apache.camel.upgrade.camel418_1.YamlDsl418_1SagaRecipe: Apache Camel YAML DSL migration from version 4.18 to 4.19. Flattens saga compensation and completion nested uri to direct values.
- org.apache.camel.upgrade.camel418_1.routePolicy: Renamed routePolicy to routePolicyRef on the route node.
- org.apache.camel.upgrade.camel418_1.saga: The Saga EIP has fixed the model for how to configure completion and compensation URIs.
- org.apache.camel.upgrade.camel418_3.CamelMigrationRecipe: Migrates
camel 4.18.1application tocamel 4.18.3. - org.apache.camel.upgrade.camel418_3.RenameHeaderInJavaMethod: Renames header references in Message.setHeader() and Message.getHeader() method calls. Only migrates string literals in safe contexts. Does NOT migrate dynamic header names or Map.get() calls.
- org.apache.camel.upgrade.camel418_3.RenameHeaderInSimpleExpression: Renames header references in Simple expressions like ${header.oldName} → ${header.newName}. Only migrates expressions inside simple() method calls.
- org.apache.camel.upgrade.camel418_3.RenameHeaderInXmlDsl: Renames header references in XML DSL <setHeader name="...">, <header name="...">, and <removeHeader name="..."> elements.
- org.apache.camel.upgrade.camel418_3.RenameHeaderInYamlDsl: Renames header references in YAML DSL setHeader.name, header.name, and removeHeader.name entries.
- org.apache.camel.upgrade.camel418_3.RenameHeaderPrefixInJavaMethod: Renames header prefixes in Message.setHeader() and Message.getHeader() method calls. Only migrates string literals in safe contexts. Does NOT migrate dynamic header names or Map.get() calls.
- org.apache.camel.upgrade.camel418_3.RenameHeaderPrefixInSimpleExpression: Renames header prefixes in Simple expressions like ${header.SolrField.id} → ${header.CamelSolrField.id}. Only migrates expressions inside simple() method calls.
- org.apache.camel.upgrade.camel418_3.RenameHeaderPrefixInXmlDsl: Renames header prefixes in XML DSL <setHeader name="...">, <header name="...">, and <removeHeader name="..."> elements.
- org.apache.camel.upgrade.camel418_3.RenameHeaderPrefixInYamlDsl: Renames header prefixes in YAML DSL setHeader.name, header.name, and removeHeader.name entries.
- org.apache.camel.upgrade.camel418_3.RenameHeaderPrefixes: Renames Camel header prefixes across all DSL types: Java method calls (.setHeader, .getHeader), Simple expressions (${header.name}), XML DSL (<setHeader name="...">), and YAML DSL (setHeader.name). Any header starting with an old prefix gets that prefix replaced with the new prefix. Only migrates safe contexts to avoid false positives.
- org.apache.camel.upgrade.camel418_3.RenameHeaders: Renames Camel header(s) from old name(s) to new name(s) across all DSL types: Java method calls (.setHeader, .getHeader), Simple expressions (${header.name}), XML DSL (<setHeader name="...">), and YAML DSL (setHeader.name). Supports both single header rename (oldHeaderName/newHeaderName) and bulk rename (headerMappings). Only migrates safe contexts to avoid false positives.
- org.apache.camel.upgrade.camel418_3.upgradeGitHub2Headers: Renames GitHub2 producer header constants to CamelGitHub* pattern only if camel-github dependency is present.
- org.apache.camel.upgrade.camel418_3.upgradeGoogleCloudHeaders: Renames Google Cloud header constants to CamelGoogleCloud* pattern only if camel-google-functions dependency is present.
- org.apache.camel.upgrade.camel418_3.upgradeGoogleSecretManagerHeaders: Renames Google Secret Manager header constants to CamelGoogleSecretManager* pattern only if camel-google-secret-manager dependency is present.
- org.apache.camel.upgrade.camel418_3.upgradeJGroupsHeaders: Renames JGroups header constants from JGROUPS_* to CamelJGroups* pattern only if camel-jgroups dependency is present.
- org.apache.camel.upgrade.camel418_3.upgradeJGroupsRaftHeaders: Renames JGroups Raft header constants from JGROUPSRAFT_* to CamelJGroupsRaft* pattern only if camel-jgroups-raft dependency is present.
- org.apache.camel.upgrade.camel418_3.upgradeJiraHeaders: Renames JIRA header constants to CamelJira* pattern only if camel-jira dependency is present.
- org.apache.camel.upgrade.camel418_3.upgradeLuceneHeaders: Renames Lucene-specific header constants to CamelLucene* pattern only if camel-lucene dependency is present. Generic header 'QUERY' is excluded to prevent false positives. Note - DSL accessor methods (returnLuceneDocs() → luceneReturnLuceneDocs()) are NOT migrated and require manual update.
- org.apache.camel.upgrade.camel418_3.upgradeMongoDbGridFsHeaders: Renames MongoDB GridFS header constants to CamelGridFs* pattern only if camel-mongodb-gridfs dependency is present.
- org.apache.camel.upgrade.camel418_3.upgradeOpenstackHeaders: Renames OpenStack-specific header constants to CamelOpenstack* pattern only if camel-openstack dependency is present. Generic headers (*Id, *Name, containerName, objectName, imageRef, interfaceType, ipVersion) are excluded to prevent false positives.
- org.apache.camel.upgrade.camel418_3.upgradeShiroHeaders: Renames Shiro security header constants from SHIRO_SECURITY_* to CamelShiroSecurity* pattern only if camel-shiro dependency is present.
- org.apache.camel.upgrade.camel418_3.upgradeSolrHeaders: Renames Solr header prefixes SolrField. and SolrParam. to CamelSolrField. and CamelSolrParam. when camel-solr dependency is present. Routes that reference constants symbolically continue to work without changes. Note - Because the renamed prefixes now begin with Camel, they are stripped by HeaderFilterStrategy when crossing transport boundaries. Routes that bridge external transports and want to drive Solr fields/params from headers must carry values in non-Camel-prefixed headers and map them in the route.
- org.apache.camel.upgrade.camel418_3.upgradeWeb3jHeaders: Renames Web3j-specific header constants to CamelWeb3j* pattern only if camel-web3j dependency is present. Generic headers without clear blockchain context (ADDRESS, ADDRESSES, POSITION, SOURCE_CODE, DATABASE_NAME, KEY_NAME, CLIENT_ID, PRIORITY, TTL, ERROR_CODE, ERROR_DATA, ERROR_MESSAGE, TOPICS, FILTER_ID) are excluded to prevent false positives. Note - DSL accessor renames and operation semantics still require manual review.
- org.apache.camel.upgrade.camel421.CamelMigrationRecipe: Migrates
camel 4.20application tocamel 4.21. - org.apache.camel.upgrade.camel421.migrateAws2S3ListObjectsApi: Migrates ListObjectsRequest/Response to ListObjectsV2Request/Response for the listObjects operation (pojoRequest=true only).
- org.apache.camel.upgrade.camel421.migrateErrorRegistryProperties: Migrates Error Registry configuration from camel.main.errorRegistryXxx to camel.errorRegistry.* pattern in .properties files. Note - errorRegistryStackTraceEnabled is removed (always captures full exception now). YAML files require manual migration.
- org.apache.camel.upgrade.camel421.removeCamelAwsXrayDependency: Removes the camel-aws-xray dependency which was removed in Camel 4.21 (deprecated since 4.17, AWS X-Ray service in maintenance mode).
- org.apache.camel.upgrade.camel421.removeCamelElytronDependency: Removes the camel-elytron dependency which was removed in Camel 4.21 (deprecated since 4.0).
- org.apache.camel.upgrade.camel421.removeCamelGithubDependency: Removes the camel-github dependency which was removed in Camel 4.21 (deprecated in 4.18, replaced by camel-github2).
- org.apache.camel.upgrade.camel421.removeCamelGrapeDependency: Removes the camel-grape dependency which was removed in Camel 4.21 (deprecated since 4.1).
- org.apache.camel.upgrade.camel421.removeCamelGuavaEventbusDependency: Removes the camel-guava-eventbus dependency which was removed in Camel 4.21 (deprecated since 4.6).
- org.apache.camel.upgrade.camel421.removeCamelStompDependency: Removes the camel-stomp dependency which was removed in Camel 4.21 (deprecated since 4.17).
- org.apache.camel.upgrade.camel421.upgradeArangoDbHeaders: Renames ArangoDB header constants to CamelArangoDb* pattern only if camel-arangodb dependency is present. Note - DSL accessor methods (key() → arangoDbKey(), resultClassType() → arangoDbResultClassType()) are NOT migrated and require manual update.
- org.apache.camel.upgrade.camel421.upgradeCouchbaseHeaders: Renames Couchbase header constants to CamelCouchbase* pattern only if camel-couchbase dependency is present.
- org.apache.camel.upgrade.camel421.upgradeCouchdbHeaders: Renames CouchDB header constants to CamelCouchDb* pattern only if camel-couchdb dependency is present.
- org.apache.camel.upgrade.camel421.upgradeDnsHeaders: Renames DNS header constants from dns.* pattern to CamelDns* pattern only if camel-dns dependency is present.
- org.apache.camel.upgrade.camel421.upgradeGitHub2Headers: Renames GitHub2 producer header constants to CamelGitHub* pattern only if camel-github dependency is present.
- org.apache.camel.upgrade.camel421.upgradeGoogleCloudSpeechToTextHeaders: Renames Google Vision header constants to CamelGoogleCloud* pattern only if camel-google-functions dependency is present.
- org.apache.camel.upgrade.camel421.upgradeGoogleCloudTextToSpeechHeaders: Renames Google Vision header constants to CamelGoogleCloud* pattern only if camel-google-functions dependency is present.
- org.apache.camel.upgrade.camel421.upgradeGoogleCloudVisionHeaders: Renames Google Vision header constants to CamelGoogleCloud* pattern only if camel-google-functions dependency is present.
- org.apache.camel.upgrade.camel421.upgradeIrcHeaders: Renames IRC header constants from irc.* to CamelIrc* pattern only if camel-irc dependency is present.
- org.apache.camel.upgrade.camel421.upgradeJt400Headers: Renames JT400 header constants to CamelJt400* pattern only if camel-jt400 dependency is present. Note - DSL accessor methods (kEY() → jt400Key(), senderInformation() → jt400SenderInformation()) are NOT migrated and require manual update.
- org.apache.camel.upgrade.camel421.upgradeKafkaRecipes: Renames Kafka header constants only if camel-kafka dependency is present.
- org.apache.camel.upgrade.camel421.upgradeMailHeaders: Renames Mail consumer dispatch header constants to CamelMail* pattern only if camel-mail dependency is present. Note - DSL accessor methods (copyTo() → mailCopyTo(), moveTo() → mailMoveTo(), delete() → mailDelete()) are NOT migrated and require manual update.
- org.apache.camel.upgrade.camel421.upgradeMiloHeaders: Renames Milo header constants to CamelMilo* pattern only if camel-milo dependency is present. Note - DSL accessor method (await() → miloAwait()) is NOT migrated and requires manual update.
- org.apache.camel.upgrade.camel421.upgradeOpensearchHeaders: Renames OpenSearch header constants to CamelOpensearch* pattern only if camel-opensearch dependency is present. Note - DSL accessor methods (operation() → opensearchOperation(), indexId() → opensearchIndexId(), etc.) are NOT migrated and require manual update.
- org.apache.camel.upgrade.camel421.upgradePdfHeaders: Renames PDF header constants to CamelPdf* pattern only if camel-pdf dependency is present. Note - DSL accessor methods (protectionPolicy() → pdfProtectionPolicy(), etc.) are NOT migrated and require manual update.
- org.openrewrite.gradle.RemoveEmptyBuildscriptBlock: Removes a
buildscriptblock frombuild.gradle(.kts)orsettings.gradle(.kts)when it contributes nothing to the build. A block containing only other empty blocks, such as an emptydependenciesorrepositoriesblock, is also considered empty. A block containing a comment is left alone, so that no comment is silently deleted. - org.openrewrite.gradle.plugins.SetDevelocityProjectId: Sets the
projectIdin thedevelocityblock of a Gradle settings file, adding it after theserverassignment when absent or updating it when it differs. TheprojectIdis used by newer Develocity servers to associate build scans with a project. - org.openrewrite.gradle.plugins.SetDevelocityServer: Sets the
serverin thedevelocityblock of a Gradle settings file, adding it as the first statement when absent or updating it when it differs. Use this to point builds at a different Develocity server, for example when migrating between servers. - org.openrewrite.java.migrate.AddMapstructAnnotationProcessorPath: Add the
mapstruct-processorannotation processor path, matching the version of themapstructdependency, so that MapStruct mappers are generated when annotation processing is configured explicitly. - org.openrewrite.java.migrate.javaee8.MigrateToServlet3x: Update Java EE Servlet Dependencies to 3.x.
- org.openrewrite.java.spring.boot2.RemoveStaleMockitoVersionProperty: Spring Boot 2.7 switched to importing
org.mockito:mockito-bom:${mockito.version}. A stalemockito.versionoverride predating the Mockito BOM (before 4.3.0) resolves to a non-existent POM, which breaks dependency resolution and silently stalls later upgrades such as Spring Cloud. Only remove the property when it still points at such an older Mockito version, so that deliberate overrides on newer versions are preserved when this recipe is chained into later Spring Boot upgrades. - org.openrewrite.java.spring.boot4.AddSpringBootStarterDataMongoDbReactiveTest: Adds the dedicated Spring Boot 4.0 reactive Spring Data MongoDB test starter when the application directly uses the reactive Spring Data MongoDB starter and MongoDB test slices.
- org.openrewrite.java.spring.boot4.AddSpringBootStarterDataMongoDbTest: Adds the dedicated Spring Boot 4.0 imperative Spring Data MongoDB test starter when the application directly uses the imperative Spring Data MongoDB starter and MongoDB test slices.
- org.openrewrite.java.spring.boot4.MigrateJacksonBomProperty: In Spring Boot 4
jackson-bom.versioncontrols the Jackson 3 (tools.jackson) BOM, while the Jackson 2 BOM is controlled byjackson-2-bom.version. A Spring Boot 3 override pins a Jackson 2 version, so rename it to keep managing Jackson 2. Gated on a Spring Boot 3 parent so a deliberate Jackson 3 override on an already-Spring-Boot-4 project is left untouched. - org.openrewrite.java.spring.boot4.MigrateJsonschema2PojoToSpringBoot4: Update
jsonschema2pojo-maven-pluginto generate Jackson 3 and Jakarta Validation annotations compatible with Spring Boot 4. Thejackson3annotation style was introduced in jsonschema2pojo 1.3.0, so the plugin is upgraded to at least that version first. - org.openrewrite.java.spring.boot4.MigrateOpenApiGeneratorToSpringBoot4: Update
openapi-generator-maven-pluginexecutions using thespringgenerator to generate Spring Boot 4 and Jackson 3 sources. Replaces the deprecateduseSpringBoot3option withuseSpringBoot4and enablesuseJackson3, matching the Jackson 3 baseline of Spring Boot 4. EnablinguseSpringBoot4also enablesuseJakartaEe, so it is left implicit. TheuseSpringBoot4/useJackson3options were introduced in OpenAPI Generator 7.16.0, so the plugin is upgraded to at least that version first. - org.openrewrite.java.spring.boot4.RelocateWebServerClasses: Spring Boot 4.0 relocated the embedded web server (Tomcat, Jetty) and web server application context classes into dedicated modular packages. This recipe updates references to the relocated classes' new fully-qualified names, including the servlet and reactive
WebServerFactoryvariants, which moved intoservletandreactivesubpackages. Undertow support was removed in Spring Boot 4.0 and is intentionally not handled here. - org.openrewrite.java.spring.boot4.SpringBootProperties_4_1: Migrate properties found in
application.propertiesandapplication.yml. - org.openrewrite.java.spring.data.UpgradeSpringDataMongoDb_5_0: Align explicitly versioned Spring Data MongoDB and supported MongoDB JVM driver dependencies with Spring Data MongoDB 5.0. Managed, versionless dependencies remain managed.
- org.openrewrite.java.spring.data.UpgradeSpringData_4_0: Migrate applications to the Spring Data 2025.1 release train. Datastore-specific migration support is added incrementally.
- org.openrewrite.java.spring.kafka.DefaultErrorHandlerSetBackOffToConstructor:
DefaultErrorHandlerdoes not have asetBackOff(BackOff)method; pass theBackOffto the constructor instead. - org.openrewrite.java.spring.util.concurrent.ListenableToCompletableFuture: Spring Framework 6.0 removed
org.springframework.util.concurrent.ListenableFuturein favor ofjava.util.concurrent.CompletableFuture. This recipe migratesListenableFuturetypes, along with theiraddCallbackinvocations andListenableFutureCallbackimplementations, toCompletableFuture. - org.openrewrite.java.testing.assertj.SimplifyAssertJEqualityAssertion: Replace
assertThat(x == y).isTrue()and its variants with the dedicated assertion for whatever==actually compares:assertThat(x).isNull()against thenullliteral,assertThat(x).isEqualTo(y)when either operand is a primitive and the comparison is therefore by value, andassertThat(x).isSameAs(y)when both operands are reference types. Floating point operands are left alone, as==andisEqualTodisagree onNaNand-0.0. - org.openrewrite.java.testing.testng.TestNgAssertionToAssertJ: Convert TestNG-style hard assertions on
org.testng.asserts.Assertioninstances to static AssertJassertThat(...), removing the now-unused localAssertioninstance. - org.openrewrite.java.testing.testng.TestNgSoftAssertToAssertJ: Convert TestNG-style soft assertions (
org.testng.asserts.SoftAssert) to AssertJ soft assertions (org.assertj.core.api.SoftAssertions). - org.openrewrite.quarkus.MigrateToQuarkus_v3_33_1: Quarkus update recipes to upgrade your application to 3.33.1.
- org.openrewrite.quarkus.MigrateToQuarkus_v3_38_0: Quarkus update recipes to upgrade your application to 3.38.0.
- org.openrewrite.staticanalysis.FindMissingJavadocOnPublicMethods: Locates
publicmethod declarations that are not documented with a Javadoc comment, marks them with a search result, and records them in a data table. - org.openrewrite.staticanalysis.FindNewExceptionWithoutCause: Finds
catchblocks that throw a newly created exception without referencing the caught exception, which discards the original exception's stack trace and message. Data flow (taint) tracking is used to establish whether the caught exception—or any value derived from it—reaches the thrown exception, so indirect references through local variables and string concatenation are not falsely reported. This mirrors PMD'sPreserveStackTracerule. - org.openrewrite.staticanalysis.ModernizeCollections: Replace the legacy synchronized types
Hashtable,Vector,Stack, andStringBufferwith their modern unsynchronized counterpartsHashMap,ArrayList,Deque/ArrayDeque, andStringBuilder. Each replacement is only applied when data flow analysis can prove the instance is a local variable that never escapes its method, so the synchronization it provided is redundant. - org.openrewrite.staticanalysis.ReplaceHashtableWithHashMap:
Hashtablesynchronizes every operation, which adds overhead in the common single-threaded case. This recipe replaces a localHashtablewith aHashMapwhen data flow analysis can prove theHashtablenever escapes its method (it is not returned, assigned to a field, or passed as an argument), so no other thread can observe it and the synchronization is redundant. Fields, escaping variables, andHashtable-specific method usages (contains,elements,keys) are left untouched.HashMappermitsnullkeys and values, so it accepts every inputHashtabledid. - org.openrewrite.staticanalysis.ReplaceStringBufferWithStringBuilder:
StringBuffersynchronizes every operation, which adds overhead in the common single-threaded case.StringBuilderexposes the identical API without the synchronization. This recipe replaces a localStringBufferwith aStringBuilderwhen data flow analysis can prove theStringBuffernever escapes its method (it is not returned, assigned to a field, or passed as an argument), so no other thread can observe it and the synchronization is redundant. Fields and escaping variables are left untouched. - org.openrewrite.staticanalysis.ReplaceVectorWithArrayList:
Vectorsynchronizes every operation, which adds overhead in the common single-threaded case. This recipe replaces a localVectorwith anArrayListwhen data flow analysis can prove theVectornever escapes its method (it is not returned, assigned to a field, or passed as an argument), so no other thread can observe it and the synchronization is redundant. Fields, escaping variables,Vector-specific method usages (likeelementAtoraddElement), and theVector(int, int)constructor are left untouched.
Removed Recipes
- org.apache.camel.upgrade.camel419.XmlDsl419SagaRecipe: Apache Camel XML DSL migration from version 4.18 to 4.19. Converts saga compensation and completion child elements to attributes.
- org.apache.camel.upgrade.camel419.YamlDsl419SagaRecipe: Apache Camel YAML DSL migration from version 4.18 to 4.19. Flattens saga compensation and completion nested uri to direct values.
- org.openrewrite.java.testing.assertj.SimplifyAssertJNullRelatedAssertion: Replace
assertThat(x == null).isTrue()and its variants with the dedicatedassertThat(x).isNull()/assertThat(x).isNotNull(). Beyond being more expressive, this avoids the compilation error that results when thenullliteral ends up as theassertThatargument (e.g.assertThat(null == x).isTrue()becomingassertThat(null).isSameAs(x)).