Prepared 2.4.1 brings stable time control with Kotlin 2.3.0!
prepared.opensavvy.dev/features/tim...
Prepared 2.4.1 brings stable time control with Kotlin 2.3.0!
prepared.opensavvy.dev/features/tim...
Note that without KtMongo, the official libraries bson-kotlin and bson-kotlinx serialize Instant and Uuid differently!
KtMongo's ObjectId and other BSON types can be serialized identically using:
β’ The official library bson-kotlin
β’ The official library bson-kotlinx
β’ Our Multiplatform library bson-multiplatform
ktmongo.opensavvy.dev/api/-kotlin%...
Screenshot of https://dokka-mkdocs.opensavvy.dev/api/-library%20module/opensavvy.dokka.material.mkdocs.example/foo2.html
Dokka for Material MkDocs 0.5.4 is out!
β’ Kotlin 2.3.0
β’ Gradle 9.2.1
β’ Dokka 2.1.0
β’ Native breadcrumb support
dokka-mkdocs.opensavvy.dev
Spine 0.9.2 brings fixes for explicit null query parameters
Thanks again @skye.codes!
spine.opensavvy.dev/parameters.h...
@vite.dev for @kotlinlang.org 0.8.2 now supports Kotlin 2.3.0!
We've also made a few improvements to the UX of the website.
vite-kotlin.opensavvy.dev/news/2026/02...
Prepared 2.4.0 is out:
β’ Conditionally ignore tests
β’ Better exception handling of fixtures
β’ Bug fixes
prepared.opensavvy.dev/news/2026/02...
OpenSavvy β€οΈ Arrow
Spine is really cool! If youβre looking for a great way of doing typesafe routing in Ktor check it out!
Now also with Arrow-kt support π
routeWithRaise(User.get) { val id = idOf(User) val user = dataLock.withLock("get $id") { data.find { it.id == id } } ensureNotNull(user) { NotFound(id) } respond(user) }
Spine 0.9.1 comes with bug fixes for #Arrow compatibility for typed #Ktor endpoints:
Thanks @skye.codes for the contribution!
β a: β 0: 1 β 1: 2 β 2: (field not present) "Bob" check(a == b) { (a diff b) ?: "no diff" } | | | | | {"a": [1, 2, "Bob"]} | false {"a": [1, 2]}
With KtMongo 0.26.0, easily compare two complex BSON documents or arrays
Particularly useful in tests to understand what changed!
ktmongo.opensavvy.dev
test("Multiple indices") { check(multiDoc().select<String>("$.a[0, 3][0:1:2]").toList() == listOf("a", "d")) }
With KtMongo 0.26.0, use complex JSONPath expressions to find data in your BSON documents!
ktmongo.opensavvy.dev
We can't view our own profile anymore though
Our domain name is now verified again!
Pedestal 3.2.0 adds:
β’ 32-bit optimized EnumSet
β’ Multiplatform weak references
β’ Multiplatform weak value maps
pedestal.opensavvy.dev/api-docs/
@Serializable data class Test1( @field:BsonId val a: NameStrategyProfile, )
Starting in KtMongo 0.25.0, the KtMongo '/' notation recognizes KMongo's @BsonId and KotlinX.Serialization's @SerialName when using the KMongo compatibility module.
Users can add support for their own annotations by overriding PropertyNameStrategy. Learn more β ktmongo.opensavvy.dev/api/-mongo-d...
We now provide a custom #Docker image specifically for compiling #GitLab CI pipelines in #Kotlin
gitlab-ci-kts.opensavvy.dev/tutorials/in...
val document = context().write(bob) val age: String = bobDoc() at BsonPath.parse("$.pets[1].age")
In KtMongo 0.25.0, the new experimental BsonPath class allows extracting #MongoDB documents using #JSONPath queries!
Currently only a subset of the JSONPath syntax is supported, more will be added in coming versions. Send us your feedback!
ktmongo.opensavvy.dev/api/-kotlin%...
Vite for Kotlin 0.7.0 is out!
You can now use #vite 8 in your #kotlin projects, with experimental WasmJS support and important bug fixes!
vite-kotlin.opensavvy.dev/news/2025/12...
val dokka by job { image("openjdk") script { gradlew.task("dokkaHtmlMultiModule") shell("mv build/dokka/htmlMultiModule documentation") } artifacts { include("documentation") exposeAs("Documentation") } }
Kotlin is a great language for scripting, and has much better support in IDEs.
Use loops, built-in plugins (showcased: the Gradle plugin) and quality-of-life goodies, like automatic shell color highlighting!
Tired of writing your #GitLab CI in YAML?
With gitlab-ci.main.kts 0.7.2, you can write your GitLab CI in #Kotlin!
gitlab-ci-kts.opensavvy.dev
Have you tried creating a Kotlin Multiplatform library module and discovered its src/xxxMain/resources files are not available in the downstream application modules?
Introducing the Kotlin Resource plugins 0.6.0 with Gradle 9 support and a brand new docs site!
kotlin-resources.opensavvy.dev
Code: test("My test") { log(12 + 5) { "Important intermediary result" } } Output: Β» Logged β17β Important intermediary result log(12 + 5) | 17
What if you could easily analyze intermediate values in your tests?
Learn how with Prepared and Power Assert β prepared.opensavvy.dev/api/-suite/o...
Prepared 2.2.0 is out!
Prepared is your favorite Kotlin test DSL: running on top of any framework, declare complex tests cases easily.
β’ Improved inner-test logging
β’ Kotest 6 support
β’ TestBalloon 0.7.1 support
Read the full changelog β prepared.opensavvy.dev/news/2025/11...
KtMongo 0.24.0 is out, with our new mascot, Mokodee!
This version contains new syntax sugar for $unset, and improvements to the documentation.
ktmongo.opensavvy.dev/news/2025/10...
Hey everyone!
This is the new account for OpenSavvy news.
Learn more about us at opensavvy.dev