This release is based on Kotlin 2.4.10 and contains all of the changes from 1.12.0-RC.
Additionally, it includes a fix removing unnecessary leading whitespaces from Proguard rules (#3270),
and two changes stabilizing kotlin.uuid.Uuid serializer (#3263) and kotlin.time.Instant serializers (#3261).
For your convenience, the changelog for 1.12.0-RC is duplicated below:
API stabilization and deprecations
A big portion of the Json and Core APIs has been stabilized. Most important ones include:
@KeepGeneratedSerializer and @SerialInfo annotations, JsonNamingStrategy, and ContextualSerializer.
Additionally, various descriptor builders such as listDescriptor and JsonElementBuilder's addAll functions are also
stable and can be freely used. There is also one deprecation: ChunkedDecoder interface. Since there is no demand for
it, we plan to remove it in the future. See details in the #3238, #3239, and #3216.
Also, kotlin.time.Instant and kotlin.uuid.Uuid serializers are no longer annotated with experimental annotations
from the Kotlin standard library (see #3261 and #3263)
Performance improvements
We also improved performance in various areas. ASCII-specific parser (#3225) brings performance of decoding from Okio and
kotlinx-io sources closer to decoding performance from String. #3220 makes decoding significantly faster in case JsonElement present in your serializable classes.
And #3248 should bring overall performance improvements (up to 30%) on large strings.
Exceptions rework
We continue to improve exception handling in Json encoders and decoders.
#3235 makes a big change around custom serializers and
@Serializable classes constructors: from now on, every exception thrown during deserialization is wrapped by decoder into a JsonException.
This way, it is more predictable to write a catch and it is easier to understand what went wrong: JsonDecodingException also includes context information such as Json path and input.
Besides that, #3246 limits maximum nesting depth of Json document, so you will get a proper JsonDecodingException instead of a random stack overflow error.
CBOR improvements
CBOR format also gets many improvements in this release. The most important one is memory optimization for
definitely-sized collections (#3191, #3192).
The others include:
- Encode unsigned integer types as positive integers (#3194) (thanks to Eyüp Can Akman)
- Correctly decode CborLabel values (#3195)
- Include actual tag info into CborDecodingException (#3197)
Protobuf improvements
Protocol buffers format received a big new feature: support for unknown fields. Using a new ProtoUnknownFieldHolder
class, you can now decode and store unknown fields in Protobuf messages to retransmit them back later. See documentation
updates and #2860 for details.
Big thanks to xzk for theirs contributions: this one and the bug with oneof default value (#3147).
We've also fixed Protobuf schema generation for inlined value classes (#3209).
Other improvements and bugfixes
- Set Deprecated (HIDDEN) to setters in JsonConfiguration
- Add Json nesting depth calculation during parsing (#3246)
- JsonElementBuilders: mark all (add|put)Json (Object|Array) functions as inline (#3242) (thanks to Miha-x64)
- Fix Polymorphic Deserialization Error with Subclass using JsonTransformingSerializer (#3139) (thanks to YongJun Jung)
- Align collections' SerialDescriptors with the contract (#3199)
- Remove leading whitespace from Proguard rules (#3270) (thanks to Chris Povirk)