diff --git a/bom/README.md b/bom/README.md
new file mode 100644
index 0000000000..eca6e183c9
--- /dev/null
+++ b/bom/README.md
@@ -0,0 +1,48 @@
+# GraphQL Kotlin BOM
+[![Maven Central](https://img.shields.io/maven-central/v/com.expediagroup/graphql-kotlin-bom.svg?label=Maven%20Central)](https://central.sonatype.com/search?namespace=com.expediagroup&q=name%3Agraphql-kotlin-bom)
+
+`graphql-kotlin-bom` defines the versions of all the modules in `graphql-kotlin`.
+This allows the version of the modules imported in your project to be consistent
+without needing to specify the version of each module.
+
+## Usage
+
+With Maven, import a dependency on `graphql-kotlin-bom` in `dependencyManagement` section in your project pom,
+and add dependencies on `graphql-kotlin` modules with no version.
+
+```xml
+
+
+
+ com.expediagroup
+ graphql-kotlin-bom
+ ${latestVersion}
+ pom
+ import
+
+
+
+
+
+
+ com.expediagroup
+ graphql-kotlin-client
+
+
+```
+
+With Gradle, import `graphql-kotlin-bom` using Gradle `platform`,
+and add dependencies on `graphql-kotlin` modules with no version.
+
+```kotlin
+implementation(platform("com.expediagroup:graphql-kotlin-bom:$latestVersion"))
+
+implementation("com.expediagroup:graphql-kotlin-client")
+```
+
+## Documentation
+
+Additional information can be found in our [documentation](https://opensource.expediagroup.com/graphql-kotlin/docs/server/graphql-server)
+and the [Javadocs](https://www.javadoc.io/doc/com.expediagroup/graphql-kotlin-server) of all published library versions.
+
+If you have a question about something you can not find in our documentation or javadocs, feel free to [start a new discussion](https://github.com/ExpediaGroup/graphql-kotlin/discussions).
diff --git a/bom/build.gradle.kts b/bom/build.gradle.kts
new file mode 100644
index 0000000000..bd6d69e611
--- /dev/null
+++ b/bom/build.gradle.kts
@@ -0,0 +1,31 @@
+description = "BOM (Bill Of Materials) for graphql-kotlin"
+
+plugins {
+ `maven-publish`
+ `java-platform`
+}
+
+javaPlatform {
+ allowDependencies()
+}
+
+dependencies {
+ project.rootProject.subprojects.forEach { subproject ->
+ if (subproject.name != "graphql-kotlin-bom") {
+ api(subproject)
+ }
+ }
+}
+
+publishing {
+ publications {
+ create("graphql-kotlin-bom") {
+ from(components["javaPlatform"])
+ pom {
+ description = "BOM (Bill Of Materials) for graphql-kotlin"
+ name = "graphql-kotlin-bom"
+ packaging = "pom"
+ }
+ }
+ }
+}
diff --git a/settings.gradle.kts b/settings.gradle.kts
index 0866bb9edf..f6ce4c4354 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -32,6 +32,9 @@ include(":graphql-kotlin-dataloader")
include(":graphql-kotlin-dataloader-instrumentation")
include(":graphql-kotlin-automatic-persisted-queries")
+// BOM
+include(":graphql-kotlin-bom")
+
//
// Project mappings so we don't need to create projects that group subprojects
//
@@ -65,3 +68,6 @@ project(":graphql-kotlin-ktor-server").projectDir = file("servers/graphql-kotlin
project(":graphql-kotlin-dataloader").projectDir = file("executions/graphql-kotlin-dataloader")
project(":graphql-kotlin-dataloader-instrumentation").projectDir = file("executions/graphql-kotlin-dataloader-instrumentation")
project(":graphql-kotlin-automatic-persisted-queries").projectDir = file("executions/graphql-kotlin-automatic-persisted-queries")
+
+// BOM
+project(":graphql-kotlin-bom").projectDir = file("bom")
diff --git a/website/docs/getting-started.mdx b/website/docs/getting-started.mdx
index 9a5643db03..bdd01c6edd 100644
--- a/website/docs/getting-started.mdx
+++ b/website/docs/getting-started.mdx
@@ -18,7 +18,9 @@ Using a JVM dependency manager, link any `graphql-kotlin-*` library to your proj
defaultValue="gradle"
values={[
{ label: 'Gradle Kotlin', value: 'gradle' },
- { label: 'Maven', value: 'maven' }
+ { label: 'Gradle Kotlin with BOM', value: 'gradle-bom' },
+ { label: 'Maven', value: 'maven' },
+ { label: 'Maven with BOM', value: 'maven-bom' }
]
}>
@@ -28,6 +30,15 @@ Using a JVM dependency manager, link any `graphql-kotlin-*` library to your proj
implementation("com.expediagroup", "graphql-kotlin-spring-server", latestVersion)
```
+
+
+
+```kotlin
+implementation(platform("com.expediagroup:graphql-kotlin-bom:$latestVersion"))
+
+implementation("com.expediagroup", "graphql-kotlin-spring-server")
+```
+
@@ -39,6 +50,31 @@ implementation("com.expediagroup", "graphql-kotlin-spring-server", latestVersion
```
+
+
+
+
+```xml
+
+
+
+ com.expediagroup
+ graphql-kotlin-bom
+ ${latestVersion}
+ pom
+ import
+
+
+
+
+
+
+ com.expediagroup
+ graphql-kotlin-spring-server
+
+
+```
+