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!
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...