The Apache Fory team is pleased to announce the 1.0.0 release. This milestone release includes 84 PRs from 11 distinct contributors and turns the cross-language runtime into the default path across supported languages. See the Install page to get the libraries for your platform.
Highlights
Apache Fory 1.0.0 standardizes the cross-language serialization model. The unified xlang type system is now the default mode across languages, with compatible-mode reads, simplified field ordering, and better list/array compatibility. The release also adds decimal and bfloat16 support for xlang serialization.
The language runtimes continue to converge around the same schema and metadata model. Nested container and field codec support landed across Rust, C++, C#, Go, Dart, Python, and Swift. Kotlin gains xlang, KSP, and schema IDL support, while Scala adds schema IDL support and updated generated annotations.
This release also expands deployment coverage and performance work. Java gains Android serialization support, annotation processor support, schema typed row field accessors, and nested type-use serialization metadata. Dart typed-container fast paths and generated struct optimizations improve throughput, alongside refreshed benchmark plots.
Key Features:
- Unified xlang type system and default xlang mode: https://github.com/apache/fory/pull/3644, https://github.com/apache/fory/pull/3685
- Decimal and bfloat16 support for xlang serialization: https://github.com/apache/fory/pull/3599, https://github.com/apache/fory/pull/3605
- Nested container and field codec support: https://github.com/apache/fory/pull/3625, https://github.com/apache/fory/pull/3630, https://github.com/apache/fory/pull/3636, https://github.com/apache/fory/pull/3639, https://github.com/apache/fory/pull/3640, https://github.com/apache/fory/pull/3641, https://github.com/apache/fory/pull/3643
- Kotlin xlang, KSP, and schema IDL support: https://github.com/apache/fory/pull/3679, https://github.com/apache/fory/pull/3684
- Scala schema IDL support and generated annotation updates: https://github.com/apache/fory/pull/3681, https://github.com/apache/fory/pull/3682
- Android serialization and Java annotation processor support: https://github.com/apache/fory/pull/3667, https://github.com/apache/fory/pull/3670
- Xlang compatible-mode improvements: https://github.com/apache/fory/pull/3648, https://github.com/apache/fory/pull/3650, https://github.com/apache/fory/pull/3675
- Serialization performance improvements: https://github.com/apache/fory/pull/3609, https://github.com/apache/fory/pull/3653, https://github.com/apache/fory/pull/3656, https://github.com/apache/fory/pull/3661
- Java row accessors and nested type-use metadata: https://github.com/apache/fory/pull/3631, https://github.com/apache/fory/pull/3633
Features
- feat(ci): fix release for csharp and dart by @chaokunyang in https://github.com/apache/fory/pull/3582
- feat(rust): add configurable size guardrails by @ayush00git in https://github.com/apache/fory/pull/3579
- refactor(rust): move Fory configuration to builder by @chaokunyang in https://github.com/apache/fory/pull/3593
- feat(xlang): add decimal and align serializers for xlang by @chaokunyang in https://github.com/apache/fory/pull/3599
- refactor(dart): aligned dart internal implementation by @Geethapranay1 in https://github.com/apache/fory/pull/3601
- feat(xlang): add bfloat16 support by @chaokunyang in https://github.com/apache/fory/pull/3605
- feat(dart): support dart web platform by @chaokunyang in https://github.com/apache/fory/pull/3608
- perf(dart): typed-container write fast path with scan elimination by @yash-agarwa-l in https://github.com/apache/fory/pull/3609
- feat(swift): nested container override support for swift by @chaokunyang in https://github.com/apache/fory/pull/3625
- feat(java): add schema typed row fields accessor by @chaokunyang in https://github.com/apache/fory/pull/3631
- feat: add nested container codec for rust by @chaokunyang in https://github.com/apache/fory/pull/3630
- feat(java): support nested type-use serialization metadata by @chaokunyang in https://github.com/apache/fory/pull/3633
- refactor(cpp): remove abseil dependency by @chaokunyang in https://github.com/apache/fory/pull/3634
- feat(cpp): add nested field codec support by @chaokunyang in https://github.com/apache/fory/pull/3636
- feat(csharp): support nested container field codec by @chaokunyang in https://github.com/apache/fory/pull/3639
- feat(go): support nested field annotation type specs by @chaokunyang in https://github.com/apache/fory/pull/3640
- feat(dart): support nested container field codec for dart by @chaokunyang in https://github.com/apache/fory/pull/3641
- feat(python): support nested field schema encodings by @chaokunyang in https://github.com/apache/fory/pull/3643
- feat(xlang): unified xlang type system by @chaokunyang in https://github.com/apache/fory/pull/3644
- feat(xlang): add comprehensive read checks by @chaokunyang in https://github.com/apache/fory/pull/3647
- feat(xlang): use compatible for xlang by default by @chaokunyang in https://github.com/apache/fory/pull/3648
- feat(xlang): compatible read between list array field by @chaokunyang in https://github.com/apache/fory/pull/3650
- perf(dart): remove generated struct slot bridge by @chaokunyang in https://github.com/apache/fory/pull/3653
- perf: optimize serialization perf by @chaokunyang in https://github.com/apache/fory/pull/3656
- perf: update benchmark plots by @chaokunyang in https://github.com/apache/fory/pull/3661
- refactor(rust): use absolute path in generated Rust code by @BaldDemian in https://github.com/apache/fory/pull/3666
- feat: add android support by @chaokunyang in https://github.com/apache/fory/pull/3667
- feat(compiler): add helpers to generate unified gRPC service/method names by @BaldDemian in https://github.com/apache/fory/pull/3672
- feat(java): annotation processor for android serialization by @chaokunyang in https://github.com/apache/fory/pull/3670
- feat(xlang): simplify xlang field ordering by @chaokunyang in https://github.com/apache/fory/pull/3675
- feat(kotlin): add kotlin xlang and ksp support by @chaokunyang in https://github.com/apache/fory/pull/3679
- refactor(java): replace static serializer spi lookup by @chaokunyang in https://github.com/apache/fory/pull/3680
- feat(scala): add scala schema idl support by @chaokunyang in https://github.com/apache/fory/pull/3681
- feat(scala): update generated annotation by @chaokunyang in https://github.com/apache/fory/pull/3682
- feat(rust): make rust chrono optional by @chaokunyang in https://github.com/apache/fory/pull/3683
- feat(kotlin): add schema idl support to kotlin by @chaokunyang in https://github.com/apache/fory/pull/3684
- feat(xlang): use xlang as default mode for all languages by @chaokunyang in https://github.com/apache/fory/pull/3685
Bug Fixes
- fix(dart): resolve fory pub.dev score issues by @chaokunyang in https://github.com/apache/fory/pull/3585
- fix(dart): fix dart ci by @chaokunyang in https://github.com/apache/fory/pull/3586
- fix(dart): use getUint32 for correctly encoding u64 value by @ayush00git in https://github.com/apache/fory/pull/3592
- fix(c++): fix c++ duration serialization by @chaokunyang in https://github.com/apache/fory/pull/3598
- fix(javascript): align TypeMeta preamble constants with python/java/rust/go xlang bindings by @emrul in https://github.com/apache/fory/pull/3603
- fix(javascript): fix javascript schema idl tests by @chaokunyang in https://github.com/apache/fory/pull/3604
- fix(dart): added
>>>for correct logical right shift semantics in uint by @ayush00git in https://github.com/apache/fory/pull/3607 - fix(go): ensure physical buffer space for unsafe varint fast-paths by @ayush00git in https://github.com/apache/fory/pull/3613
- fix(go): add bound checking for refResolver and metaStringResolver reads by @ayush00git in https://github.com/apache/fory/pull/3615
- fix(go): added pre-allocation bounds checks for slices and strings by @ayush00git in https://github.com/apache/fory/pull/3618
- fix(go): added maxBinarySize limit to decimal deserialization by @ayush00git in https://github.com/apache/fory/pull/3623
- fix(go): add configurable fieldCount and fieldDepth guardrails by @ayush00git in https://github.com/apache/fory/pull/3620
- fix(java): honor record field encoding in generated decode by @mandrean in https://github.com/apache/fory/pull/3626
- fix(java): preserve externalizable containers in compatible mode by @mandrean in https://github.com/apache/fory/pull/3628
- fix(python): enforce more checks in read by @chaokunyang in https://github.com/apache/fory/pull/3632
- fix(xlang): fix xlang type system by @chaokunyang in https://github.com/apache/fory/pull/3646
- fix(java): use REPLACE_STUB_ID for unregistered writeReplace classes to prevent cross-JVM ClassNotFoundException by @wakilurislam in https://github.com/apache/fory/pull/3638
- fix(java): fix set view ref tracking by @chaokunyang in https://github.com/apache/fory/pull/3649
- fix(java): recover map declared serializers for compatible reads by @mandrean in https://github.com/apache/fory/pull/3654
- fix: include TypeMeta header bits in hash by @chaokunyang in https://github.com/apache/fory/pull/3659
- fix(java): serialize suppressed exceptions by @chaokunyang in https://github.com/apache/fory/pull/3663
- fix(javascript): preserve getTypeInfo in regenerated read serializer by @xhzq233 in https://github.com/apache/fory/pull/3669
- fix(java): validate subclass serializer layer counts by @chaokunyang in https://github.com/apache/fory/pull/3676
- fix(java): avoid instantiating abstract meta-share types by @chaokunyang in https://github.com/apache/fory/pull/3677
- fix: fix release script by @chaokunyang in https://github.com/apache/fory/pull/3687
Other Improvements
- chore: skip auto release for tag starts with go by @chaokunyang in https://github.com/apache/fory/pull/3584
- docs: add NuGet badge by @chaokunyang in https://github.com/apache/fory/pull/3587
- docs(java): update graalvm guide location by @chaokunyang in https://github.com/apache/fory/pull/3588
- docs: rename graalvm_support.md to graalvm-support.md by @chaokunyang in https://github.com/apache/fory/pull/3589
- chore(rust): refine varint read/write method name by @chaokunyang in https://github.com/apache/fory/pull/3590
- docs: move development guide to docs root by @chaokunyang in https://github.com/apache/fory/pull/3591
- chore(dart): add missing license headers by @chaokunyang in https://github.com/apache/fory/pull/3594
- chore(csharp): add more csharp and swift tests by @chaokunyang in https://github.com/apache/fory/pull/3597
- chore(dart): refine dart xlang serialization by @chaokunyang in https://github.com/apache/fory/pull/3596
- docs: add more agent harness rules by @chaokunyang in https://github.com/apache/fory/pull/3610
- chore(dart): remove stale dart note files by @chaokunyang in https://github.com/apache/fory/pull/3642
- chore(java): configure default Fory log level by @chaokunyang in https://github.com/apache/fory/pull/3657
- chore: clean up code and add compiler warning checks by @chaokunyang in https://github.com/apache/fory/pull/3660
- docs: tighten benchmark throughput plots by @chaokunyang in https://github.com/apache/fory/pull/3662
- docs: update readme by @chaokunyang in https://github.com/apache/fory/pull/3664
- docs: add README schema IDL example by @chaokunyang in https://github.com/apache/fory/pull/3665
- docs: update xlang/native serialization doc by @chaokunyang in https://github.com/apache/fory/pull/3686
New Contributors
- @emrul made their first contribution in https://github.com/apache/fory/pull/3603
- @wakilurislam made their first contribution in https://github.com/apache/fory/pull/3638
- @xhzq233 made their first contribution in https://github.com/apache/fory/pull/3669
Full Changelog: https://github.com/apache/fory/compare/v0.17.0...v1.0.0
