This is an automated email from the ASF dual-hosted git repository. chaokunyang pushed a commit to branch release_0.17.0 in repository https://gitbox.apache.org/repos/asf/fory-site.git
commit 8ff820d2e6a974c746258631ae1f2a715e4addc8 Author: 慕白 <[email protected]> AuthorDate: Sun Apr 19 22:06:24 2026 +0800 0.17.0 release blog --- blog/2026-03-17-fory_0_16_0_release.md | 2 +- blog/2026-04-19-fory_0_17_0_release.md | 293 +++++++++++++++++++++ .../blog/fory_0_17_0_release/dart_throughput.png | Bin 0 -> 89092 bytes .../fory_0_17_0_release/javascript_throughput.png | Bin 0 -> 81947 bytes 4 files changed, 294 insertions(+), 1 deletion(-) diff --git a/blog/2026-03-17-fory_0_16_0_release.md b/blog/2026-03-17-fory_0_16_0_release.md index ffbcf2c67..6d4086ad0 100644 --- a/blog/2026-03-17-fory_0_16_0_release.md +++ b/blog/2026-03-17-fory_0_16_0_release.md @@ -5,7 +5,7 @@ authors: [chaokunyang] tags: [fory, c#, swift, c++, java, python, compiler] --- -The Apache Fory team is pleased to announce the 0.16.0 release. This is a major release that includes [91 PR](https://github.com/apache/fory/compare/v0.14.1...v0.15.0) from 17 distinct contributors. See the [Install](https://fory.apache.org/docs/start/install) Page to learn how to get the libraries for your platform. +The Apache Fory team is pleased to announce the 0.16.0 release. This is a major release that includes [91 PR](https://github.com/apache/fory/compare/v0.15.0...v0.16.0) from 17 distinct contributors. See the [Install](https://fory.apache.org/docs/start/install) Page to learn how to get the libraries for your platform. ## Highlights diff --git a/blog/2026-04-19-fory_0_17_0_release.md b/blog/2026-04-19-fory_0_17_0_release.md new file mode 100644 index 000000000..1078fbad3 --- /dev/null +++ b/blog/2026-04-19-fory_0_17_0_release.md @@ -0,0 +1,293 @@ +--- +slug: fory_0_17_0_release +title: Fory v0.17.0 Released +authors: [chaokunyang] +tags: [fory, c#, swift, c++, java, python, compiler] +--- + +The Apache Fory team is pleased to announce the 0.17.0 release. This is a major release that includes [71 PR](https://github.com/apache/fory/compare/v0.16.0...v0.17.0) from 19 distinct contributors. See the [Install](https://fory.apache.org/docs/start/install) Page to learn how to get the libraries for your platform. + +## JavaScript/NodeJS Serialization: First Release + +Apache Fory 0.17.0 marks the first release with official JavaScript/NodeJS +documentation, benchmark coverage, and TypeScript-friendly IDL code generation. +The JavaScript runtime is built for modern Node.js services and TypeScript +codebases, while preserving Fory's cross-language object model, schema-driven +APIs, and optional reference tracking. + +**Key capabilities:** + +* High-performance serialization for JavaScript and TypeScript objects in Node.js +* Cross-language compatibility with Java, Python, Go, Rust, C#, Swift, and Dart +* Schema-driven APIs via `Type.*` builders and TypeScript decorators +* Optional reference tracking for shared and circular object graphs +* Compatible mode for schema evolution +* Configurable depth, binary size, and collection size guardrails +* JavaScript/TypeScript target support in the Fory IDL/compiler workflow +* Optional `@apache-fory/hps` fast string path for Node.js 20+ + +### Quick Start + +```ts +import Fory, { Type } from "@apache-fory/core"; + +const userType = Type.struct( + { typeName: "example.user" }, + { + id: Type.int64(), + name: Type.string(), + age: Type.int32(), + }, +); + +const fory = new Fory(); +const { serialize, deserialize } = fory.register(userType); + +const bytes = serialize({ + id: 1n, + name: "Alice", + age: 30, +}); + +const user = deserialize(bytes); +console.log(user); +``` + +* JavaScript guide: https://fory.apache.org/docs/guide/javascript/ +* Compiler docs: https://fory.apache.org/docs/compiler/ + +### JavaScript Benchmarks + +<img src="/img/blog/fory_0_17_0_release/javascript_throughput.png" width="90%"/> + +Below are throughput results (ops/sec; higher is better) comparing Fory with +Protocol Buffers and JSON across representative data structures. + +| Datatype | Operation | Fory TPS | Protobuf TPS | JSON TPS | Fastest | +| ---------------- | ----------- | --------- | ------------ | --------- | ------- | +| Struct | Serialize | 8,453,950 | 1,903,706 | 3,058,232 | fory | +| Struct | Deserialize | 9,705,287 | 8,233,664 | 3,860,538 | fory | +| Sample | Serialize | 1,498,391 | 422,620 | 744,790 | fory | +| Sample | Deserialize | 1,918,162 | 819,010 | 762,048 | fory | +| MediaContent | Serialize | 1,293,157 | 729,497 | 1,299,908 | json | +| MediaContent | Deserialize | 1,638,086 | 1,209,140 | 921,191 | fory | +| StructList | Serialize | 3,928,325 | 495,648 | 891,810 | fory | +| StructList | Deserialize | 3,264,827 | 1,529,744 | 986,144 | fory | +| SampleList | Serialize | 355,581 | 92,741 | 163,120 | fory | +| SampleList | Deserialize | 424,916 | 163,253 | 162,520 | fory | +| MediaContentList | Serialize | 286,053 | 148,977 | 282,445 | fory | +| MediaContentList | Deserialize | 376,826 | 244,622 | 190,155 | fory | + +Serialized data sizes (bytes): + +| Datatype | Fory | Protobuf | JSON | +| ---------------- | ---- | -------- | ---- | +| Struct | 58 | 61 | 103 | +| Sample | 446 | 377 | 724 | +| MediaContent | 391 | 307 | 596 | +| StructList | 184 | 315 | 537 | +| SampleList | 1980 | 1900 | 3642 | +| MediaContentList | 1665 | 1550 | 3009 | + +Benchmark details: https://github.com/apache/fory/tree/v0.17.0/benchmarks/javascript + +## Dart Serialization: First Release + +Apache Fory 0.17.0 also marks the first release with official Dart +documentation, benchmark coverage, a rebuilt runtime, and Dart IDL support. +The Dart implementation focuses on generated serializers, stable +cross-language type identity, schema evolution, and predictable APIs for +service workloads. + +**Key capabilities:** + +* High-performance Dart serialization with generated code instead of reflection +* Cross-language compatibility with Java, Python, Go, Rust, C#, Swift, and JavaScript +* `@ForyStruct` and `@ForyField` annotations with `build_runner` code generation +* Compatible mode for schema evolution across versions +* Optional reference tracking for shared and circular object graphs +* Manual `Serializer<T>` extension points for advanced or custom types +* Dart target support in the Fory IDL/compiler workflow + +### Quick Start + +```dart +import 'package:fory/fory.dart'; + +part 'person.fory.dart'; + +enum Color { + red, + blue, +} + +@ForyStruct() +class Person { + Person(); + + String name = ''; + Int32 age = Int32(0); + Color favoriteColor = Color.red; +} + +void main() { + final fory = Fory(); + PersonFory.register( + fory, + Color, + namespace: 'example', + typeName: 'Color', + ); + PersonFory.register( + fory, + Person, + namespace: 'example', + typeName: 'Person', + ); + + final bytes = fory.serialize(Person() + ..name = 'Ada' + ..age = Int32(36) + ..favoriteColor = Color.blue); + final roundTrip = fory.deserialize<Person>(bytes); + print(roundTrip.name); +} +``` + +* Dart guide: https://fory.apache.org/docs/guide/dart/ +* Compiler docs: https://fory.apache.org/docs/compiler/ + +### Dart Benchmarks + +<img src="/img/blog/fory_0_17_0_release/dart_throughput.png" width="90%"/> + +Below are throughput results (ops/sec; higher is better) comparing Fory with +Protocol Buffers across representative data structures. + +| Datatype | Operation | Fory TPS | Protobuf TPS | Fastest | +| ---------------- | ----------- | --------: | -----------: | ------------ | +| Struct | Serialize | 3,989,432 | 1,884,653 | fory (2.12x) | +| Struct | Deserialize | 5,828,197 | 4,199,680 | fory (1.39x) | +| Sample | Serialize | 1,649,722 | 500,167 | fory (3.30x) | +| Sample | Deserialize | 2,060,113 | 785,109 | fory (2.62x) | +| MediaContent | Serialize | 800,876 | 391,235 | fory (2.05x) | +| MediaContent | Deserialize | 1,315,115 | 683,533 | fory (1.92x) | +| StructList | Serialize | 1,456,396 | 367,506 | fory (3.96x) | +| StructList | Deserialize | 1,921,006 | 645,958 | fory (2.97x) | +| SampleList | Serialize | 411,144 | 48,508 | fory (8.48x) | +| SampleList | Deserialize | 464,273 | 103,558 | fory (4.48x) | +| MediaContentList | Serialize | 186,870 | 77,029 | fory (2.43x) | +| MediaContentList | Deserialize | 330,293 | 128,215 | fory (2.58x) | + +Serialized data sizes (bytes): + +| Datatype | Fory | Protobuf | +| ---------------- | ---: | -------: | +| Struct | 58 | 61 | +| Sample | 446 | 377 | +| MediaContent | 365 | 307 | +| StructList | 184 | 315 | +| SampleList | 1980 | 1900 | +| MediaContentList | 1535 | 1550 | + +Benchmark details: https://github.com/apache/fory/tree/v0.17.0/benchmarks/dart + +## Highlights +* refactor(java): refactor fory java serialization api by @chaokunyang in https://github.com/apache/fory/pull/3537 +* refactor(python): refactor python serialization api by @chaokunyang in https://github.com/apache/fory/pull/3543 +* feat(java): reduce java serializer memory usage by share across Fory instances by @chaokunyang in https://github.com/apache/fory/pull/3546 +* feat(java): remove guava dependency from fory java by @chaokunyang in https://github.com/apache/fory/pull/3557 +* refactor(dart): new dart implementation by @chaokunyang in https://github.com/apache/fory/pull/3551 + +## Features +* refactor(javascript): rename apache-fory/fory to apache-fory/core by @chaokunyang in https://github.com/apache/fory/pull/3489 +* feat(ci): add bazel downloads retry by @BaldDemian in https://github.com/apache/fory/pull/3492 +* feat(go): add configurable size guardrails by @ayush00git in https://github.com/apache/fory/pull/3475 +* refactor(ci): install Bazel using setup-bazel by @BaldDemian in https://github.com/apache/fory/pull/3494 +* perf(rust): Rewrite Rust benchmarks around shared bench.proto data by @chaokunyang in https://github.com/apache/fory/pull/3497 +* feat(cpp): add float16 to c++ by @UninspiredCarrot in https://github.com/apache/fory/pull/3487 +* feat(java): add float support by @mengnankkkk in https://github.com/apache/fory/pull/3254 +* feat(java): support java virtual threads by @chaokunyang in https://github.com/apache/fory/pull/3522 +* perf(java): optimize thread safe fory for java by @chaokunyang in https://github.com/apache/fory/pull/3529 +* test(cpp): optimize float16 sign symmetry test for ASAN by @Geethapranay1 in https://github.com/apache/fory/pull/3531 +* feat(java): add dedicated exception serializers by @chaokunyang in https://github.com/apache/fory/pull/3536 +* refactor(java): refactor fory java serialization api by @chaokunyang in https://github.com/apache/fory/pull/3537 +* refactor(python): refactor python serialization api by @chaokunyang in https://github.com/apache/fory/pull/3543 +* feat(dart): Introduce id based enum serialization by @yash-agarwa-l in https://github.com/apache/fory/pull/3482 +* feat(javascript): add configurable size guardrails by @ayush00git in https://github.com/apache/fory/pull/3539 +* feat(java): reduce java serializer memory usage by share across Fory instances by @chaokunyang in https://github.com/apache/fory/pull/3546 +* refactor(javascript): move serialization runtime state into contexts by @chaokunyang in https://github.com/apache/fory/pull/3549 +* refactor(swift): refine swift api by @chaokunyang in https://github.com/apache/fory/pull/3554 +* feat(xlang): refine xlang api and enum serialization by @chaokunyang in https://github.com/apache/fory/pull/3555 +* feat(java): remove guava dependency from fory java by @chaokunyang in https://github.com/apache/fory/pull/3557 +* refactor(dart): new dart implementation by @chaokunyang in https://github.com/apache/fory/pull/3551 +* feat(compiler): Add JavaScript/TypeScript IDL code generation by @miantalha45 in https://github.com/apache/fory/pull/3394 +* perf(javascript): add javascript benchmark by @chaokunyang in https://github.com/apache/fory/pull/3562 +* perf(dart): optimize struct deserialize with direct dispatch codegen by @yash-agarwa-l in https://github.com/apache/fory/pull/3563 +* feat(dart): add dart IDL support by @chaokunyang in https://github.com/apache/fory/pull/3571 +* feat(python): fix python struct xlang ref track error by @chaokunyang in https://github.com/apache/fory/pull/3574 +* feat: make generate enum use id for wire format by @chaokunyang in https://github.com/apache/fory/pull/3576 + + +## Bug Fix +* fix(java): Restore compact codec fixed width optimizations by @stevenschlansker in https://github.com/apache/fory/pull/3478 +* fix(rust): handle panics from fuzz-found edge cases by @utafrali in https://github.com/apache/fory/pull/3481 +* fix(rust): add error handling logic for std duration; add support for chrono duration by @BaldDemian in https://github.com/apache/fory/pull/3490 +* fix(compiler): validate rpc request/response types by @retryoos in https://github.com/apache/fory/pull/3493 +* fix(c++): fix misaligned address access errors detected by UBSan in buffer.h by @BaldDemian in https://github.com/apache/fory/pull/3479 +* fix(java): finalize codegen config hash on first use by @chaokunyang in https://github.com/apache/fory/pull/3495 +* fix(rust): fix several panics detected by cargo-fuzz by @BaldDemian in https://github.com/apache/fory/pull/3483 +* fix(java): handle private final map codegen by @chaokunyang in https://github.com/apache/fory/pull/3504 +* fix(compiler): repair broken service example and add regression coverage by @VikingDeng in https://github.com/apache/fory/pull/3505 +* fix(rust): deep clone TypeMeta to prevent UB in concurrent scenarios by @BaldDemian in https://github.com/apache/fory/pull/3511 +* fix(compiler): fix failed tests in compiler; add compiler CI by @BaldDemian in https://github.com/apache/fory/pull/3516 +* fix(compiler): allow qualified nested types in FDL rpc signatures by @VikingDeng in https://github.com/apache/fory/pull/3518 +* fix(java): preserve ConcurrentSkipListSet comparator on copy by @mandrean in https://github.com/apache/fory/pull/3520 +* test(compiler): add IR validation and codegen tests for gRPC service support by @darius024 in https://github.com/apache/fory/pull/3528 +* fix(java): Correct resolution of dependent/nested serializers in GraalVM by @rakow in https://github.com/apache/fory/pull/3532 +* fix(java): fix objectstream serializer async jit and graalvm support by @chaokunyang in https://github.com/apache/fory/pull/3534 +* ci: fix Bazel cache paths for C++ workflows by @chaokunyang in https://github.com/apache/fory/pull/3535 +* fix(python): fix wrong calling orders in visit_other by @BaldDemian in https://github.com/apache/fory/pull/3542 +* fix(js): corrected the float64 array size by @ayush00git in https://github.com/apache/fory/pull/3541 +* fix(java): configure type checker during build by @chaokunyang in https://github.com/apache/fory/pull/3550 +* fix(java): auto-select child serializers for sorted containers by @chaokunyang in https://github.com/apache/fory/pull/3552 +* fix(java): support skip optional sql serializers for java11+ by @chaokunyang in https://github.com/apache/fory/pull/3553 +* fix(rust): apply consistent pascalcase naming for nested types by @utafrali in https://github.com/apache/fory/pull/3548 +* fix(javascript): fix flaky javascript idl tests by @chaokunyang in https://github.com/apache/fory/pull/3565 +* fix(swift): fix swift generated code compile warnings by @chaokunyang in https://github.com/apache/fory/pull/3566 +* fix(java): add test for previous uncaught regression. by @PiotrDuz in https://github.com/apache/fory/pull/3573 + +## Other Improvements +* chore(java): Update Spotless and Checkstyle to allow building with JDK25 by @stevenschlansker in https://github.com/apache/fory/pull/3476 +* chore(java): Clean up Javadoc warnings, and fail the build if any new ones are introduced by @stevenschlansker in https://github.com/apache/fory/pull/3477 +* chore: bump version to 0.16.0 by @chaokunyang in https://github.com/apache/fory/pull/3488 +* docs: add python benchmark result to readme by @chaokunyang in https://github.com/apache/fory/pull/3496 +* docs: fix benchmark plots by @chaokunyang in https://github.com/apache/fory/pull/3498 +* docs: add fory code review skill by @chaokunyang in https://github.com/apache/fory/pull/3500 +* chore: adjust skills softlinks by @chaokunyang in https://github.com/apache/fory/pull/3501 +* chore(cpp): configure CI to extract and execute C++ code from Markdo… by @Tyooughtul in https://github.com/apache/fory/pull/3381 +* docs: improve comments in Java generator by @codewithtarun2005 in https://github.com/apache/fory/pull/3507 +* docs: refactor agents.md to reduce token usage by @chaokunyang in https://github.com/apache/fory/pull/3538 +* docs: add ai-review policy by @chaokunyang in https://github.com/apache/fory/pull/3545 +* chore: Bump org.apache.logging.log4j:log4j-core from 2.25.3 to 2.25.4 in /java/fory-test-core by @dependabot[bot] in https://github.com/apache/fory/pull/3556 +* chore(javascript): rename ref tracking to ref by @chaokunyang in https://github.com/apache/fory/pull/3559 +* docs(dart): add dart docs by @chaokunyang in https://github.com/apache/fory/pull/3560 +* docs(javascript): add javascript docs by @chaokunyang in https://github.com/apache/fory/pull/3561 +* docs: refine dart and javascript docs by @chaokunyang in https://github.com/apache/fory/pull/3567 +* docs(dart): update dart benchmark docs by @yash-agarwa-l in https://github.com/apache/fory/pull/3568 +* docs: update readme by @chaokunyang in https://github.com/apache/fory/pull/3575 + +## New Contributors +* @utafrali made their first contribution in https://github.com/apache/fory/pull/3481 +* @BaldDemian made their first contribution in https://github.com/apache/fory/pull/3490 +* @retryoos made their first contribution in https://github.com/apache/fory/pull/3493 +* @Tyooughtul made their first contribution in https://github.com/apache/fory/pull/3381 +* @UninspiredCarrot made their first contribution in https://github.com/apache/fory/pull/3487 +* @VikingDeng made their first contribution in https://github.com/apache/fory/pull/3505 +* @codewithtarun2005 made their first contribution in https://github.com/apache/fory/pull/3507 +* @darius024 made their first contribution in https://github.com/apache/fory/pull/3528 +* @rakow made their first contribution in https://github.com/apache/fory/pull/3532 +* @PiotrDuz made their first contribution in https://github.com/apache/fory/pull/3573 + + +**Full Changelog**: https://github.com/apache/fory/compare/v0.16.0...v0.17.0 diff --git a/static/img/blog/fory_0_17_0_release/dart_throughput.png b/static/img/blog/fory_0_17_0_release/dart_throughput.png new file mode 100644 index 000000000..f0c4d91d8 Binary files /dev/null and b/static/img/blog/fory_0_17_0_release/dart_throughput.png differ diff --git a/static/img/blog/fory_0_17_0_release/javascript_throughput.png b/static/img/blog/fory_0_17_0_release/javascript_throughput.png new file mode 100644 index 000000000..fffd41c47 Binary files /dev/null and b/static/img/blog/fory_0_17_0_release/javascript_throughput.png differ --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
