I'm a finalist at Golden Kodee Awards, the Kotlin Foundation community-recognition award!
Next step is KotlinConf 2026, Munich 👀
Latest Posts by OpenSavvy
Now *this* is the developer experience we envision
Have you?
Support us by voting for @ivcanet.bsky.social in the 'Online presence' category!
You can explore the before/after yourself in the KtMongo repository;
Previous version: ktmongo.opensavvy.dev
New version: opensavvy.gitlab.io/-/automation...
This version also greatly reduces the size of the generated documentation, by compacting information together.
2612 → 909 pages
1 GiB → 198 MiB
Before / after
Before / after
Here are a few examples in the KtMongo repo
Before / after
Dokka for MkDocs 0.6.0 is out, with big changes!
We now have a proper aggregator module, which fixes all the big issues.
The project thus graduates to beta!
dokka-mkdocs.opensavvy.dev/news/2026/03...
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!