diff --git a/CHANGELOG.md b/CHANGELOG.md
index 40b796f..c60d713 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,7 +4,7 @@ All notable changes to this project are documented here. The format is based on
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to
[Semantic Versioning](https://semver.org/spec/v2.0.0.html).
-## [Unreleased]
+## [4.2.0] - 2026-06-08
### Added
- **Android target.** The core `tree-structure` module and `tree-structure-compose` now publish an
@@ -112,7 +112,7 @@ A breaking release that cleans up the core API and enforces an explicit public s
## [3.1.3]
- iOS targets and Maven Central (Sonatype Central Portal) publishing.
-[Unreleased]: https://github.com/AdrianKuta/Tree-Data-Structure/compare/v4.1.1...HEAD
+[4.2.0]: https://github.com/AdrianKuta/Tree-Data-Structure/compare/v4.1.1...v4.2.0
[4.1.1]: https://github.com/AdrianKuta/Tree-Data-Structure/compare/v4.1.0...v4.1.1
[4.1.0]: https://github.com/AdrianKuta/Tree-Data-Structure/compare/v4.0.0...v4.1.0
[4.0.0]: https://github.com/AdrianKuta/Tree-Data-Structure/compare/v3.4.0...v4.0.0
diff --git a/README.md b/README.md
index bd5f736..a405262 100644
--- a/README.md
+++ b/README.md
@@ -30,14 +30,14 @@ Gradle (Kotlin DSL):
```kotlin
// commonMain for KMP projects, or any sourceSet/module where you need it
dependencies {
- implementation("com.github.adriankuta:tree-structure:4.1.1") // latest version is on the badge above
+ implementation("com.github.adriankuta:tree-structure:4.2.0") // latest version is on the badge above
}
```
Gradle (Groovy):
```groovy
dependencies {
- implementation "com.github.adriankuta:tree-structure:4.1.1"
+ implementation "com.github.adriankuta:tree-structure:4.2.0"
}
```
@@ -46,7 +46,7 @@ Maven:
com.github.adriankuta
tree-structure
- 4.1.1
+ 4.2.0
```
@@ -160,7 +160,7 @@ that depends on the core.
`@Serializable` directly. Convert to and from the acyclic `TreeNodeDto` instead.
```kotlin
-implementation("com.github.adriankuta:tree-structure-serialization:4.1.1")
+implementation("com.github.adriankuta:tree-structure-serialization:4.2.0")
```
```kotlin
val json = Json.encodeToString(root.toDto())
@@ -172,7 +172,7 @@ val restored = Json.decodeFromString>(json).toTreeNode()
Traverse a tree as a cold `Flow`, which is handy inside coroutine and `ViewModel` pipelines.
```kotlin
-implementation("com.github.adriankuta:tree-structure-coroutines:4.1.1")
+implementation("com.github.adriankuta:tree-structure-coroutines:4.2.0")
```
```kotlin
root.preOrderFlow().collect { println(it.value) }
@@ -185,7 +185,7 @@ A `LazyTree` composable for Compose Multiplatform (JVM/desktop, Android, iOS, Wa
nodes are composed.
```kotlin
-implementation("com.github.adriankuta:tree-structure-compose:4.1.1")
+implementation("com.github.adriankuta:tree-structure-compose:4.2.0")
```
For the common case, the no-content overload renders each node with the built-in `TreeNodeRow`
@@ -217,7 +217,7 @@ subtrees are reused, so updates are cheap and old roots stay valid. Backed by
`kotlinx.collections.immutable`.
```kotlin
-implementation("com.github.adriankuta:tree-structure-immutable:4.1.1")
+implementation("com.github.adriankuta:tree-structure-immutable:4.2.0")
```
```kotlin
val root = ImmutableTreeNode("World").addChild(ImmutableTreeNode("Europe"))
diff --git a/build.gradle.kts b/build.gradle.kts
index 289ff1e..da79085 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -16,7 +16,7 @@ plugins {
val PUBLISH_GROUP_ID = "com.github.adriankuta"
val PUBLISH_ARTIFACT_ID = "tree-structure" // base artifact; KMP will add -jvm, -ios*, etc.
-val PUBLISH_VERSION = "4.1.1"
+val PUBLISH_VERSION = "4.2.0"
val snapshot: String? by project