Overload ambiguity fixes
### Server - Fixed overload ambiguity in `fail()` (!131, thanks @skyecodes!) - Remove spurious `@DslMarker` annotations (3b472dc1) ### Dependencies - Ktor 3.6.0 - NodeJS 24.21.0
Fixed whitespace in URLs
### Client - Fixed incorrect endpoint URL when whitespace is present (8ad1df1c, !126) ### Dependencies - Kotlin 2.4.10
QUERY HTTP method, Uuid type parameters, documentation improvements
### API - Added support for the new HTTP method, QUERY (!124) - Added support for `Uuid` type parameters (!127 by Simon Vergauwen) ### server-arrow-independent The module `:server-arrow-independent` has been removed. The Arrow library provides [an equivalent module](https://apidocs.arrow-kt.io/arrow-raise-ktor-server/index.html) that has more features (!121, !122). ### Documentation - Improved the documentation of the `:server` module (c95ba2b0, !123) - Improved the documentation of the `:server-arrow` module (c8891bca, !123) ### Dependencies - Arrow 2.2.3 (!125)
Spine reaches beta!
After three years of prototyping, it's time for Spine to take its flight. **Are you discovering Spine? [Start here!](https://spine.opensavvy.dev/)** With this release, Spine becomes Beta. While we have ideas for more features, what is already implemented is a solid ground to build your production projects with Ktor. We now enter the final feedback and bug-hunting phase, after which Spine will be promoted to Stable. ### Breaking changes Properties of `AnyEndpoint` have been changed from `KClass<*>` to `KType`. Most users do not need to interact with these properties directly, and thus are not impacted. If you are impacted, you can access the `KClass<*>` with `theKType.classifier as KClass<*>`. ### Documentation - Improvements to the Reference for modules `api`, `client-arrow` (1fba6765, e47f19f3) - Fixed incorrect links and other typos (4ad0efee, 6301482b, 42d6a172) ### Deployment - The Intel-based Apple targets have been removed, because they are not supported upstream anymore. (8fd8a14a) - The `server-arrow-independent` module has been marked as deprecated, because the Arrow library has [its own equivalent module](https://apidocs.arrow-kt.io/arrow-raise-ktor-server/index.html) (78f0a79a) ### Dependencies - Kotlin 2.4.0 - KotlinX.Coroutines 1.11.0 - Ktor 3.5.0 - Arrow 2.2.2.1 (optional)
Query parameters with multiple values
### API - Added `listParameters()` to access multiple values for a given query parameter (!94, thanks @skyecodes!)
Null query parameters fix, documentation improvements
### API - Fixed incorrect handling of explicitly `null` query parameters, which were interpreted as the `"null"` string (!91, thanks @skyecodes!). ### Documentation - Improved the documentation of the modules `:api` and `:client` (#12, !90).
Typed failures bug fixes
### Server (Arrow compatibility) - Fixed a type resolution ambiguity related to failures (!89, thanks @skyecodes!) ### Documentation - Added a link to the documentation site in the main README (#24, !87)
New documentation website, typesafe failures and more platforms
### API - Typesafe failure declaration (!51, !75, thanks @LelouBil!) - Support WasmJS (!78) - Support all native tier 2 and 3 targets (!78) ### Documentation - Create the documentation website https://spine.opensavvy.dev (!79) - Add all modules to the documentation website (!79) ### Dependencies - Kotlin 2.2.21 - Ktor 3.3.3 - Arrow 2.2.0 (optional)
New documentation website
### Documentation - Moved the documentation website to https://spine.opensavvy.dev (!65, !67) ### Dependencies - Kotlin 2.2.0
Ktor 3 and Arrow 2
### API - Added equals/hashCode/toString to Parameters classes (a39d5c0b, !53) ### Dependencies - KotlinX.Coroutines 1.10.2 - Ktor 3.1.3 - Arrow 2.1.2 - Prepared 2.0.4
Typesafety and documentation improvements
### API - Refactor Endpoint.Builder to AnyEndpoint.Builder for a more consistent API (f0f4753b, !36) - Resource.parent is not declared nullable anymore when it cannot be null (b1c950ee, !36) ### Documentation - Add documentation to all Endpoint and Resource types (33091ee0, 96155b66, !36) - Add module headers to :api and :client (9a932c42, !36) ### Dependencies - Kotlin 2.1.0
Client-side Arrow compatibility
### Client - New SpineResponse.body() method for Arrow compatibility ### Dependency upgrades - Ktor 2.3.11 (!24) - Arrow 1.2.4 (!24) - Prepared 1.2.0 (!24)
Kotlin 2.0.0-RC1 support
### Dependencies - Kotlin 2.0.0-RC1 (66672126)
Server-side type safety with Arrow
### Server - Introduce the 'respond' function to simplify results (#13, !17) ### Server (Arrow helpers) - Create helpers to fail server-side requests using the Raise DSL (#14, !18)
Publication fixes
### Build and deployment - Fix the publication of the -arrow modules (!15)
Module naming simplification, fullstack API declarations
In this release, we majorly restructured the project (#10, !14). Here is the mapping to the module names: - typed-shared → api - typed-server → server - typed-client → client - safe-shared is gone - safe-server → server-arrow - safe-client → client-arrow - spine-* are gone The demo is also removed. It will be added back later, see #11. ### Client - Create the idOf function to access path parameters (ad5f0bd8, #9, !11) - Simplify the usage of query paremeters (32922acb, !11) ### Tests - Added a fullstack test scenario (ce6ffa27, #6, !11) ### Build and deployment - Support for iosArm64, iosSimulatorArm64, iosX64 (d57f518c, !11) ### Dependencies - Kotlin 1.9.22 (128dfe13) - Ktor 2.3.8 (cde3139b) - KotlinX.Coroutines 1.8.0 (14146111)
Typed query parameters with default name and dynamic routes
### Typed - Add an example in the README (#7, !8) - Automatically name query parameters after the variable they are assigned to (#2, !4, by Youssef Shoaib) - Dynamic route / path parameters support (#8, !10) - Only allow declaring parameters inside parameter classes (#4, !12)
Client and server typed routing
### Typed (shared) - Better encapsulation of Endpoint type parameters (!2, !3) ### Typed (client) - Call a route declared in common code (#6, !7) ### Typed (server) - Implement a route declared in common code (#5, !6) ### Contributors Thanks to Youssef Shoaib, who were a massive help with figuring out how to hide the Endpoint class to ensure source-compatibility with future releases.