You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@fory.apache.org by ch...@apache.org on 2026/06/16 15:18:07 UTC

(fory-site) branch main updated: Release fory 1.2.0 (#470)

This is an automated email from the ASF dual-hosted git repository.

chaokunyang pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/fory-site.git


The following commit(s) were added to refs/heads/main by this push:
     new 9db0b706c3 Release fory 1.2.0 (#470)
9db0b706c3 is described below

commit 9db0b706c3b8d49df838776587a49e876e64a121
Author: Shawn Yang <sh...@gmail.com>
AuthorDate: Tue Jun 16 20:48:03 2026 +0530

    Release fory 1.2.0 (#470)
---
 blog/2026-06-16-fory_1_2_0_release.md              |  378 ++++
 docs/guide/java/grpc-support.md                    |  170 +-
 docs/guide/javascript/grpc-support.md              |   29 +
 docs/guide/kotlin/grpc-support.md                  |  127 +-
 docs/guide/python/grpc-support.md                  |   64 +-
 docs/guide/rust/grpc-support.md                    |  115 +-
 docs/start/install.md                              |   32 +-
 docusaurus.config.ts                               |    2 +-
 .../version-1.2.0/.keep                            |    0
 .../2026-06-16-fory_1_2_0_release.md               |  338 ++++
 .../current/compiler/compiler-guide.md             |    4 +-
 .../current/guide/cpp/index.md                     |    8 +-
 .../current/guide/csharp/grpc-support.md           |  130 ++
 .../current/guide/csharp/index.md                  |    2 +-
 .../current/guide/dart/index.md                    |    2 +-
 .../current/guide/go/grpc-support.md               |  195 ++
 .../current/guide/java/compression.md              |    2 +-
 .../current/guide/java/grpc-support.md             |  383 ++++
 .../current}/guide/javascript/grpc-support.md      |  120 +-
 .../current/guide/kotlin/grpc-support.md           |  257 +++
 .../current/guide/kotlin/index.md                  |    4 +-
 .../current/guide/python/grpc-support.md           |  224 +++
 .../current/guide/rust/basic-serialization.md      |    2 +-
 .../current/guide/rust/grpc-support.md             |  311 ++++
 .../current/guide/rust/index.md                    |    2 +-
 .../current/guide/scala/grpc-support.md            |  169 ++
 .../current/guide/scala/index.md                   |    2 +-
 .../current/guide/xlang/getting-started.md         |   16 +-
 .../current/start/install.md                       |   32 +-
 .../version-1.2.0.json                             |   26 +
 .../version-1.2.0/benchmarks/cpp/README.md         |   78 +
 .../version-1.2.0/benchmarks/cpp/throughput.png    |  Bin 0 -> 103838 bytes
 .../version-1.2.0/benchmarks/csharp/README.md      |   89 +
 .../version-1.2.0/benchmarks/csharp/throughput.png |  Bin 0 -> 108852 bytes
 .../version-1.2.0/benchmarks/dart/README.md        |   49 +
 .../version-1.2.0/benchmarks/dart/throughput.png   |  Bin 0 -> 106606 bytes
 .../version-1.2.0/benchmarks/go/README.md          |   58 +
 .../benchmarks/go/benchmark_results.txt            |  326 ++++
 .../benchmarks/go/serialized_sizes.txt             |   27 +
 .../version-1.2.0/benchmarks/go/throughput.png     |  Bin 0 -> 106797 bytes
 .../version-1.2.0/benchmarks/java/README.md        |  239 +++
 .../java/data/jmh-jdk-11-deserialization.csv       |  153 ++
 .../java/data/jmh-jdk-11-serialization.csv         |  153 ++
 .../benchmarks/java/data/jmh-jdk-11-zerocopy.csv   |   73 +
 .../java/java_heap_deserialize_compatible.png      |  Bin 0 -> 91290 bytes
 .../java/java_heap_deserialize_consistent.png      |  Bin 0 -> 102335 bytes
 .../java/java_heap_serialize_compatible.png        |  Bin 0 -> 100843 bytes
 .../java/java_heap_serialize_consistent.png        |  Bin 0 -> 100648 bytes
 .../java/java_offheap_deserialize_compatible.png   |  Bin 0 -> 96677 bytes
 .../java/java_offheap_deserialize_consistent.png   |  Bin 0 -> 101898 bytes
 .../java/java_offheap_serialize_compatible.png     |  Bin 0 -> 109379 bytes
 .../java/java_offheap_serialize_consistent.png     |  Bin 0 -> 110476 bytes
 .../java/java_repo_deserialization_throughput.png  |  Bin 0 -> 105680 bytes
 .../java/java_repo_serialization_throughput.png    |  Bin 0 -> 113741 bytes
 .../benchmarks/java/java_zero_copy_deserialize.png |  Bin 0 -> 90075 bytes
 .../benchmarks/java/java_zero_copy_serialize.png   |  Bin 0 -> 86235 bytes
 .../version-1.2.0/benchmarks/java/throughput.png   |  Bin 0 -> 107433 bytes
 .../version-1.2.0/benchmarks/javascript/README.md  |   82 +
 .../benchmarks/javascript/throughput.png           |  Bin 0 -> 108900 bytes
 .../version-1.2.0/benchmarks/python/README.md      |   87 +
 .../version-1.2.0/benchmarks/python/throughput.png |  Bin 0 -> 109981 bytes
 .../version-1.2.0/benchmarks/rust/README.md        |   77 +
 .../version-1.2.0/benchmarks/rust/throughput.png   |  Bin 0 -> 102562 bytes
 .../version-1.2.0/benchmarks/swift/README.md       |   46 +
 .../version-1.2.0/benchmarks/swift/throughput.png  |  Bin 0 -> 107942 bytes
 .../version-1.2.0/community/DEVELOPMENT.md         |  146 ++
 .../version-1.2.0/community/community.md           |   85 +
 .../community/how_to_join_community.md             |  108 ++
 .../version-1.2.0/community/how_to_release.md      |  449 +++++
 .../version-1.2.0/community/how_to_verify.md       |  119 ++
 .../version-1.2.0/compiler/_category_.json         |    6 +
 .../compiler/compiler-guide.md                     |    4 +-
 .../version-1.2.0/compiler/flatbuffers-idl.md      |  185 ++
 .../version-1.2.0/compiler/generated-code.md       | 1037 +++++++++++
 .../version-1.2.0/compiler/index.md                |  216 +++
 .../version-1.2.0/compiler/protobuf-idl.md         |  324 ++++
 .../version-1.2.0/compiler/schema-idl.md           |  899 ++++++++++
 .../version-1.2.0/guide/_category_.json            |    1 +
 .../version-1.2.0/guide/cpp/_category_.json        |    6 +
 .../version-1.2.0/guide/cpp/basic-serialization.md |  238 +++
 .../version-1.2.0/guide/cpp/configuration.md       |  189 ++
 .../version-1.2.0/guide/cpp/custom-serializers.md  |  371 ++++
 .../{current => version-1.2.0}/guide/cpp/index.md  |    8 +-
 .../guide/cpp/native-serialization.md              |  194 ++
 .../version-1.2.0/guide/cpp/polymorphism.md        |  480 +++++
 .../version-1.2.0/guide/cpp/row-format.md          |  516 ++++++
 .../version-1.2.0/guide/cpp/schema-evolution.md    |  404 +++++
 .../version-1.2.0/guide/cpp/schema-metadata.md     |  191 ++
 .../version-1.2.0/guide/cpp/supported-types.md     |  277 +++
 .../version-1.2.0/guide/cpp/type-registration.md   |  225 +++
 .../version-1.2.0/guide/cpp/xlang-serialization.md |  271 +++
 .../version-1.2.0/guide/csharp/_category_.json     |    6 +
 .../guide/csharp/basic-serialization.md            |  131 ++
 .../version-1.2.0/guide/csharp/configuration.md    |  124 ++
 .../guide/csharp/custom-serializers.md             |   84 +
 .../version-1.2.0/guide/csharp/grpc-support.md     |  130 ++
 .../guide/csharp/index.md                          |    2 +-
 .../version-1.2.0/guide/csharp/references.md       |   72 +
 .../version-1.2.0/guide/csharp/schema-evolution.md |   90 +
 .../version-1.2.0/guide/csharp/schema-metadata.md  |   93 +
 .../version-1.2.0/guide/csharp/supported-types.md  |   97 +
 .../version-1.2.0/guide/csharp/thread-safety.md    |   73 +
 .../version-1.2.0/guide/csharp/troubleshooting.md  |   92 +
 .../guide/csharp/type-registration.md              |   82 +
 .../guide/csharp/xlang-serialization.md            |  105 ++
 .../version-1.2.0/guide/dart/_category_.json       |    6 +
 .../guide/dart/basic-serialization.md              |  144 ++
 .../version-1.2.0/guide/dart/code-generation.md    |  113 ++
 .../version-1.2.0/guide/dart/configuration.md      |  121 ++
 .../version-1.2.0/guide/dart/custom-serializers.md |  139 ++
 .../{current => version-1.2.0}/guide/dart/index.md |    2 +-
 .../version-1.2.0/guide/dart/schema-evolution.md   |   92 +
 .../version-1.2.0/guide/dart/schema-metadata.md    |  138 ++
 .../version-1.2.0/guide/dart/supported-types.md    |  102 ++
 .../version-1.2.0/guide/dart/troubleshooting.md    |  103 ++
 .../version-1.2.0/guide/dart/type-registration.md  |   98 ++
 .../guide/dart/web-platform-support.md             |  189 ++
 .../guide/dart/xlang-serialization.md              |  193 ++
 .../version-1.2.0/guide/go/_category_.json         |    6 +
 .../version-1.2.0/guide/go/basic-serialization.md  |  404 +++++
 .../version-1.2.0/guide/go/codegen.md              |  430 +++++
 .../version-1.2.0/guide/go/configuration.md        |  339 ++++
 .../version-1.2.0/guide/go/custom-serializers.md   |  286 +++
 .../version-1.2.0/guide/go/grpc-support.md         |  195 ++
 .../version-1.2.0/guide/go/index.md                |  155 ++
 .../version-1.2.0/guide/go/native-serialization.md |  203 +++
 .../version-1.2.0/guide/go/references.md           |  356 ++++
 .../version-1.2.0/guide/go/schema-evolution.md     |  363 ++++
 .../version-1.2.0/guide/go/schema-metadata.md      |  391 ++++
 .../version-1.2.0/guide/go/supported-types.md      |  371 ++++
 .../version-1.2.0/guide/go/thread-safety.md        |  347 ++++
 .../version-1.2.0/guide/go/troubleshooting.md      |  449 +++++
 .../version-1.2.0/guide/go/type-registration.md    |  260 +++
 .../version-1.2.0/guide/go/xlang-serialization.md  |  280 +++
 .../version-1.2.0/guide/java/_category_.json       |    6 +
 .../version-1.2.0/guide/java/advanced-features.md  |  208 +++
 .../version-1.2.0/guide/java/android-support.md    |  119 ++
 .../guide/java/basic-serialization.md              |  137 ++
 .../guide/java/compression.md                      |    2 +-
 .../version-1.2.0/guide/java/configuration.md      |   79 +
 .../version-1.2.0/guide/java/custom-serializers.md |  220 +++
 .../version-1.2.0/guide/java/graalvm-support.md    |  321 ++++
 .../version-1.2.0/guide/java/grpc-support.md       |  383 ++++
 .../version-1.2.0/guide/java/index.md              |  205 +++
 .../guide/java/native-serialization.md             |  350 ++++
 .../version-1.2.0/guide/java/object-copy.md        |  356 ++++
 .../version-1.2.0/guide/java/row-format.md         |  183 ++
 .../version-1.2.0/guide/java/schema-evolution.md   |  213 +++
 .../version-1.2.0/guide/java/schema-metadata.md    |  701 ++++++++
 .../guide/java/static-generated-serializers.md     |  143 ++
 .../version-1.2.0/guide/java/troubleshooting.md    |  203 +++
 .../version-1.2.0/guide/java/type-registration.md  |  113 ++
 .../version-1.2.0/guide/java/virtual-threads.md    |  114 ++
 .../guide/java/xlang-serialization.md              |  231 +++
 .../version-1.2.0/guide/javascript/_category_.json |    6 +
 .../guide/javascript/basic-serialization.md        |  219 +++
 .../guide/javascript/configuration.md              |  107 ++
 .../guide/javascript/grpc-support.md               |  120 +-
 .../version-1.2.0/guide/javascript/index.md        |  141 ++
 .../version-1.2.0/guide/javascript/references.md   |  111 ++
 .../guide/javascript/schema-evolution.md           |   99 ++
 .../guide/javascript/schema-metadata.md            |  156 ++
 .../guide/javascript/supported-types.md            |  177 ++
 .../guide/javascript/troubleshooting.md            |  105 ++
 .../guide/javascript/type-registration.md          |  200 +++
 .../guide/javascript/xlang-serialization.md        |  128 ++
 .../version-1.2.0/guide/kotlin/_category_.json     |    6 +
 .../version-1.2.0/guide/kotlin/android-support.md  |  110 ++
 .../version-1.2.0/guide/kotlin/configuration.md    |  116 ++
 .../version-1.2.0/guide/kotlin/default-values.md   |  137 ++
 .../version-1.2.0/guide/kotlin/grpc-support.md     |  257 +++
 .../guide/kotlin/index.md                          |    4 +-
 .../version-1.2.0/guide/kotlin/schema-metadata.md  |  122 ++
 .../guide/kotlin/static-generated-serializers.md   |  278 +++
 .../guide/kotlin/type-serialization.md             |  184 ++
 .../version-1.2.0/guide/python/_category_.json     |    6 +
 .../guide/python/basic-serialization.md            |  145 ++
 .../version-1.2.0/guide/python/configuration.md    |  181 ++
 .../guide/python/custom-serializers.md             |  138 ++
 .../version-1.2.0/guide/python/grpc-support.md     |  224 +++
 .../version-1.2.0/guide/python/index.md            |  160 ++
 .../guide/python/native-serialization.md           |  205 +++
 .../guide/python/numpy-integration.md              |  103 ++
 .../version-1.2.0/guide/python/out-of-band.md      |  179 ++
 .../version-1.2.0/guide/python/row-format.md       |  169 ++
 .../version-1.2.0/guide/python/schema-evolution.md |   77 +
 .../version-1.2.0/guide/python/schema-metadata.md  |  516 ++++++
 .../version-1.2.0/guide/python/troubleshooting.md  |  186 ++
 .../guide/python/type-registration.md              |  146 ++
 .../guide/python/xlang-serialization.md            |  140 ++
 .../version-1.2.0/guide/rust/_category_.json       |    6 +
 .../guide/rust/basic-serialization.md              |    2 +-
 .../version-1.2.0/guide/rust/configuration.md      |  125 ++
 .../version-1.2.0/guide/rust/custom-serializers.md |  147 ++
 .../version-1.2.0/guide/rust/grpc-support.md       |  311 ++++
 .../{current => version-1.2.0}/guide/rust/index.md |    2 +-
 .../guide/rust/native-serialization.md             |  214 +++
 .../version-1.2.0/guide/rust/polymorphism.md       |  232 +++
 .../version-1.2.0/guide/rust/references.md         |  213 +++
 .../version-1.2.0/guide/rust/row-format.md         |  126 ++
 .../version-1.2.0/guide/rust/schema-evolution.md   |  204 +++
 .../version-1.2.0/guide/rust/schema-metadata.md    |  457 +++++
 .../version-1.2.0/guide/rust/troubleshooting.md    |  164 ++
 .../version-1.2.0/guide/rust/type-registration.md  |  126 ++
 .../guide/rust/xlang-serialization.md              |  165 ++
 .../version-1.2.0/guide/scala/_category_.json      |    6 +
 .../version-1.2.0/guide/scala/configuration.md     |  170 ++
 .../version-1.2.0/guide/scala/default-values.md    |  186 ++
 .../version-1.2.0/guide/scala/grpc-support.md      |  169 ++
 .../guide/scala/index.md                           |    2 +-
 .../version-1.2.0/guide/scala/schema-idl.md        |  138 ++
 .../version-1.2.0/guide/scala/schema-metadata.md   |  109 ++
 .../guide/scala/type-serialization.md              |  171 ++
 .../version-1.2.0/guide/swift/_category_.json      |    6 +
 .../guide/swift/basic-serialization.md             |  114 ++
 .../version-1.2.0/guide/swift/configuration.md     |   99 ++
 .../guide/swift/custom-serializers.md              |   84 +
 .../version-1.2.0/guide/swift/index.md             |   84 +
 .../version-1.2.0/guide/swift/polymorphism.md      |   80 +
 .../version-1.2.0/guide/swift/references.md        |  110 ++
 .../version-1.2.0/guide/swift/schema-evolution.md  |   77 +
 .../version-1.2.0/guide/swift/schema-metadata.md   |  149 ++
 .../version-1.2.0/guide/swift/troubleshooting.md   |   92 +
 .../version-1.2.0/guide/swift/type-registration.md |   76 +
 .../guide/swift/xlang-serialization.md             |   97 +
 .../version-1.2.0/guide/xlang/_category_.json      |    6 +
 .../version-1.2.0/guide/xlang/field-nullability.md |  251 +++
 .../guide/xlang/field-reference-tracking.md        |  260 +++
 .../version-1.2.0/guide/xlang/field-type-meta.md   |  301 ++++
 .../guide/xlang/getting-started.md                 |   16 +-
 .../version-1.2.0/guide/xlang/index.md             |  172 ++
 .../version-1.2.0/guide/xlang/row_format.md        |  190 ++
 .../version-1.2.0/guide/xlang/serialization.md     |  536 ++++++
 .../version-1.2.0/guide/xlang/troubleshooting.md   |  321 ++++
 .../version-1.2.0/guide/xlang/zero-copy.md         |  207 +++
 .../version-1.2.0/introduction/_category_.json     |    1 +
 .../version-1.2.0/introduction/benchmark.md        |   90 +
 .../version-1.2.0/introduction/features.md         |  210 +++
 .../version-1.2.0/introduction/overview.md         |  102 ++
 .../version-1.2.0/start/_category_.json            |    1 +
 .../{current => version-1.2.0}/start/install.md    |   32 +-
 .../version-1.2.0/start/usage.md                   |  486 +++++
 .../download/index.md                              |   10 +-
 src/components/home/HomepageLanding.tsx            |   18 +-
 src/pages/download/index.md                        |   10 +-
 .../version-1.2.0/benchmarks/cpp/README.md         |   78 +
 .../version-1.2.0/benchmarks/cpp/throughput.png    |  Bin 0 -> 102327 bytes
 .../version-1.2.0/benchmarks/csharp/README.md      |   89 +
 .../version-1.2.0/benchmarks/csharp/throughput.png |  Bin 0 -> 108852 bytes
 .../version-1.2.0/benchmarks/dart/README.md        |   49 +
 .../version-1.2.0/benchmarks/dart/throughput.png   |  Bin 0 -> 106606 bytes
 .../version-1.2.0/benchmarks/go/README.md          |   58 +
 .../benchmarks/go/benchmark_results.txt            |  326 ++++
 .../benchmarks/go/serialized_sizes.txt             |   27 +
 .../version-1.2.0/benchmarks/go/throughput.png     |  Bin 0 -> 106797 bytes
 .../version-1.2.0/benchmarks/java/README.md        |  267 +++
 .../java/data/jmh-jdk-11-deserialization.csv       |  153 ++
 .../java/data/jmh-jdk-11-serialization.csv         |  153 ++
 .../benchmarks/java/data/jmh-jdk-11-zerocopy.csv   |   73 +
 .../java/java_heap_deserialize_compatible.png      |  Bin 0 -> 91290 bytes
 .../java/java_heap_deserialize_consistent.png      |  Bin 0 -> 102335 bytes
 .../java/java_heap_serialize_compatible.png        |  Bin 0 -> 100843 bytes
 .../java/java_heap_serialize_consistent.png        |  Bin 0 -> 100648 bytes
 .../java/java_offheap_deserialize_compatible.png   |  Bin 0 -> 96677 bytes
 .../java/java_offheap_deserialize_consistent.png   |  Bin 0 -> 101898 bytes
 .../java/java_offheap_serialize_compatible.png     |  Bin 0 -> 109379 bytes
 .../java/java_offheap_serialize_consistent.png     |  Bin 0 -> 110476 bytes
 .../java/java_repo_deserialization_throughput.png  |  Bin 0 -> 105680 bytes
 .../java/java_repo_serialization_throughput.png    |  Bin 0 -> 113741 bytes
 .../benchmarks/java/java_zero_copy_deserialize.png |  Bin 0 -> 90075 bytes
 .../benchmarks/java/java_zero_copy_serialize.png   |  Bin 0 -> 86235 bytes
 .../version-1.2.0/benchmarks/java/throughput.png   |  Bin 0 -> 107433 bytes
 .../version-1.2.0/benchmarks/javascript/README.md  |   82 +
 .../benchmarks/javascript/throughput.png           |  Bin 0 -> 108900 bytes
 .../version-1.2.0/benchmarks/python/README.md      |   87 +
 .../version-1.2.0/benchmarks/python/throughput.png |  Bin 0 -> 109981 bytes
 .../version-1.2.0/benchmarks/rust/README.md        |   77 +
 .../version-1.2.0/benchmarks/rust/throughput.png   |  Bin 0 -> 102562 bytes
 .../version-1.2.0/benchmarks/swift/README.md       |   46 +
 .../version-1.2.0/benchmarks/swift/throughput.png  |  Bin 0 -> 107942 bytes
 .../version-1.2.0/community/DEVELOPMENT.md         |  131 ++
 .../version-1.2.0/community/community.md           |   90 +
 .../community/how_to_join_community.md             |  105 ++
 .../version-1.2.0/community/how_to_release.md      |  669 +++++++
 .../version-1.2.0/community/how_to_verify.md       |  125 ++
 .../version-1.2.0/compiler/_category_.json         |    6 +
 .../version-1.2.0/compiler/compiler-guide.md       |  903 ++++++++++
 .../version-1.2.0/compiler/flatbuffers-idl.md      |  230 +++
 .../version-1.2.0/compiler/generated-code.md       | 1849 +++++++++++++++++++
 versioned_docs/version-1.2.0/compiler/index.md     |  261 +++
 .../version-1.2.0/compiler/protobuf-idl.md         |  364 ++++
 .../version-1.2.0/compiler/schema-idl.md           | 1734 ++++++++++++++++++
 versioned_docs/version-1.2.0/guide/_category_.json |    4 +
 .../version-1.2.0/guide/cpp/_category_.json        |    6 +
 .../version-1.2.0/guide/cpp/basic-serialization.md |  362 ++++
 .../version-1.2.0/guide/cpp/configuration.md       |  175 ++
 .../version-1.2.0/guide/cpp/custom-serializers.md  |  371 ++++
 versioned_docs/version-1.2.0/guide/cpp/index.md    |  284 +++
 .../guide/cpp/native-serialization.md              |  214 +++
 .../version-1.2.0/guide/cpp/polymorphism.md        |  479 +++++
 .../version-1.2.0/guide/cpp/row-format.md          |  508 ++++++
 .../version-1.2.0/guide/cpp/schema-evolution.md    |  424 +++++
 .../version-1.2.0/guide/cpp/schema-metadata.md     |  220 +++
 .../version-1.2.0/guide/cpp/supported-types.md     |  281 +++
 .../version-1.2.0/guide/cpp/type-registration.md   |  254 +++
 .../version-1.2.0/guide/cpp/xlang-serialization.md |  295 ++++
 .../version-1.2.0/guide/csharp/_category_.json     |    6 +
 .../guide/csharp/basic-serialization.md            |  131 ++
 .../version-1.2.0/guide/csharp/configuration.md    |  136 ++
 .../guide/csharp/custom-serializers.md             |   90 +
 .../version-1.2.0/guide/csharp/grpc-support.md     |  311 ++++
 versioned_docs/version-1.2.0/guide/csharp/index.md |  106 ++
 .../version-1.2.0/guide/csharp/references.md       |   72 +
 .../version-1.2.0/guide/csharp/schema-evolution.md |   99 ++
 .../version-1.2.0/guide/csharp/schema-metadata.md  |  123 ++
 .../version-1.2.0/guide/csharp/supported-types.md  |  100 ++
 .../version-1.2.0/guide/csharp/thread-safety.md    |   72 +
 .../version-1.2.0/guide/csharp/troubleshooting.md  |  120 ++
 .../guide/csharp/type-registration.md              |   91 +
 .../guide/csharp/xlang-serialization.md            |  129 ++
 .../version-1.2.0/guide/dart/_category_.json       |    6 +
 .../guide/dart/basic-serialization.md              |  145 ++
 .../version-1.2.0/guide/dart/code-generation.md    |  114 ++
 .../version-1.2.0/guide/dart/configuration.md      |  114 ++
 .../version-1.2.0/guide/dart/custom-serializers.md |  138 ++
 versioned_docs/version-1.2.0/guide/dart/index.md   |  148 ++
 .../version-1.2.0/guide/dart/schema-evolution.md   |  105 ++
 .../version-1.2.0/guide/dart/schema-metadata.md    |  145 ++
 .../version-1.2.0/guide/dart/supported-types.md    |  159 ++
 .../version-1.2.0/guide/dart/troubleshooting.md    |  146 ++
 .../version-1.2.0/guide/dart/type-registration.md  |   97 +
 .../guide/dart/web-platform-support.md             |  218 +++
 .../guide/dart/xlang-serialization.md              |  219 +++
 .../version-1.2.0/guide/go/_category_.json         |    6 +
 .../version-1.2.0/guide/go/basic-serialization.md  |  409 +++++
 versioned_docs/version-1.2.0/guide/go/codegen.md   |  430 +++++
 .../version-1.2.0/guide/go/configuration.md        |  356 ++++
 .../version-1.2.0/guide/go/custom-serializers.md   |  285 +++
 .../version-1.2.0/guide/go/grpc-support.md         |  241 +++
 versioned_docs/version-1.2.0/guide/go/index.md     |  160 ++
 .../version-1.2.0/guide/go/native-serialization.md |  219 +++
 .../version-1.2.0/guide/go/references.md           |  356 ++++
 .../version-1.2.0/guide/go/schema-evolution.md     |  393 +++++
 .../version-1.2.0/guide/go/schema-metadata.md      |  393 +++++
 .../version-1.2.0/guide/go/supported-types.md      |  374 ++++
 .../version-1.2.0/guide/go/thread-safety.md        |  347 ++++
 .../version-1.2.0/guide/go/troubleshooting.md      |  449 +++++
 .../version-1.2.0/guide/go/type-registration.md    |  264 +++
 .../version-1.2.0/guide/go/xlang-serialization.md  |  307 ++++
 .../version-1.2.0/guide/java/_category_.json       |    6 +
 .../version-1.2.0/guide/java/advanced-features.md  |  160 ++
 .../version-1.2.0/guide/java/android-support.md    |  134 ++
 .../guide/java/basic-serialization.md              |  132 ++
 .../version-1.2.0/guide/java/compression.md        |  126 ++
 .../version-1.2.0/guide/java/configuration.md      |  110 ++
 .../version-1.2.0/guide/java/custom-serializers.md |  227 +++
 .../version-1.2.0/guide/java/graalvm-support.md    |  329 ++++
 .../version-1.2.0}/guide/java/grpc-support.md      |  170 +-
 versioned_docs/version-1.2.0/guide/java/index.md   |  253 +++
 .../guide/java/native-serialization.md             |  401 +++++
 .../version-1.2.0/guide/java/object-copy.md        |  373 ++++
 .../version-1.2.0/guide/java/row-format.md         |  194 ++
 .../version-1.2.0/guide/java/schema-evolution.md   |  270 +++
 .../version-1.2.0/guide/java/schema-metadata.md    |  716 ++++++++
 .../guide/java/static-generated-serializers.md     |  165 ++
 .../version-1.2.0/guide/java/troubleshooting.md    |  215 +++
 .../version-1.2.0/guide/java/type-registration.md  |  124 ++
 .../version-1.2.0/guide/java/virtual-threads.md    |  127 ++
 .../guide/java/xlang-serialization.md              |  283 +++
 .../version-1.2.0/guide/javascript/_category_.json |    6 +
 .../guide/javascript/basic-serialization.md        |  244 +++
 .../guide/javascript/configuration.md              |  113 ++
 .../guide/javascript/grpc-support.md               |   29 +
 .../version-1.2.0/guide/javascript/index.md        |  176 ++
 .../version-1.2.0/guide/javascript/references.md   |  111 ++
 .../guide/javascript/schema-evolution.md           |  116 ++
 .../guide/javascript/schema-metadata.md            |  165 ++
 .../guide/javascript/supported-types.md            |  177 ++
 .../guide/javascript/troubleshooting.md            |   90 +
 .../guide/javascript/type-registration.md          |  164 ++
 .../guide/javascript/xlang-serialization.md        |  155 ++
 .../version-1.2.0/guide/kotlin/_category_.json     |    6 +
 .../version-1.2.0/guide/kotlin/android-support.md  |  122 ++
 .../version-1.2.0/guide/kotlin/configuration.md    |  146 ++
 .../version-1.2.0/guide/kotlin/default-values.md   |  133 ++
 .../version-1.2.0}/guide/kotlin/grpc-support.md    |  127 +-
 versioned_docs/version-1.2.0/guide/kotlin/index.md |  135 ++
 .../version-1.2.0/guide/kotlin/schema-metadata.md  |  124 ++
 .../guide/kotlin/static-generated-serializers.md   |  319 ++++
 .../guide/kotlin/type-serialization.md             |  192 ++
 .../version-1.2.0/guide/python/_category_.json     |    6 +
 .../guide/python/basic-serialization.md            |  112 ++
 .../version-1.2.0/guide/python/configuration.md    |  265 +++
 .../guide/python/custom-serializers.md             |  138 ++
 .../version-1.2.0}/guide/python/grpc-support.md    |   64 +-
 versioned_docs/version-1.2.0/guide/python/index.md |  170 ++
 .../guide/python/native-serialization.md           |  342 ++++
 .../guide/python/numpy-integration.md              |  103 ++
 .../version-1.2.0/guide/python/out-of-band.md      |  179 ++
 .../version-1.2.0/guide/python/row-format.md       |  191 ++
 .../version-1.2.0/guide/python/schema-evolution.md |  122 ++
 .../version-1.2.0/guide/python/schema-metadata.md  |  529 ++++++
 .../version-1.2.0/guide/python/troubleshooting.md  |  195 ++
 .../guide/python/type-registration.md              |   85 +
 .../guide/python/xlang-serialization.md            |  215 +++
 .../version-1.2.0/guide/rust/_category_.json       |    6 +
 .../guide/rust/basic-serialization.md              |  195 ++
 .../version-1.2.0/guide/rust/configuration.md      |  152 ++
 .../version-1.2.0/guide/rust/custom-serializers.md |  176 ++
 .../version-1.2.0}/guide/rust/grpc-support.md      |  115 +-
 versioned_docs/version-1.2.0/guide/rust/index.md   |  201 +++
 .../guide/rust/native-serialization.md             |  232 +++
 .../version-1.2.0/guide/rust/polymorphism.md       |  267 +++
 .../version-1.2.0/guide/rust/references.md         |  213 +++
 .../version-1.2.0/guide/rust/row-format.md         |  126 ++
 .../version-1.2.0/guide/rust/schema-evolution.md   |  250 +++
 .../version-1.2.0/guide/rust/schema-metadata.md    |  459 +++++
 .../version-1.2.0/guide/rust/troubleshooting.md    |  167 ++
 .../version-1.2.0/guide/rust/type-registration.md  |  125 ++
 .../guide/rust/xlang-serialization.md              |  190 ++
 .../version-1.2.0/guide/scala/_category_.json      |    6 +
 .../version-1.2.0/guide/scala/configuration.md     |  190 ++
 .../version-1.2.0/guide/scala/default-values.md    |  169 ++
 .../version-1.2.0/guide/scala/grpc-support.md      |  397 +++++
 versioned_docs/version-1.2.0/guide/scala/index.md  |  122 ++
 .../version-1.2.0/guide/scala/schema-idl.md        |  193 ++
 .../version-1.2.0/guide/scala/schema-metadata.md   |  124 ++
 .../guide/scala/type-serialization.md              |  179 ++
 .../version-1.2.0/guide/swift/_category_.json      |    6 +
 .../guide/swift/basic-serialization.md             |  118 ++
 .../version-1.2.0/guide/swift/configuration.md     |  123 ++
 .../guide/swift/custom-serializers.md              |   84 +
 versioned_docs/version-1.2.0/guide/swift/index.md  |   83 +
 .../version-1.2.0/guide/swift/polymorphism.md      |   80 +
 .../version-1.2.0/guide/swift/references.md        |  111 ++
 .../version-1.2.0/guide/swift/schema-evolution.md  |   93 +
 .../version-1.2.0/guide/swift/schema-metadata.md   |  163 ++
 .../version-1.2.0/guide/swift/troubleshooting.md   |   94 +
 .../version-1.2.0/guide/swift/type-registration.md |   72 +
 .../guide/swift/xlang-serialization.md             |  120 ++
 .../version-1.2.0/guide/xlang/_category_.json      |    6 +
 .../version-1.2.0/guide/xlang/field-nullability.md |  267 +++
 .../guide/xlang/field-reference-tracking.md        |  303 ++++
 .../version-1.2.0/guide/xlang/field-type-meta.md   |  283 +++
 .../version-1.2.0}/guide/xlang/getting-started.md  |  140 +-
 versioned_docs/version-1.2.0/guide/xlang/index.md  |  179 ++
 .../version-1.2.0/guide/xlang/row_format.md        |  190 ++
 .../version-1.2.0/guide/xlang/serialization.md     |  538 ++++++
 .../version-1.2.0/guide/xlang/troubleshooting.md   |  321 ++++
 .../version-1.2.0/guide/xlang/zero-copy.md         |  203 +++
 .../version-1.2.0/introduction/_category_.json     |    4 +
 .../version-1.2.0/introduction/benchmark.md        |  100 ++
 .../version-1.2.0/introduction/features.md         |  210 +++
 .../version-1.2.0/introduction/overview.md         |  110 ++
 .../specification/java_serialization_spec.md       |  761 ++++++++
 .../version-1.2.0/specification/row_format_spec.md |  540 ++++++
 .../specification/xlang_implementation_guide.md    |  623 +++++++
 .../specification/xlang_serialization_spec.md      | 1860 ++++++++++++++++++++
 .../specification/xlang_type_mapping.md            |  232 +++
 versioned_docs/version-1.2.0/start/_category_.json |    4 +
 .../version-1.2.0}/start/install.md                |   32 +-
 versioned_docs/version-1.2.0/start/usage.md        |  486 +++++
 versioned_sidebars/version-1.2.0-sidebars.json     |   60 +
 versions.json                                      |    1 +
 464 files changed, 79265 insertions(+), 374 deletions(-)

diff --git a/blog/2026-06-16-fory_1_2_0_release.md b/blog/2026-06-16-fory_1_2_0_release.md
new file mode 100644
index 0000000000..42e976344a
--- /dev/null
+++ b/blog/2026-06-16-fory_1_2_0_release.md
@@ -0,0 +1,378 @@
+---
+slug: fory_1_2_0_release
+title: Fory v1.2.0 Released
+authors: [chaokunyang]
+tags: [fory, java, kotlin, scala, android, python, rust, c++, go, c#, swift, dart, compiler]
+---
+
+The Apache Fory team is pleased to announce the 1.2.0 release. This release includes [38 PRs](https://github.com/apache/fory/compare/v1.1.0...v1.2.0) from 9 distinct contributors and continues to improve the cross-language runtime across supported languages. See the [Install](https://fory.apache.org/docs/start/install) page to get the libraries for your platform.
+
+## Highlights
+
+* Expanded generated gRPC support across Go, Rust, Kotlin, Scala, C#, and JavaScript, including Node.js and browser gRPC-Web support for JavaScript.
+* Improved cross-language compatibility with refined register-by-name APIs, compatible scalar read conversions, and default compatible mode for native serialization.
+* Strengthened Java platform support by adding Java 9/16 module-info generation and removing `sun.misc.Unsafe` usage for JDK 25.
+* Improved runtime safety and robustness with additional read checks, deflater leak fixes, and safer serializer/type-info error handling.
+* Optimized compatible-mode and row-format performance through faster compatible reads, compact row layout caching, and inlined custom-codec dispatch.
+* Enhanced compiler output quality across Rust, C++, and service generation with better identifier escaping, name-collision handling, nested container reference handling, and map code generation.
+
+## Java 25+ Without `sun.misc.Unsafe`
+
+JDK 25 continues the platform shift away from `sun.misc.Unsafe`. Fory 1.2.0
+adds a Java 25 multi-release implementation for the core runtime so applications
+can run on JDK 25+ without resolving `sun.misc.Unsafe` from Fory's active class
+graph.
+
+The implementation keeps the fast JDK 8-24 paths for older runtimes, but JDK 25+
+loads replacement classes from the versioned jar area. Those replacements move
+field access and memory-buffer primitives to supported JVM mechanisms such as
+`VarHandle`, `MethodHandle`, arrays, and `ByteBuffer`. Constructor-bypassing
+allocation is also handled explicitly: on JDK 25+ classes that previously
+depended on Unsafe allocation should provide an accessible no-arg constructor,
+use record construction, or register a custom serializer.
+
+This is an important compatibility milestone for Java users because the runtime
+no longer depends on a terminally deprecated Unsafe API path when the application
+runs on Java 25 and later.
+
+## Compatible Scalar Field Reads
+
+Compatible mode already allows readers and writers to add, remove, and reorder
+fields. Fory 1.2.0 extends that model to selected scalar type changes: when a
+matched top-level field changes between boolean, string, numeric, and decimal
+types, the reader can deserialize the value if the conversion is lossless.
+
+Examples include reading `"123"` as an integer field, reading `1` or `0` as a
+boolean field, reading booleans as `1`/`0`, reading numbers or decimals as
+canonical strings, and widening or narrowing numeric values only when no range
+or precision is lost. Invalid strings, out-of-range values, lossy float/integer
+conversions, and reference-tracked scalar type changes fail during
+deserialization. The conversion applies to matched compatible fields, not to
+root values or collection elements.
+
+The examples below show Rust, Python, Java, and C++, but compatible scalar field
+conversion is supported across Fory's compatible-mode runtimes: Java, Python,
+Rust, C++, Go, C#, Swift, Dart, JavaScript/TypeScript, Kotlin, and Scala.
+
+Compatible mode is enabled by default in the Java and Python runtimes for both
+xlang and native serialization. You can still make the setting explicit:
+
+```java
+Fory fory = Fory.builder()
+    .withXlang(true)
+    .withCompatible(true)
+    .build();
+```
+
+```python
+import pyfory
+
+fory = pyfory.Fory(xlang=True, compatible=True)
+native_fory = pyfory.Fory(xlang=False, compatible=True)
+```
+
+Rust example:
+
+```rust
+use fory::{Fory, ForyStruct};
+
+#[derive(ForyStruct)]
+struct MetricV1 {
+    value: i64,
+}
+
+#[derive(ForyStruct)]
+struct MetricV2 {
+    value: String,
+}
+
+let mut writer = Fory::builder().xlang(true).compatible(true).build();
+writer.register_by_name::<MetricV1>("example.Metric")?;
+
+let mut reader = Fory::builder().xlang(true).compatible(true).build();
+reader.register_by_name::<MetricV2>("example.Metric")?;
+
+let bytes = writer.serialize(&MetricV1 { value: 42 })?;
+let value: MetricV2 = reader.deserialize(&bytes)?;
+assert_eq!(value.value, "42");
+```
+
+Python example:
+
+```python
+from dataclasses import dataclass
+import pyfory
+
+@dataclass
+class MetricV1:
+    value: pyfory.Int64
+
+@dataclass
+class MetricV2:
+    value: str
+
+writer = pyfory.Fory(xlang=True, compatible=True)
+writer.register(MetricV1, name="example.Metric")
+
+reader = pyfory.Fory(xlang=True, compatible=True)
+reader.register(MetricV2, name="example.Metric")
+
+data = writer.dumps(MetricV1(42))
+assert reader.loads(data).value == "42"
+```
+
+Java example:
+
+```java
+public class MetricV1 {
+  public long value;
+}
+
+public class MetricV2 {
+  public String value;
+}
+
+Fory writer = Fory.builder().withXlang(true).withCompatible(true).build();
+writer.register(MetricV1.class, "example", "Metric");
+
+Fory reader = Fory.builder().withXlang(true).withCompatible(true).build();
+reader.register(MetricV2.class, "example", "Metric");
+
+MetricV1 source = new MetricV1();
+source.value = 42L;
+byte[] bytes = writer.serialize(source);
+MetricV2 value = reader.deserialize(bytes, MetricV2.class);
+assert value.value.equals("42");
+```
+
+C++ example:
+
+```cpp
+#include <cassert>
+#include <string>
+#include "fory/serialization/fory.h"
+
+using namespace fory::serialization;
+
+struct MetricV1 {
+  int64_t value;
+};
+FORY_STRUCT(MetricV1, value);
+
+struct MetricV2 {
+  std::string value;
+};
+FORY_STRUCT(MetricV2, value);
+
+auto writer = Fory::builder().xlang(true).compatible(true).build();
+auto reader = Fory::builder().xlang(true).compatible(true).build();
+
+writer.register_struct<MetricV1>("example", "Metric");
+reader.register_struct<MetricV2>("example", "Metric");
+
+auto bytes = writer.serialize(MetricV1{42}).value();
+auto value = reader.deserialize<MetricV2>(bytes).value();
+assert(value.value == "42");
+```
+
+The same rule works in the other direction, for example reading a `String`
+field value such as `"42"` as `int64`, when the string uses Fory's strict
+finite decimal grammar and the target range can represent the value exactly.
+
+## Generated gRPC Support
+
+Fory 1.2.0 expands compiler-generated gRPC service companions. The generated
+services use standard gRPC transports, channels, deadlines, metadata,
+interceptors, status codes, and streaming shapes, while request and response
+objects are encoded with Fory instead of protobuf message bytes. Use this mode
+when both sides of the RPC are generated from the same Fory IDL, protobuf IDL,
+or FlatBuffers IDL and you want gRPC operational semantics with Fory payload
+encoding.
+
+Generated gRPC support now covers Java, Python, Go, Rust, C#, Scala, Kotlin,
+and JavaScript/TypeScript. JavaScript includes Node.js gRPC support and browser
+gRPC-Web client generation.
+
+The examples below use this shared schema:
+
+```protobuf
+package demo.greeter;
+
+message HelloRequest {
+  string name = 1;
+}
+
+message HelloReply {
+  string reply = 1;
+}
+
+service Greeter {
+  rpc SayHello (HelloRequest) returns (HelloReply);
+}
+```
+
+Rust generation emits tonic-based service API and binding modules:
+
+```bash
+foryc service.fdl --rust_out=./generated/rust --grpc
+```
+
+```rust
+use demo_greeter::{HelloReply, HelloRequest};
+use demo_greeter_service::Greeter;
+use demo_greeter_service_grpc::greeter_client::GreeterClient;
+use demo_greeter_service_grpc::greeter_server::GreeterServer;
+
+tonic::transport::Server::builder()
+    .add_service(GreeterServer::new(MyGreeter::default()))
+    .serve(addr)
+    .await?;
+
+let mut client = GreeterClient::connect("http://[::1]:50051").await?;
+let reply = client.say_hello(HelloRequest { name: "Fory".into() }).await?;
+```
+
+Go generation emits grpc-go interfaces and a Fory-backed `CodecV2`:
+
+```bash
+foryc service.fdl --go_out=./generated/go --grpc
+```
+
+```go
+server := grpc.NewServer(
+    grpc.ForceServerCodecV2(greeter.CodecV2{}),
+)
+greeter.RegisterGreeterServer(server, greeterService{})
+
+client := greeter.NewGreeterClient(conn)
+reply, err := client.SayHello(ctx, &greeter.HelloRequest{Name: "Fory"})
+```
+
+JavaScript generation supports both Node.js gRPC and browser gRPC-Web:
+
+```bash
+foryc service.fdl --javascript_out=./generated/javascript --grpc --grpc-web
+```
+
+```ts
+import * as grpc from "@grpc/grpc-js";
+import { addGreeterService, createGreeterClient } from "./service_grpc";
+import { createGreeterWebPromiseClient } from "./service_grpc_web";
+
+addGreeterService(server, greeterHandlers);
+
+const nodeClient = createGreeterClient(
+  "localhost:50051",
+  grpc.credentials.createInsecure(),
+);
+nodeClient.sayHello({ name: "Fory" }, callback);
+
+const webClient = createGreeterWebPromiseClient("https://api.example.com");
+const reply = await webClient.sayHello({ name: "Fory" });
+```
+
+Browser gRPC-Web follows gRPC-Web transport limits: unary and server-streaming
+methods are supported, while client-streaming and bidirectional streaming remain
+Node.js/native gRPC shapes.
+
+Kotlin generation emits grpc-kotlin coroutine companions:
+
+```bash
+foryc service.fdl --kotlin_out=./generated/kotlin --grpc
+```
+
+```kotlin
+class GreeterService : GreeterGrpcKt.GreeterCoroutineImplBase() {
+  override suspend fun sayHello(request: HelloRequest): HelloReply =
+    HelloReply(reply = "Hello, ${request.name}")
+}
+
+val server = ServerBuilder
+  .forPort(50051)
+  .addService(GreeterService())
+  .build()
+  .start()
+
+val stub = GreeterGrpcKt.GreeterCoroutineStub(channel)
+val reply = stub.sayHello(HelloRequest(name = "Fory"))
+```
+
+Scala generation emits Scala 3 grpc-java companions with Scala-friendly client
+handles:
+
+```bash
+foryc service.fdl --scala_out=./generated/scala --grpc
+```
+
+```scala
+final class GreeterService extends GreeterGrpc.GreeterImplBase {
+  override def sayHello(request: HelloRequest): HelloReply =
+    HelloReply(s"Hello, ${request.name}")
+}
+
+val server = ServerBuilder
+  .forPort(50051)
+  .addService(new GreeterService)
+  .build()
+  .start()
+
+val client = GreeterGrpc.newClient(channel)
+val reply = Await.result(client.sayHello(HelloRequest("Fory")).asFuture, 30.seconds)
+```
+
+The generated gRPC companions intentionally do not make gRPC a hard dependency
+of the core Fory language packages. Applications add the transport libraries
+they use: grpc-java for Java and Scala, `grpcio` for Python, grpc-go for Go,
+`tonic`/`bytes` for Rust, .NET gRPC packages for C#, `@grpc/grpc-js` or
+`grpc-web` for JavaScript, and grpc-java/grpc-kotlin for Kotlin.
+
+## Features
+
+* feat(java): add java9/16 module-info support by @chaokunyang in https://github.com/apache/fory/pull/3721
+* refactor(format): inline custom-codec dispatch in row codecs by @stevenschlansker in https://github.com/apache/fory/pull/3716
+* perf(format): cache compact row layout per nested slot by @stevenschlansker in https://github.com/apache/fory/pull/3717
+* feat(java): remove sun.misc.Unsafe for jdk25 by @chaokunyang in https://github.com/apache/fory/pull/3702
+* feat(rust): support thread safe `Arc<dyn Any + Send + Sync>` type by @chaokunyang in https://github.com/apache/fory/pull/3736
+* refactor(rust): refactor sync send type by @chaokunyang in https://github.com/apache/fory/pull/3737
+* feat(xlang): refine register by name api by @chaokunyang in https://github.com/apache/fory/pull/3739
+* feat(xlang): support compatible scalar read conversions by @chaokunyang in https://github.com/apache/fory/pull/3740
+* feat: default compatible mode for native serialization by @chaokunyang in https://github.com/apache/fory/pull/3742
+* perf: optimize compatible mode read performance by @chaokunyang in https://github.com/apache/fory/pull/3743
+* feat(compiler): handle Rust identifier escaping and name collisions by @BaldDemian in https://github.com/apache/fory/pull/3744
+* feat(go): implement grpc stub generation by @ayush00git in https://github.com/apache/fory/pull/3698
+* refactor(compiler): generate C++ unordered map for Fory map by @BaldDemian in https://github.com/apache/fory/pull/3745
+* feat(compiler): handle nested container ref pointer options in C++ compiler correctly by @BaldDemian in https://github.com/apache/fory/pull/3735
+* feat: add more read checks by @chaokunyang in https://github.com/apache/fory/pull/3748
+* feat(compiler): support Rust gRPC code generation by @BaldDemian in https://github.com/apache/fory/pull/3738
+* feat(cpp): support struct property accessors by @chaokunyang in https://github.com/apache/fory/pull/3751
+* feat(python): make scalar wire markers typing-friendly by @chaokunyang in https://github.com/apache/fory/pull/3756
+* feat(kotlin): add kotlin grpc support by @chaokunyang in https://github.com/apache/fory/pull/3757
+* feat(rust): make fory-derive generated code use exported api in fory rust lib by @chaokunyang in https://github.com/apache/fory/pull/3759
+* feat(scala): add generated grpc service support for scala by @chaokunyang in https://github.com/apache/fory/pull/3762
+* feat(csharp): add generated grpc support for C# by @chaokunyang in https://github.com/apache/fory/pull/3761
+* feat(javascript): add javascript gRPC support for nodejs/browser by @chaokunyang in https://github.com/apache/fory/pull/3760
+
+## Bug Fix
+
+* fix(go): return nil serializer on getTypeInfo err by @ayush00git in https://github.com/apache/fory/pull/3719
+* fix(benchmarks): uses outdated google-java-format, upgrade spotless by @stevenschlansker in https://github.com/apache/fory/pull/3722
+* fix(format): pass row body size, not full payload size, to BinaryRow.pointTo by @stevenschlansker in https://github.com/apache/fory/pull/3715
+* fix(java): fix deflater memory leak by @MNTMDEV in https://github.com/apache/fory/pull/3726
+* fix(compiler): handle nested container ref pointer options in Rust compiler correctly by @BaldDemian in https://github.com/apache/fory/pull/3731
+* fix(java): ignore non-Scala/Lombok-style default helper methods by @mandrean in https://github.com/apache/fory/pull/3733
+* fix(c++): std::unordered_map cannot be used in struct. (#3727) by @ruoruoniao in https://github.com/apache/fory/pull/3728
+* fix(grpc): fix rust/go grpc support by @chaokunyang in https://github.com/apache/fory/pull/3753
+* fix(cpp): align unsigned struct default encoding by @chaokunyang in https://github.com/apache/fory/pull/3754
+
+## Other Improvements
+
+* chore(deps): fix vulnerable dependencies by @chaokunyang in https://github.com/apache/fory/pull/3741
+* chore: Bump MessagePack from 2.5.187 to 2.5.301 by @dependabot[bot] in https://github.com/apache/fory/pull/3750
+* chore(deps): bump Go gRPC test dependencies by @chaokunyang in https://github.com/apache/fory/pull/3763
+
+## New Contributors
+
+* @MNTMDEV made their first contribution in https://github.com/apache/fory/pull/3726
+* @ruoruoniao made their first contribution in https://github.com/apache/fory/pull/3728
+
+**Full Changelog**: https://github.com/apache/fory/compare/v1.1.0...v1.2.0
diff --git a/docs/guide/java/grpc-support.md b/docs/guide/java/grpc-support.md
index 7bebb010f9..826f2326e7 100644
--- a/docs/guide/java/grpc-support.md
+++ b/docs/guide/java/grpc-support.md
@@ -201,12 +201,170 @@ service Greeter {
 
 Generated Java service methods follow grpc-java conventions:
 
-- Unary and server-streaming methods receive a request object and a
-  `StreamObserver` for responses.
-- Client-streaming and bidirectional methods return a `StreamObserver` for
-  incoming requests and receive a `StreamObserver` for outgoing responses.
-- Blocking stubs expose the grpc-java blocking APIs for supported streaming
-  shapes.
+| IDL shape                                 | Server method shape                                      | Client method shape                    |
+| ----------------------------------------- | -------------------------------------------------------- | -------------------------------------- |
+| `rpc A (Req) returns (Res)`               | `void a(Req request, StreamObserver<Res> responses)`     | blocking, async, and future unary stub |
+| `rpc A (Req) returns (stream Res)`        | `void a(Req request, StreamObserver<Res> responses)`     | blocking iterator or async observer    |
+| `rpc A (stream Req) returns (Res)`        | `StreamObserver<Req> a(StreamObserver<Res> responses)`   | async request observer                 |
+| `rpc A (stream Req) returns (stream Res)` | `StreamObserver<Req> a(StreamObserver<Res> responses)`   | async request observer                 |
+
+Server implementations can use the generated streaming method shapes directly:
+
+```java
+package demo.greeter;
+
+import io.grpc.stub.StreamObserver;
+import java.util.ArrayList;
+import java.util.List;
+
+final class GreeterService extends GreeterGrpc.GreeterImplBase {
+  @Override
+  public void lotsOfReplies(
+      HelloRequest request, StreamObserver<HelloReply> responseObserver) {
+    HelloReply first = new HelloReply();
+    first.setReply("Hello, " + request.getName());
+    responseObserver.onNext(first);
+
+    HelloReply second = new HelloReply();
+    second.setReply("Welcome, " + request.getName());
+    responseObserver.onNext(second);
+    responseObserver.onCompleted();
+  }
+
+  @Override
+  public StreamObserver<HelloRequest> lotsOfGreetings(
+      StreamObserver<HelloReply> responseObserver) {
+    List<String> names = new ArrayList<>();
+    return new StreamObserver<>() {
+      @Override
+      public void onNext(HelloRequest request) {
+        names.add(request.getName());
+      }
+
+      @Override
+      public void onError(Throwable error) {
+        responseObserver.onError(error);
+      }
+
+      @Override
+      public void onCompleted() {
+        HelloReply reply = new HelloReply();
+        reply.setReply(String.join(", ", names));
+        responseObserver.onNext(reply);
+        responseObserver.onCompleted();
+      }
+    };
+  }
+
+  @Override
+  public StreamObserver<HelloRequest> chat(
+      StreamObserver<HelloReply> responseObserver) {
+    return new StreamObserver<>() {
+      @Override
+      public void onNext(HelloRequest request) {
+        HelloReply reply = new HelloReply();
+        reply.setReply("Hello, " + request.getName());
+        responseObserver.onNext(reply);
+      }
+
+      @Override
+      public void onError(Throwable error) {
+        responseObserver.onError(error);
+      }
+
+      @Override
+      public void onCompleted() {
+        responseObserver.onCompleted();
+      }
+    };
+  }
+}
+```
+
+Generated clients return the standard grpc-java call shapes:
+
+```java
+package demo.greeter;
+
+import io.grpc.stub.StreamObserver;
+import java.util.Iterator;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+
+final class StreamingClient {
+  private final GreeterGrpc.GreeterBlockingStub blockingStub;
+  private final GreeterGrpc.GreeterStub asyncStub;
+
+  StreamingClient(
+      GreeterGrpc.GreeterBlockingStub blockingStub,
+      GreeterGrpc.GreeterStub asyncStub) {
+    this.blockingStub = blockingStub;
+    this.asyncStub = asyncStub;
+  }
+
+  void run() throws InterruptedException {
+    Iterator<HelloReply> replies =
+        blockingStub.lotsOfReplies(newRequest("Fory"));
+    while (replies.hasNext()) {
+      System.out.println(replies.next().getReply());
+    }
+
+    CountDownLatch greetingsDone = new CountDownLatch(1);
+    StreamObserver<HelloRequest> greetings =
+        asyncStub.lotsOfGreetings(new StreamObserver<>() {
+          @Override
+          public void onNext(HelloReply reply) {
+            System.out.println(reply.getReply());
+          }
+
+          @Override
+          public void onError(Throwable error) {
+            greetingsDone.countDown();
+          }
+
+          @Override
+          public void onCompleted() {
+            greetingsDone.countDown();
+          }
+        });
+    greetings.onNext(newRequest("Ada"));
+    greetings.onNext(newRequest("Grace"));
+    greetings.onCompleted();
+    greetingsDone.await(5, TimeUnit.SECONDS);
+
+    CountDownLatch chatDone = new CountDownLatch(1);
+    StreamObserver<HelloRequest> chat =
+        asyncStub.chat(new StreamObserver<>() {
+          @Override
+          public void onNext(HelloReply reply) {
+            System.out.println(reply.getReply());
+          }
+
+          @Override
+          public void onError(Throwable error) {
+            chatDone.countDown();
+          }
+
+          @Override
+          public void onCompleted() {
+            chatDone.countDown();
+          }
+        });
+    chat.onNext(newRequest("Fory"));
+    chat.onCompleted();
+    chatDone.await(5, TimeUnit.SECONDS);
+  }
+
+  private static HelloRequest newRequest(String name) {
+    HelloRequest request = new HelloRequest();
+    request.setName(name);
+    return request;
+  }
+}
+```
+
+The generated descriptors preserve the exact IDL service and method names for
+the gRPC path.
 
 ## Operations
 
diff --git a/docs/guide/javascript/grpc-support.md b/docs/guide/javascript/grpc-support.md
index 32ca805171..696ecef24a 100644
--- a/docs/guide/javascript/grpc-support.md
+++ b/docs/guide/javascript/grpc-support.md
@@ -23,6 +23,12 @@ Fory can generate JavaScript service companions for schemas that define
 services. The generated service code uses normal gRPC transports while request
 and response objects are serialized with Fory instead of protobuf.
 
+Use this mode when both RPC peers are generated from the same Fory IDL,
+protobuf IDL, or FlatBuffers IDL and both sides expect Fory-encoded message
+bodies. Use normal protobuf gRPC generation for APIs that must be consumed by
+generic protobuf clients, reflection tools, or components that expect protobuf
+message bytes.
+
 Use `--grpc` for Node.js server and client code. Use `--grpc-web` for browser
 clients that call a gRPC-Web compatible server or proxy.
 
@@ -47,6 +53,9 @@ package used by your application.
 
 ## Define a Service
 
+Service definitions can come from Fory IDL, protobuf IDL, or FlatBuffers
+`rpc_service` definitions. A Fory IDL service looks like this:
+
 ```protobuf
 package demo.greeter;
 
@@ -292,3 +301,23 @@ gRPC operational features still belong to the transport package:
 - Deadlines and cancellation
 - Client and server interceptors
 - Load balancing and deployment-specific proxy configuration
+
+## Troubleshooting
+
+### Missing gRPC Packages
+
+Add `@grpc/grpc-js` for Node.js companions or `grpc-web` for browser
+companions. `@apache-fory/core` intentionally does not depend on either
+transport package.
+
+### gRPC-Web Client-Streaming or Bidirectional RPCs Are Rejected
+
+gRPC-Web does not support client-streaming or bidirectional streaming. Generate
+Node.js companions with `--grpc` for those shapes, or expose unary and
+server-streaming methods to browser clients.
+
+### Protobuf Clients Cannot Decode the Service
+
+Fory gRPC companions do not use protobuf wire encoding for messages. Use a
+Fory-generated client for Fory-generated services, or provide a separate
+protobuf service endpoint for generic protobuf clients.
diff --git a/docs/guide/kotlin/grpc-support.md b/docs/guide/kotlin/grpc-support.md
index ae12f9e0f1..2a33ec3d43 100644
--- a/docs/guide/kotlin/grpc-support.md
+++ b/docs/guide/kotlin/grpc-support.md
@@ -23,7 +23,13 @@ Fory IDL can generate Kotlin coroutine gRPC companions. The generated gRPC
 files use normal grpc-java and grpc-kotlin APIs, while each request and response
 message is serialized with Fory.
 
-## Dependencies
+Use this mode when both RPC peers are generated from the same Fory IDL,
+protobuf IDL, or FlatBuffers IDL and both sides expect Fory-encoded message
+bodies. Use normal protobuf gRPC generation for APIs that must be consumed by
+generic protobuf clients, reflection tools, or components that expect protobuf
+message bytes.
+
+## Add Dependencies
 
 Add Fory Kotlin, KSP, grpc-java, grpc-kotlin, coroutines, and one grpc-java
 transport to the application or service module that compiles the generated
@@ -51,9 +57,10 @@ Use a different grpc-java transport if your application already standardizes on
 one. Generated Kotlin Fory gRPC does not require `grpc-protobuf` for payload
 encoding.
 
-## Generate Code
+## Define a Service
 
-For a schema such as:
+Service definitions can come from Fory IDL, protobuf IDL, or FlatBuffers
+`rpc_service` definitions. A Fory IDL service looks like this:
 
 ```protobuf
 package demo.greeter;
@@ -71,18 +78,27 @@ service Greeter {
 }
 ```
 
-run:
+Generate Kotlin model and gRPC companion code with `--grpc`:
 
 ```bash
 foryc service.fdl --kotlin_out=./generated/kotlin --grpc
 ```
 
-The compiler writes Kotlin model files, a schema module such as
-`ServiceForyModule.kt`, and one service companion such as `GreeterGrpcKt.kt`.
+For this schema, the Kotlin generator emits:
+
+| File                 | Purpose                                      |
+| -------------------- | -------------------------------------------- |
+| `HelloRequest.kt`    | Fory model type for the request              |
+| `HelloReply.kt`      | Fory model type for the response             |
+| `ServiceForyModule`  | Fory registration module for generated types |
+| `GreeterGrpcKt.kt`   | Coroutine service base, stubs, and codecs    |
+
 Run KSP when compiling the generated model files so the schema serializers are
-available at runtime.
+available at runtime. Generated request and response types are registered by
+the generated schema module used by the service companion, so service
+implementations do not perform manual serializer registration.
 
-## Server
+## Implement a Server
 
 Implement the generated coroutine base class and register it with a normal
 grpc-java server.
@@ -108,7 +124,7 @@ val server = ServerBuilder
 Unimplemented generated methods fail with gRPC `UNIMPLEMENTED`. Exceptions
 thrown by your service method follow grpc-kotlin server behavior.
 
-## Client
+## Create a Client
 
 Construct the generated coroutine stub directly from a grpc-java channel.
 
@@ -130,7 +146,18 @@ Channel construction, shutdown, deadlines, credentials, interceptors, load
 balancing, retries, and server lifecycle stay normal grpc-java/grpc-kotlin
 responsibilities.
 
-## Streaming
+## Streaming RPCs
+
+Fory service definitions can use the same gRPC streaming shapes:
+
+```protobuf
+service Greeter {
+  rpc SayHello (HelloRequest) returns (HelloReply);
+  rpc LotsOfReplies (HelloRequest) returns (stream HelloReply);
+  rpc LotsOfGreetings (stream HelloRequest) returns (HelloReply);
+  rpc Chat (stream HelloRequest) returns (stream HelloReply);
+}
+```
 
 Streaming RPCs use `kotlinx.coroutines.flow.Flow`.
 
@@ -144,6 +171,78 @@ Streaming RPCs use `kotlinx.coroutines.flow.Flow`.
 The generated method path keeps the exact service and method names from the
 schema, for example `/demo.greeter.Greeter/SayHello`.
 
+Server implementations can return or consume `Flow` values directly:
+
+```kotlin
+import demo.greeter.GreeterGrpcKt
+import demo.greeter.HelloReply
+import demo.greeter.HelloRequest
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.flow
+import kotlinx.coroutines.flow.map
+import kotlinx.coroutines.flow.toList
+
+class GreeterService : GreeterGrpcKt.GreeterCoroutineImplBase() {
+  override fun lotsOfReplies(request: HelloRequest): Flow<HelloReply> = flow {
+    emit(HelloReply(reply = "Hello, ${request.name}"))
+    emit(HelloReply(reply = "Welcome, ${request.name}"))
+  }
+
+  override suspend fun lotsOfGreetings(
+    requests: Flow<HelloRequest>
+  ): HelloReply {
+    val names = requests.toList().joinToString(", ") { it.name }
+    return HelloReply(reply = names)
+  }
+
+  override fun chat(requests: Flow<HelloRequest>): Flow<HelloReply> =
+    requests.map { request ->
+      HelloReply(reply = "Hello, ${request.name}")
+    }
+}
+```
+
+Generated clients expose the matching coroutine and Flow APIs:
+
+```kotlin
+import demo.greeter.HelloRequest
+import kotlinx.coroutines.flow.flowOf
+
+stub.lotsOfReplies(HelloRequest(name = "Fory")).collect { reply ->
+  println(reply.reply)
+}
+
+val summary = stub.lotsOfGreetings(
+  flowOf(
+    HelloRequest(name = "Ada"),
+    HelloRequest(name = "Grace"),
+  )
+)
+println(summary.reply)
+
+stub.chat(
+  flowOf(
+    HelloRequest(name = "Fory"),
+    HelloRequest(name = "RPC"),
+  )
+).collect { reply ->
+  println(reply.reply)
+}
+```
+
+## Operations
+
+The generated service code only replaces request and response serialization.
+All normal gRPC operational features still belong to grpc-java and
+grpc-kotlin:
+
+- Deadlines and cancellations
+- TLS and authentication
+- Name resolution and load balancing
+- Client and server interceptors
+- Status codes and metadata
+- Channel pooling and lifecycle management
+
 ## Interoperability
 
 Generated Kotlin service companions use Fory binary payloads inside gRPC
@@ -158,22 +257,22 @@ messages.
 
 ## Troubleshooting
 
-**Generated service file is missing**
+### Generated service file is missing
 
 Pass `--grpc` together with `--kotlin_out`. Schemas without service definitions
 only generate model files and the schema module.
 
-**Serializer class not found at runtime**
+### Serializer class not found at runtime
 
 Ensure KSP runs for the generated Kotlin model sources and that
 `fory-kotlin-ksp` uses the same Fory version as `fory-kotlin`.
 
-**gRPC classes are unresolved**
+### gRPC classes are unresolved
 
 Add grpc-java and grpc-kotlin dependencies to the application module. Fory
 Kotlin artifacts do not add those dependencies automatically.
 
-**A protobuf client cannot read responses**
+### A protobuf client cannot read responses
 
 Fory gRPC uses Fory binary protocol payloads, not protobuf wire-format messages.
 Use generated Fory gRPC companions on both sides for the same service schema.
diff --git a/docs/guide/python/grpc-support.md b/docs/guide/python/grpc-support.md
index c5106f91b0..946602be30 100644
--- a/docs/guide/python/grpc-support.md
+++ b/docs/guide/python/grpc-support.md
@@ -28,6 +28,13 @@ IDL, or FlatBuffers IDL and you want gRPC transport semantics with Fory payload
 encoding. Use standard protobuf gRPC code generation when clients or tools must
 consume protobuf message bytes directly.
 
+Generated Python companions currently target the synchronous `grpcio` API. Use
+regular `def` servicer methods, `grpc.server(...)`, `grpc.insecure_channel(...)`,
+and Python iterators or generators for streaming RPCs. The compiler does not
+generate `grpc.aio` stubs or service bases, so do not implement generated
+servicer methods as `async def` unless you add a custom adapter outside the
+generated companion.
+
 ## Install Dependencies
 
 Install `grpcio` alongside `pyfory`. The generated companion imports `grpc`, but
@@ -151,22 +158,57 @@ service Greeter {
 
 Generated Python code follows `grpcio` conventions:
 
-- Unary stubs call `channel.unary_unary(...)`.
-- Server-streaming stubs return an iterator over response objects.
-- Client-streaming stubs accept an iterator of request objects.
-- Bidirectional stubs accept a request iterator and return a response iterator.
-- Servicer methods use snake_case names and return either a single response or
-  an iterator, depending on the streaming shape.
+| IDL shape                                 | Servicer method shape                       | Stub method shape                  |
+| ----------------------------------------- | ------------------------------------------- | ---------------------------------- |
+| `rpc A (Req) returns (Res)`               | returns one response object                 | returns one response object        |
+| `rpc A (Req) returns (stream Res)`        | yields response objects                     | returns an iterator of responses   |
+| `rpc A (stream Req) returns (Res)`        | consumes an iterator and returns a response | accepts an iterator of requests    |
+| `rpc A (stream Req) returns (stream Res)` | consumes and yields iterators               | accepts and returns iterators      |
+
+Servicer methods use snake_case names, while generated descriptors preserve the
+exact IDL service and method names for the gRPC path.
 
-Example server-streaming implementation:
+Server implementations can use Python iterators directly:
 
 ```python
 class Greeter(demo_greeter_grpc.GreeterServicer):
     def lots_of_replies(self, request, context):
-        for index in range(3):
-            yield demo_greeter.HelloReply(
-                reply=f"Hello {request.name}, response {index}"
-            )
+        yield demo_greeter.HelloReply(reply=f"Hello, {request.name}")
+        yield demo_greeter.HelloReply(reply=f"Welcome, {request.name}")
+
+    def lots_of_greetings(self, request_iterator, context):
+        names = [request.name for request in request_iterator]
+        return demo_greeter.HelloReply(reply=", ".join(names))
+
+    def chat(self, request_iterator, context):
+        for request in request_iterator:
+            yield demo_greeter.HelloReply(reply=f"Hello, {request.name}")
+```
+
+Generated clients use the standard `grpcio` streaming call shapes:
+
+```python
+with grpc.insecure_channel("localhost:50051") as channel:
+    stub = demo_greeter_grpc.GreeterStub(channel)
+
+    for reply in stub.lots_of_replies(
+        demo_greeter.HelloRequest(name="Fory")
+    ):
+        print(reply.reply)
+
+    def greeting_requests():
+        yield demo_greeter.HelloRequest(name="Ada")
+        yield demo_greeter.HelloRequest(name="Grace")
+
+    summary = stub.lots_of_greetings(greeting_requests())
+    print(summary.reply)
+
+    def chat_requests():
+        yield demo_greeter.HelloRequest(name="Fory")
+        yield demo_greeter.HelloRequest(name="RPC")
+
+    for reply in stub.chat(chat_requests()):
+        print(reply.reply)
 ```
 
 ## Operations
diff --git a/docs/guide/rust/grpc-support.md b/docs/guide/rust/grpc-support.md
index ed636344a1..4c9ca55f6c 100644
--- a/docs/guide/rust/grpc-support.md
+++ b/docs/guide/rust/grpc-support.md
@@ -33,7 +33,7 @@ consume protobuf message bytes directly.
 Add `tonic` and `bytes` to the crate that compiles the generated service files.
 Fory Rust crates do not add gRPC as a hard dependency. Add `tokio` for async
 servers and clients, and `tokio-stream` when your service implementation needs
-to build streaming responses.
+to build streaming responses or request streams.
 
 ```toml
 [dependencies]
@@ -180,8 +180,117 @@ Generated Rust code follows tonic conventions:
 - The generated codec is used for every message frame, including streaming
   frames.
 
-Use the generated trait signatures as the source of truth for the concrete
-associated stream types in your service implementation.
+Use the generated trait signatures as the source of truth for concrete
+associated stream types in your service implementation:
+
+```rust
+use demo_greeter::{HelloReply, HelloRequest};
+use demo_greeter_service::Greeter;
+use std::pin::Pin;
+use tokio_stream::{self as stream, Stream, StreamExt};
+use tonic::{Request, Response, Status};
+
+#[derive(Default)]
+struct MyGreeter;
+
+type ReplyStream =
+    Pin<Box<dyn Stream<Item = Result<HelloReply, Status>> + Send + 'static>>;
+
+#[tonic::async_trait]
+impl Greeter for MyGreeter {
+    type LotsOfRepliesStream = ReplyStream;
+    type ChatStream = ReplyStream;
+
+    async fn lots_of_replies(
+        &self,
+        request: Request<HelloRequest>,
+    ) -> Result<Response<Self::LotsOfRepliesStream>, Status> {
+        let name = request.into_inner().name;
+        let replies = vec![
+            Ok(HelloReply {
+                reply: format!("Hello, {name}"),
+            }),
+            Ok(HelloReply {
+                reply: format!("Welcome, {name}"),
+            }),
+        ];
+        Ok(Response::new(Box::pin(stream::iter(replies))))
+    }
+
+    async fn lots_of_greetings(
+        &self,
+        request: Request<tonic::Streaming<HelloRequest>>,
+    ) -> Result<Response<HelloReply>, Status> {
+        let mut requests = request.into_inner();
+        let mut names = Vec::new();
+        while let Some(request) = requests.next().await {
+            names.push(request?.name);
+        }
+        Ok(Response::new(HelloReply {
+            reply: names.join(", "),
+        }))
+    }
+
+    async fn chat(
+        &self,
+        request: Request<tonic::Streaming<HelloRequest>>,
+    ) -> Result<Response<Self::ChatStream>, Status> {
+        let replies = request.into_inner().map(|request| {
+            request.map(|request| HelloReply {
+                reply: format!("Hello, {}", request.name),
+            })
+        });
+        Ok(Response::new(Box::pin(replies)))
+    }
+}
+```
+
+Generated clients return tonic streaming responses:
+
+```rust
+use demo_greeter::HelloRequest;
+use demo_greeter_service_grpc::greeter_client::GreeterClient;
+use tokio_stream as stream;
+
+let mut client = GreeterClient::connect("http://[::1]:50051").await?;
+
+let mut replies = client
+    .lots_of_replies(HelloRequest {
+        name: "Fory".to_string(),
+    })
+    .await?
+    .into_inner();
+while let Some(reply) = replies.message().await? {
+    println!("{}", reply.reply);
+}
+
+let greetings = stream::iter(vec![
+    HelloRequest {
+        name: "Ada".to_string(),
+    },
+    HelloRequest {
+        name: "Grace".to_string(),
+    },
+]);
+let summary = client.lots_of_greetings(greetings).await?.into_inner();
+println!("{}", summary.reply);
+
+let chat_requests = stream::iter(vec![
+    HelloRequest {
+        name: "Fory".to_string(),
+    },
+    HelloRequest {
+        name: "RPC".to_string(),
+    },
+]);
+let mut chat = client.chat(chat_requests).await?.into_inner();
+while let Some(reply) = chat.message().await? {
+    println!("{}", reply.reply);
+}
+```
+
+The generated descriptors preserve the exact IDL service and method names for
+the gRPC path.
 
 ## Thread Safety and Payload Types
 
diff --git a/docs/start/install.md b/docs/start/install.md
index 5bad416f44..5f4149333e 100644
--- a/docs/start/install.md
+++ b/docs/start/install.md
@@ -16,14 +16,14 @@ Use Maven to add Apache Fory™:
 <dependency>
   <groupId>org.apache.fory</groupId>
   <artifactId>fory-core</artifactId>
-  <version>1.1.0</version>
+  <version>1.2.0</version>
 </dependency>
 <!-- Optional row format support -->
 <!--
 <dependency>
   <groupId>org.apache.fory</groupId>
   <artifactId>fory-format</artifactId>
-  <version>1.1.0</version>
+  <version>1.2.0</version>
 </dependency>
 -->
 <!-- SIMD acceleration for array compression (Java 16+) -->
@@ -31,7 +31,7 @@ Use Maven to add Apache Fory™:
 <dependency>
   <groupId>org.apache.fory</groupId>
   <artifactId>fory-simd</artifactId>
-  <version>1.1.0</version>
+  <version>1.2.0</version>
 </dependency>
 -->
 ```
@@ -44,7 +44,7 @@ Scala 2.13 with Maven:
 <dependency>
   <groupId>org.apache.fory</groupId>
   <artifactId>fory-scala_2.13</artifactId>
-  <version>1.1.0</version>
+  <version>1.2.0</version>
 </dependency>
 ```
 
@@ -54,20 +54,20 @@ Scala 3 with Maven:
 <dependency>
   <groupId>org.apache.fory</groupId>
   <artifactId>fory-scala_3</artifactId>
-  <version>1.1.0</version>
+  <version>1.2.0</version>
 </dependency>
 ```
 
 Scala 2.13 with sbt:
 
 ```sbt
-libraryDependencies += "org.apache.fory" % "fory-scala_2.13" % "1.1.0"
+libraryDependencies += "org.apache.fory" % "fory-scala_2.13" % "1.2.0"
 ```
 
 Scala 3 with sbt:
 
 ```sbt
-libraryDependencies += "org.apache.fory" % "fory-scala_3" % "1.1.0"
+libraryDependencies += "org.apache.fory" % "fory-scala_3" % "1.2.0"
 ```
 
 ## Kotlin
@@ -78,7 +78,7 @@ Add Apache Fory™ Kotlin with Maven:
 <dependency>
   <groupId>org.apache.fory</groupId>
   <artifactId>fory-kotlin</artifactId>
-  <version>1.1.0</version>
+  <version>1.2.0</version>
 </dependency>
 ```
 
@@ -86,7 +86,7 @@ Add Apache Fory™ Kotlin with Maven:
 
 ```bash
 python -m pip install --upgrade pip
-pip install pyfory==1.1.0
+pip install pyfory==1.2.0
 ```
 
 ## Go
@@ -94,7 +94,7 @@ pip install pyfory==1.1.0
 Use the full Go module path `github.com/apache/fory/go/fory`:
 
 ```bash
-go get github.com/apache/fory/go/fory@v1.1.0
+go get github.com/apache/fory/go/fory@v1.2.0
 ```
 
 If your Go proxy has not picked up the new submodule tag yet, retry later or use `GOPROXY=direct` temporarily.
@@ -103,13 +103,13 @@ If your Go proxy has not picked up the new submodule tag yet, retry later or use
 
 ```toml
 [dependencies]
-fory = "1.1.0"
+fory = "1.2.0"
 ```
 
 Or use `cargo add`:
 
 ```bash
-cargo add fory@1.1.0
+cargo add fory@1.2.0
 ```
 
 ## JavaScript / TypeScript
@@ -132,7 +132,7 @@ Add Apache Fory™ Dart to `pubspec.yaml`:
 
 ```yaml
 dependencies:
-  fory: ^1.1.0
+  fory: ^1.2.0
 
 dev_dependencies:
   build_runner: ^2.4.13
@@ -149,12 +149,12 @@ dart run build_runner build --delete-conflicting-outputs
 Install the `Apache.Fory` NuGet package. It includes both the runtime and the source generator for `[ForyObject]` types.
 
 ```bash
-dotnet add package Apache.Fory --version 1.1.0
+dotnet add package Apache.Fory --version 1.2.0
 ```
 
 ```xml
 <ItemGroup>
-  <PackageReference Include="Apache.Fory" Version="1.1.0" />
+  <PackageReference Include="Apache.Fory" Version="1.2.0" />
 </ItemGroup>
 ```
 
@@ -164,7 +164,7 @@ Add Apache Fory™ from the GitHub repository with Swift Package Manager:
 
 ```swift
 dependencies: [
-    .package(url: "https://github.com/apache/fory.git", exact: "1.1.0")
+    .package(url: "https://github.com/apache/fory.git", exact: "1.2.0")
 ],
 targets: [
     .target(
diff --git a/docusaurus.config.ts b/docusaurus.config.ts
index 55149a4bc6..af340662e8 100644
--- a/docusaurus.config.ts
+++ b/docusaurus.config.ts
@@ -48,7 +48,7 @@ const config: Config = {
       {
         docs: {
           sidebarCollapsible: true,
-          lastVersion: '1.1.0',
+          lastVersion: '1.2.0',
           versions: {
             current: {
               label: 'dev',
diff --git a/i18n/en-US/docusaurus-plugin-content-docs/version-1.2.0/.keep b/i18n/en-US/docusaurus-plugin-content-docs/version-1.2.0/.keep
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/i18n/zh-CN/docusaurus-plugin-content-blog/2026-06-16-fory_1_2_0_release.md b/i18n/zh-CN/docusaurus-plugin-content-blog/2026-06-16-fory_1_2_0_release.md
new file mode 100644
index 0000000000..e2dca415d5
--- /dev/null
+++ b/i18n/zh-CN/docusaurus-plugin-content-blog/2026-06-16-fory_1_2_0_release.md
@@ -0,0 +1,338 @@
+---
+slug: fory_1_2_0_release
+title: Fory v1.2.0 发布
+authors: [chaokunyang]
+tags: [fory, java, kotlin, scala, android, python, rust, c++, go, c#, swift, dart, compiler]
+---
+
+Apache Fory 团队很高兴宣布 1.2.0 版本正式发布。本版本包含来自 9 位贡献者的 [38 个 PR](https://github.com/apache/fory/compare/v1.1.0...v1.2.0),并继续改进各支持语言的跨语言运行时。请访问 [Install 页面](https://fory.apache.org/docs/start/install) 获取各平台安装方式。
+
+## 发布亮点
+
+* 扩展 Go、Rust、Kotlin、Scala、C# 和 JavaScript 的 gRPC 生成支持,其中 JavaScript 同时支持 Node.js 和浏览器 gRPC-Web。
+* 改进跨语言兼容性,细化 register-by-name API,支持兼容模式下的标量字段读取转换,并让 native serialization 默认启用兼容模式。
+* 强化 Java 平台支持,增加 Java 9/16 `module-info` 生成,并为 JDK 25 移除 `sun.misc.Unsafe` 使用。
+* 通过更多读取检查、deflater 泄漏修复以及更安全的 serializer/type-info 错误处理提升运行时安全性和鲁棒性。
+* 优化兼容模式和 row-format 性能,包括更快的兼容读取、紧凑 row layout 缓存以及内联 custom-codec dispatch。
+* 提升 Rust、C++ 和 service 生成质量,包括更好的标识符转义、名称冲突处理、嵌套容器引用处理和 map 代码生成。
+
+## Java 25+ 不再依赖 `sun.misc.Unsafe`
+
+JDK 25 继续推动平台远离 `sun.misc.Unsafe`。Fory 1.2.0 为核心运行时增加了 Java 25 multi-release 实现,使应用在 JDK 25+ 上运行时,不再从 Fory 的有效 class graph 中解析 `sun.misc.Unsafe`。
+
+该实现仍保留 JDK 8-24 上的快速路径;但在 JDK 25+ 上会从 jar 的 versioned 区域加载替换类。这些替换类将字段访问和 memory-buffer 原语迁移到 JVM 支持的机制,例如 `VarHandle`、`MethodHandle`、数组和 `ByteBuffer`。绕过构造器的对象分配也会被显式处理:在 JDK 25+ 上,过去依赖 Unsafe allocation 的类应提供可访问的无参构造器、使用 record 构造,或注册自定义 serializer。
+
+这对 Java 用户是一个重要兼容性里程碑:应用运行在 Java 25 及之后版本时,Fory runtime 不再依赖已被终止弃用的 Unsafe API 路径。
+
+## 兼容标量字段读取
+
+兼容模式已经允许读写双方添加、删除和重排字段。Fory 1.2.0 将这个模型扩展到部分标量类型变更:当匹配到的顶层字段在 boolean、string、numeric 和 decimal 类型之间变化时,只要转换是无损的,reader 就可以完成反序列化。
+
+例如,`"123"` 可以读取为整数字段,`1` 或 `0` 可以读取为 boolean 字段,boolean 可以读取为 `1`/`0`,数字或 decimal 可以读取为规范字符串;数字 widening 或 narrowing 只有在不丢失范围或精度时才会成功。无效字符串、越界值、有损 float/integer 转换以及开启引用跟踪的标量类型变更会在反序列化时报错。该转换只应用于匹配到的兼容字段,不应用于根值或集合元素。
+
+下面示例展示 Rust、Python、Java 和 C++。兼容标量字段转换也支持 Fory 的所有兼容模式运行时:Java、Python、Rust、C++、Go、C#、Swift、Dart、JavaScript/TypeScript、Kotlin 和 Scala。
+
+Java 和 Python 的 xlang 与 native serialization 默认都启用兼容模式,也可以显式配置:
+
+```java
+Fory fory = Fory.builder()
+    .withXlang(true)
+    .withCompatible(true)
+    .build();
+```
+
+```python
+import pyfory
+
+fory = pyfory.Fory(xlang=True, compatible=True)
+native_fory = pyfory.Fory(xlang=False, compatible=True)
+```
+
+Rust 示例:
+
+```rust
+use fory::{Fory, ForyStruct};
+
+#[derive(ForyStruct)]
+struct MetricV1 {
+    value: i64,
+}
+
+#[derive(ForyStruct)]
+struct MetricV2 {
+    value: String,
+}
+
+let mut writer = Fory::builder().xlang(true).compatible(true).build();
+writer.register_by_name::<MetricV1>("example.Metric")?;
+
+let mut reader = Fory::builder().xlang(true).compatible(true).build();
+reader.register_by_name::<MetricV2>("example.Metric")?;
+
+let bytes = writer.serialize(&MetricV1 { value: 42 })?;
+let value: MetricV2 = reader.deserialize(&bytes)?;
+assert_eq!(value.value, "42");
+```
+
+Python 示例:
+
+```python
+from dataclasses import dataclass
+import pyfory
+
+@dataclass
+class MetricV1:
+    value: pyfory.Int64
+
+@dataclass
+class MetricV2:
+    value: str
+
+writer = pyfory.Fory(xlang=True, compatible=True)
+writer.register(MetricV1, name="example.Metric")
+
+reader = pyfory.Fory(xlang=True, compatible=True)
+reader.register(MetricV2, name="example.Metric")
+
+data = writer.dumps(MetricV1(42))
+assert reader.loads(data).value == "42"
+```
+
+Java 示例:
+
+```java
+public class MetricV1 {
+  public long value;
+}
+
+public class MetricV2 {
+  public String value;
+}
+
+Fory writer = Fory.builder().withXlang(true).withCompatible(true).build();
+writer.register(MetricV1.class, "example", "Metric");
+
+Fory reader = Fory.builder().withXlang(true).withCompatible(true).build();
+reader.register(MetricV2.class, "example", "Metric");
+
+MetricV1 source = new MetricV1();
+source.value = 42L;
+byte[] bytes = writer.serialize(source);
+MetricV2 value = reader.deserialize(bytes, MetricV2.class);
+assert value.value.equals("42");
+```
+
+C++ 示例:
+
+```cpp
+#include <cassert>
+#include <string>
+#include "fory/serialization/fory.h"
+
+using namespace fory::serialization;
+
+struct MetricV1 {
+  int64_t value;
+};
+FORY_STRUCT(MetricV1, value);
+
+struct MetricV2 {
+  std::string value;
+};
+FORY_STRUCT(MetricV2, value);
+
+auto writer = Fory::builder().xlang(true).compatible(true).build();
+auto reader = Fory::builder().xlang(true).compatible(true).build();
+
+writer.register_struct<MetricV1>("example", "Metric");
+reader.register_struct<MetricV2>("example", "Metric");
+
+auto bytes = writer.serialize(MetricV1{42}).value();
+auto value = reader.deserialize<MetricV2>(bytes).value();
+assert(value.value == "42");
+```
+
+反方向同样适用,例如将 `String` 字段值 `"42"` 读取为 `int64`,前提是字符串满足 Fory 严格的有限十进制语法,并且目标范围可以精确表示该值。
+
+## 生成 gRPC 支持
+
+Fory 1.2.0 扩展了 compiler 生成的 gRPC service companion。生成的 service 使用标准 gRPC transport、channel、deadline、metadata、interceptor、status code 和 streaming shape,但 request/response 对象使用 Fory 编码,而不是 protobuf message bytes。当 RPC 两端都由同一份 Fory IDL、protobuf IDL 或 FlatBuffers IDL 生成,并且你希望使用 gRPC 运维语义与 Fory payload 编码时,可以使用这种模式。
+
+生成 gRPC 现在覆盖 Java、Python、Go、Rust、C#、Scala、Kotlin 和 JavaScript/TypeScript。JavaScript 同时支持 Node.js gRPC 和浏览器 gRPC-Web client 生成。
+
+下面示例使用同一个 schema:
+
+```protobuf
+package demo.greeter;
+
+message HelloRequest {
+  string name = 1;
+}
+
+message HelloReply {
+  string reply = 1;
+}
+
+service Greeter {
+  rpc SayHello (HelloRequest) returns (HelloReply);
+}
+```
+
+Rust 生成基于 tonic 的 service API 和 binding module:
+
+```bash
+foryc service.fdl --rust_out=./generated/rust --grpc
+```
+
+```rust
+use demo_greeter::{HelloReply, HelloRequest};
+use demo_greeter_service::Greeter;
+use demo_greeter_service_grpc::greeter_client::GreeterClient;
+use demo_greeter_service_grpc::greeter_server::GreeterServer;
+
+tonic::transport::Server::builder()
+    .add_service(GreeterServer::new(MyGreeter::default()))
+    .serve(addr)
+    .await?;
+
+let mut client = GreeterClient::connect("http://[::1]:50051").await?;
+let reply = client.say_hello(HelloRequest { name: "Fory".into() }).await?;
+```
+
+Go 生成 grpc-go interface 和 Fory-backed `CodecV2`:
+
+```bash
+foryc service.fdl --go_out=./generated/go --grpc
+```
+
+```go
+server := grpc.NewServer(
+    grpc.ForceServerCodecV2(greeter.CodecV2{}),
+)
+greeter.RegisterGreeterServer(server, greeterService{})
+
+client := greeter.NewGreeterClient(conn)
+reply, err := client.SayHello(ctx, &greeter.HelloRequest{Name: "Fory"})
+```
+
+JavaScript 同时支持 Node.js gRPC 和浏览器 gRPC-Web:
+
+```bash
+foryc service.fdl --javascript_out=./generated/javascript --grpc --grpc-web
+```
+
+```ts
+import * as grpc from "@grpc/grpc-js";
+import { addGreeterService, createGreeterClient } from "./service_grpc";
+import { createGreeterWebPromiseClient } from "./service_grpc_web";
+
+addGreeterService(server, greeterHandlers);
+
+const nodeClient = createGreeterClient(
+  "localhost:50051",
+  grpc.credentials.createInsecure(),
+);
+nodeClient.sayHello({ name: "Fory" }, callback);
+
+const webClient = createGreeterWebPromiseClient("https://api.example.com");
+const reply = await webClient.sayHello({ name: "Fory" });
+```
+
+浏览器 gRPC-Web 遵循 gRPC-Web transport 限制:支持 unary 和 server-streaming 方法;client-streaming 和 bidirectional streaming 仍属于 Node.js/native gRPC 形态。
+
+Kotlin 生成 grpc-kotlin coroutine companion:
+
+```bash
+foryc service.fdl --kotlin_out=./generated/kotlin --grpc
+```
+
+```kotlin
+class GreeterService : GreeterGrpcKt.GreeterCoroutineImplBase() {
+  override suspend fun sayHello(request: HelloRequest): HelloReply =
+    HelloReply(reply = "Hello, ${request.name}")
+}
+
+val server = ServerBuilder
+  .forPort(50051)
+  .addService(GreeterService())
+  .build()
+  .start()
+
+val stub = GreeterGrpcKt.GreeterCoroutineStub(channel)
+val reply = stub.sayHello(HelloRequest(name = "Fory"))
+```
+
+Scala 生成 Scala 3 grpc-java companion,并提供更符合 Scala 使用习惯的 client handle:
+
+```bash
+foryc service.fdl --scala_out=./generated/scala --grpc
+```
+
+```scala
+final class GreeterService extends GreeterGrpc.GreeterImplBase {
+  override def sayHello(request: HelloRequest): HelloReply =
+    HelloReply(s"Hello, ${request.name}")
+}
+
+val server = ServerBuilder
+  .forPort(50051)
+  .addService(new GreeterService)
+  .build()
+  .start()
+
+val client = GreeterGrpc.newClient(channel)
+val reply = Await.result(client.sayHello(HelloRequest("Fory")).asFuture, 30.seconds)
+```
+
+生成的 gRPC companion 不会让核心 Fory 语言包强依赖 gRPC。应用按实际使用的 transport 添加依赖:Java 和 Scala 使用 grpc-java,Python 使用 `grpcio`,Go 使用 grpc-go,Rust 使用 `tonic`/`bytes`,C# 使用 .NET gRPC 包,JavaScript 使用 `@grpc/grpc-js` 或 `grpc-web`,Kotlin 使用 grpc-java/grpc-kotlin。
+
+## 功能特性
+
+* feat(java): add java9/16 module-info support,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3721
+* refactor(format): inline custom-codec dispatch in row codecs,作者 @stevenschlansker,见 https://github.com/apache/fory/pull/3716
+* perf(format): cache compact row layout per nested slot,作者 @stevenschlansker,见 https://github.com/apache/fory/pull/3717
+* feat(java): remove sun.misc.Unsafe for jdk25,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3702
+* feat(rust): support thread safe `Arc<dyn Any + Send + Sync>` type,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3736
+* refactor(rust): refactor sync send type,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3737
+* feat(xlang): refine register by name api,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3739
+* feat(xlang): support compatible scalar read conversions,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3740
+* feat: default compatible mode for native serialization,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3742
+* perf: optimize compatible mode read performance,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3743
+* feat(compiler): handle Rust identifier escaping and name collisions,作者 @BaldDemian,见 https://github.com/apache/fory/pull/3744
+* feat(go): implement grpc stub generation,作者 @ayush00git,见 https://github.com/apache/fory/pull/3698
+* refactor(compiler): generate C++ unordered map for Fory map,作者 @BaldDemian,见 https://github.com/apache/fory/pull/3745
+* feat(compiler): handle nested container ref pointer options in C++ compiler correctly,作者 @BaldDemian,见 https://github.com/apache/fory/pull/3735
+* feat: add more read checks,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3748
+* feat(compiler): support Rust gRPC code generation,作者 @BaldDemian,见 https://github.com/apache/fory/pull/3738
+* feat(cpp): support struct property accessors,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3751
+* feat(python): make scalar wire markers typing-friendly,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3756
+* feat(kotlin): add kotlin grpc support,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3757
+* feat(rust): make fory-derive generated code use exported api in fory rust lib,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3759
+* feat(scala): add generated grpc service support for scala,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3762
+* feat(csharp): add generated grpc support for C#,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3761
+* feat(javascript): add javascript gRPC support for nodejs/browser,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3760
+
+## Bug 修复
+
+* fix(go): return nil serializer on getTypeInfo err,作者 @ayush00git,见 https://github.com/apache/fory/pull/3719
+* fix(benchmarks): uses outdated google-java-format, upgrade spotless,作者 @stevenschlansker,见 https://github.com/apache/fory/pull/3722
+* fix(format): pass row body size, not full payload size, to BinaryRow.pointTo,作者 @stevenschlansker,见 https://github.com/apache/fory/pull/3715
+* fix(java): fix deflater memory leak,作者 @MNTMDEV,见 https://github.com/apache/fory/pull/3726
+* fix(compiler): handle nested container ref pointer options in Rust compiler correctly,作者 @BaldDemian,见 https://github.com/apache/fory/pull/3731
+* fix(java): ignore non-Scala/Lombok-style default helper methods,作者 @mandrean,见 https://github.com/apache/fory/pull/3733
+* fix(c++): std::unordered_map cannot be used in struct. (#3727),作者 @ruoruoniao,见 https://github.com/apache/fory/pull/3728
+* fix(grpc): fix rust/go grpc support,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3753
+* fix(cpp): align unsigned struct default encoding,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3754
+
+## 其他改进
+
+* chore(deps): fix vulnerable dependencies,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3741
+* chore: Bump MessagePack from 2.5.187 to 2.5.301,作者 @dependabot[bot],见 https://github.com/apache/fory/pull/3750
+* chore(deps): bump Go gRPC test dependencies,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3763
+
+## 新贡献者
+
+* @MNTMDEV 在 https://github.com/apache/fory/pull/3726 中完成了首次贡献
+* @ruoruoniao 在 https://github.com/apache/fory/pull/3728 中完成了首次贡献
+
+**完整变更日志**: https://github.com/apache/fory/compare/v1.1.0...v1.2.0
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/current/compiler/compiler-guide.md b/i18n/zh-CN/docusaurus-plugin-content-docs/current/compiler/compiler-guide.md
index a9e14644e7..16a2d40b27 100644
--- a/i18n/zh-CN/docusaurus-plugin-content-docs/current/compiler/compiler-guide.md
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs/current/compiler/compiler-guide.md
@@ -667,7 +667,7 @@ cc_library(
 
 ```yaml
 dependencies:
-  fory: ^1.1.0
+  fory: ^1.2.0
 
 dev_dependencies:
   build_runner: ^2.4.0
@@ -859,5 +859,5 @@ fory = "x.y.z"
 
 ```yaml
 dependencies:
-  fory: ^1.1.0
+  fory: ^1.2.0
 ```
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/cpp/index.md b/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/cpp/index.md
index 3b7a91eaa8..92599c21e3 100644
--- a/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/cpp/index.md
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/cpp/index.md
@@ -61,7 +61,7 @@ include(FetchContent)
 FetchContent_Declare(
     fory
     GIT_REPOSITORY https://github.com/apache/fory.git
-    GIT_TAG        v1.1.0
+    GIT_TAG        v1.2.0
     SOURCE_SUBDIR  cpp
 )
 FetchContent_MakeAvailable(fory)
@@ -91,11 +91,11 @@ module(
 
 bazel_dep(name = "rules_cc", version = "0.1.1")
 
-bazel_dep(name = "fory", version = "1.1.0")
+bazel_dep(name = "fory", version = "1.2.0")
 git_override(
     module_name = "fory",
     remote = "https://github.com/apache/fory.git",
-    commit = "v1.1.0",  # 或使用特定 commit hash 以确保可复现性
+    commit = "v1.2.0",  # 或使用特定 commit hash 以确保可复现性
 )
 ```
 
@@ -126,7 +126,7 @@ bazel run //:my_app
 对于本地开发,也可以改用 `local_path_override`:
 
 ```bazel
-bazel_dep(name = "fory", version = "1.1.0")
+bazel_dep(name = "fory", version = "1.2.0")
 local_path_override(
     module_name = "fory",
     path = "/path/to/fory",
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/csharp/grpc-support.md b/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/csharp/grpc-support.md
new file mode 100644
index 0000000000..d9d7636e07
--- /dev/null
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/csharp/grpc-support.md
@@ -0,0 +1,130 @@
+---
+title: gRPC 支持
+sidebar_position: 10
+id: grpc_support
+license: |
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+---
+
+Fory 可以为包含 service 定义的 schema 生成 C# gRPC service companion。生成代码使用标准 .NET
+gRPC API,而 request/response 对象使用 Fory payload 编码。
+
+当 RPC 两端都由同一份 Fory IDL、protobuf IDL 或 FlatBuffers IDL 生成,并且你希望使用
+gRPC 传输语义与 Fory payload 编码时,可以使用这种模式。如果 API 必须被通用 protobuf client
+消费,请使用标准 protobuf gRPC 代码生成。
+
+## 添加依赖
+
+Server project:
+
+```xml
+<ItemGroup>
+  <PackageReference Include="Apache.Fory" Version="1.2.0" />
+  <PackageReference Include="Grpc.AspNetCore" Version="2.71.0" />
+</ItemGroup>
+```
+
+Client project:
+
+```xml
+<ItemGroup>
+  <PackageReference Include="Apache.Fory" Version="1.2.0" />
+  <PackageReference Include="Grpc.Core.Api" Version="2.71.0" />
+  <PackageReference Include="Grpc.Net.Client" Version="2.71.0" />
+</ItemGroup>
+```
+
+根据应用使用的 .NET gRPC hosting/client package 调整依赖。`Apache.Fory` 不会把 gRPC 作为硬依赖。
+
+## 定义 Service
+
+```protobuf
+package demo.greeter;
+
+message HelloRequest {
+  string name = 1;
+}
+
+message HelloReply {
+  string reply = 1;
+}
+
+service Greeter {
+  rpc SayHello (HelloRequest) returns (HelloReply);
+}
+```
+
+生成 C# model 和 gRPC companion:
+
+```bash
+foryc service.fdl --csharp_out=./generated/csharp --grpc
+```
+
+生成 companion 会包含 service base、client、method descriptor,以及 Fory-backed request/response
+marshaller。
+
+## 实现 Server
+
+```csharp
+using Grpc.Core;
+
+public sealed class GreeterService : Greeter.GreeterBase
+{
+    public override Task<HelloReply> SayHello(
+        HelloRequest request,
+        ServerCallContext context)
+    {
+        return Task.FromResult(new HelloReply
+        {
+            Reply = $"Hello, {request.Name}"
+        });
+    }
+}
+```
+
+在 ASP.NET Core gRPC host 中注册生成 service,与普通 .NET gRPC service 一样管理 TLS、认证、
+interceptor、deadline 和 cancellation。
+
+## 创建 Client
+
+```csharp
+using Grpc.Net.Client;
+
+using var channel = GrpcChannel.ForAddress("https://localhost:50051");
+var client = new Greeter.GreeterClient(channel);
+var reply = await client.SayHelloAsync(new HelloRequest { Name = "Fory" });
+Console.WriteLine(reply.Reply);
+```
+
+生成 client 使用 Fory marshaller 编码 request/response。Call option、metadata、deadline 和
+credential 仍遵循 .NET gRPC 行为。
+
+## Streaming RPC
+
+Fory service 支持 unary、server-streaming、client-streaming 和 bidirectional streaming。生成 C#
+代码使用 .NET gRPC 的 `AsyncUnaryCall`、`AsyncServerStreamingCall`、`AsyncClientStreamingCall`
+和 `AsyncDuplexStreamingCall` 形态。
+
+## 故障排查
+
+### 缺少 `Grpc.*` 类型
+
+添加应用所需的 .NET gRPC package,例如 `Grpc.AspNetCore` 或 `Grpc.Net.Client`。
+
+### Protobuf Client 无法读取响应
+
+Fory gRPC 使用 Fory 二进制协议 payload,不是 protobuf wire-format message。请在两端使用同一份
+schema 生成的 Fory gRPC companion。
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/csharp/index.md b/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/csharp/index.md
index 71fd8870c7..94d9c269e5 100644
--- a/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/csharp/index.md
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/csharp/index.md
@@ -43,7 +43,7 @@ Apache Fory™ C# 是面向 .NET 的高性能跨语言序列化运行时。它
 
 ```xml
 <ItemGroup>
-  <PackageReference Include="Apache.Fory" Version="1.1.0" />
+  <PackageReference Include="Apache.Fory" Version="1.2.0" />
 </ItemGroup>
 ```
 
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/dart/index.md b/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/dart/index.md
index 29e7f1c42a..569fb7f5c1 100644
--- a/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/dart/index.md
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/dart/index.md
@@ -42,7 +42,7 @@ Apache Fory™ Dart 可以把 Dart 对象序列化为字节,再从字节反序
 
 ```yaml
 dependencies:
-  fory: ^1.1.0
+  fory: ^1.2.0
 
 dev_dependencies:
   build_runner: ^2.4.0
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/go/grpc-support.md b/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/go/grpc-support.md
new file mode 100644
index 0000000000..16a4422639
--- /dev/null
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/go/grpc-support.md
@@ -0,0 +1,195 @@
+---
+title: gRPC 支持
+sidebar_position: 13
+id: grpc_support
+license: |
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+---
+
+Fory 可以为包含 service 定义的 schema 生成 Go gRPC service companion。生成代码使用
+grpc-go 负责传输,并使用 Fory-backed `CodecV2` 编码 request 和 response payload。
+
+当 RPC 两端都由同一份 Fory IDL、protobuf IDL 或 FlatBuffers IDL 生成,并且你希望使用
+gRPC 传输语义与 Fory payload 编码时,可以使用这种模式。如果客户端或工具必须直接消费
+protobuf message bytes,请使用标准 protobuf gRPC 代码生成。
+
+## 添加依赖
+
+向 Go module 添加 grpc-go。Fory Go package 不会把 gRPC 作为硬依赖。
+
+```bash
+go get google.golang.org/grpc
+```
+
+生成代码也会导入 Fory Go module:
+
+```bash
+go get github.com/apache/fory/go/fory
+```
+
+## 定义 Service
+
+Service 定义可以来自 Fory IDL、protobuf IDL 或 FlatBuffers `rpc_service`:
+
+```protobuf
+package demo.greeter;
+
+message HelloRequest {
+  string name = 1;
+}
+
+message HelloReply {
+  string reply = 1;
+}
+
+service Greeter {
+  rpc SayHello (HelloRequest) returns (HelloReply);
+}
+```
+
+使用 `--grpc` 生成 Go model 和 gRPC companion:
+
+```bash
+foryc service.fdl --go_out=./generated/go --grpc
+```
+
+输出包含:
+
+| 文件                           | 用途                                 |
+| ------------------------------ | ------------------------------------ |
+| `greeter/demo_greeter.go`      | Fory model 类型和注册辅助逻辑        |
+| `greeter/demo_greeter_grpc.go` | grpc-go client、server interface 和 codec |
+
+生成的 Go 方法使用导出的 PascalCase 名称,例如 `SayHello`。底层 gRPC method path 保留
+schema 中的原始方法名,因此 `sayHello` 或 `say_hello` 等名称仍按 schema 拼写路由。
+
+## 实现 Server
+
+实现生成的 `GreeterServer` interface,使用生成的 Fory codec 创建 grpc-go server,并注册 service:
+
+```go
+package main
+
+import (
+    "context"
+    "log"
+    "net"
+
+    "google.golang.org/grpc"
+
+    "example.com/app/generated/go/greeter"
+)
+
+type greeterService struct {
+    greeter.UnimplementedGreeterServer
+}
+
+func (greeterService) SayHello(
+    ctx context.Context,
+    request *greeter.HelloRequest,
+) (*greeter.HelloReply, error) {
+    return &greeter.HelloReply{Reply: "Hello, " + request.Name}, nil
+}
+
+func main() {
+    listener, err := net.Listen("tcp", ":50051")
+    if err != nil {
+        log.Fatal(err)
+    }
+
+    server := grpc.NewServer(
+        grpc.ForceServerCodecV2(greeter.CodecV2{}),
+    )
+    greeter.RegisterGreeterServer(server, greeterService{})
+
+    if err := server.Serve(listener); err != nil {
+        log.Fatal(err)
+    }
+}
+```
+
+`grpc.ForceServerCodecV2(...)` 是必需的,它让 server 使用生成的 Fory codec 解码 frame,而不是默认 protobuf codec。
+
+## 创建 Client
+
+生成的 client constructor 接收 grpc-go connection。生成的 client 方法会为每次调用强制使用匹配的 Fory codec。
+
+```go
+package main
+
+import (
+    "context"
+    "fmt"
+    "log"
+    "time"
+
+    "google.golang.org/grpc"
+    "google.golang.org/grpc/credentials/insecure"
+
+    "example.com/app/generated/go/greeter"
+)
+
+func main() {
+    conn, err := grpc.NewClient(
+        "localhost:50051",
+        grpc.WithTransportCredentials(insecure.NewCredentials()),
+    )
+    if err != nil {
+        log.Fatal(err)
+    }
+    defer conn.Close()
+
+    client := greeter.NewGreeterClient(conn)
+
+    ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
+    defer cancel()
+
+    reply, err := client.SayHello(ctx, &greeter.HelloRequest{Name: "Fory"})
+    if err != nil {
+        log.Fatal(err)
+    }
+    fmt.Println(reply.Reply)
+}
+```
+
+## Streaming RPC
+
+Fory service 支持 unary、server-streaming、client-streaming 和 bidirectional streaming。生成 Go 代码遵循 grpc-go 约定:
+
+- Unary 方法接收 `context.Context` 和 request pointer,返回 response pointer 与 `error`。
+- Server-streaming client 方法返回生成的 stream client。
+- Client-streaming server 方法接收生成的 stream server。
+- Bidirectional streaming 使用生成的 stream client/server interface。
+- 每个 message frame 都使用生成 codec。
+
+## 运维语义
+
+生成的 service companion 只提供 Fory 序列化。deadline、取消、TLS、credential、unary/stream
+interceptor、status code、metadata、名称解析、负载均衡、连接生命周期和 backoff 都保持标准 grpc-go 行为。
+
+## 故障排查
+
+### 缺少 `google.golang.org/grpc`
+
+向 module 添加 grpc-go:
+
+```bash
+go get google.golang.org/grpc
+```
+
+### `grpc: error while marshaling`
+
+确认 client 和 server 都使用生成的 `CodecV2{}`,并且生成的 model 文件与 gRPC companion 编译在同一个 package 中。
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/java/compression.md b/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/java/compression.md
index 2b8c1c7d4f..e43ad76931 100644
--- a/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/java/compression.md
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/java/compression.md
@@ -84,7 +84,7 @@ CompressedArraySerializers.registerSerializers(fory);
 <dependency>
   <groupId>org.apache.fory</groupId>
   <artifactId>fory-simd</artifactId>
-  <version>1.1.0</version>
+  <version>1.2.0</version>
 </dependency>
 ```
 
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/java/grpc-support.md b/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/java/grpc-support.md
new file mode 100644
index 0000000000..77ac4ff649
--- /dev/null
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/java/grpc-support.md
@@ -0,0 +1,383 @@
+---
+title: gRPC 支持
+sidebar_position: 10
+id: grpc_support
+license: |
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+---
+
+Fory 可以为包含 service 定义的 schema 生成 Java gRPC service companion。生成的 service code
+使用普通 grpc-java channel、server、deadline、status code、interceptor 和 transport security,
+但 request/response 对象使用 Fory 序列化,而不是 protobuf。
+
+当两端都由同一份 Fory IDL、protobuf IDL 或 FlatBuffers IDL 生成,并且你希望使用 gRPC
+传输语义与 Fory payload 编码时,可以使用这种模式。如果 API 必须被通用 protobuf client、
+reflection 工具或期望 protobuf message bytes 的组件消费,请使用标准 protobuf gRPC 代码生成。
+
+Scala 生成的 grpc-java companion 见 [Scala gRPC 支持](../scala/grpc-support.md)。Kotlin
+coroutine stub 和 service base 见 [Kotlin gRPC 支持](../kotlin/grpc-support.md)。
+
+## 添加依赖
+
+生成的 Java service 文件编译时需要 grpc-java。Fory Java artifact 不会把 gRPC 作为硬依赖,
+因此请在应用中添加 grpc-java 依赖:
+
+```xml
+<dependency>
+  <groupId>org.apache.fory</groupId>
+  <artifactId>fory-core</artifactId>
+  <version>${fory.version}</version>
+</dependency>
+<dependency>
+  <groupId>io.grpc</groupId>
+  <artifactId>grpc-api</artifactId>
+  <version>${grpc.version}</version>
+</dependency>
+<dependency>
+  <groupId>io.grpc</groupId>
+  <artifactId>grpc-stub</artifactId>
+  <version>${grpc.version}</version>
+</dependency>
+<dependency>
+  <groupId>io.grpc</groupId>
+  <artifactId>grpc-netty-shaded</artifactId>
+  <version>${grpc.version}</version>
+</dependency>
+```
+
+Gradle 示例:
+
+```kotlin
+dependencies {
+  implementation("org.apache.fory:fory-core:$foryVersion")
+  implementation("io.grpc:grpc-api:$grpcVersion")
+  implementation("io.grpc:grpc-stub:$grpcVersion")
+  implementation("io.grpc:grpc-netty-shaded:$grpcVersion")
+}
+```
+
+## 定义 Service
+
+```protobuf
+package demo.greeter;
+
+message HelloRequest {
+  string name = 1;
+}
+
+message HelloReply {
+  string reply = 1;
+}
+
+service Greeter {
+  rpc SayHello (HelloRequest) returns (HelloReply);
+}
+```
+
+使用 `--grpc` 生成 Java model 和 gRPC companion:
+
+```bash
+foryc service.fdl --java_out=./generated/java --grpc
+```
+
+该 schema 会生成:
+
+| 文件                     | 用途                                  |
+| ------------------------ | ------------------------------------- |
+| `HelloRequest.java`      | request 的 Fory model 类型            |
+| `HelloReply.java`        | response 的 Fory model 类型           |
+| `GreeterForyModule.java` | 生成类型的 Fory 注册 module           |
+| `GreeterGrpc.java`       | grpc-java service base、stub 和 codec |
+
+生成的 method descriptor 使用 Fory-backed `MethodDescriptor.Marshaller`,因此不会调用 protobuf
+parser。
+
+## 实现 Server
+
+实现生成的 service base,并注册到标准 grpc-java `Server`:
+
+```java
+package demo.greeter;
+
+import io.grpc.Server;
+import io.grpc.ServerBuilder;
+import io.grpc.stub.StreamObserver;
+
+final class GreeterService extends GreeterGrpc.GreeterImplBase {
+  @Override
+  public void sayHello(
+      HelloRequest request, StreamObserver<HelloReply> responseObserver) {
+    HelloReply reply = new HelloReply();
+    reply.setReply("Hello, " + request.getName());
+    responseObserver.onNext(reply);
+    responseObserver.onCompleted();
+  }
+}
+
+public final class GreeterServer {
+  public static void main(String[] args) throws Exception {
+    Server server =
+        ServerBuilder.forPort(50051)
+            .addService(new GreeterService())
+            .build()
+            .start();
+    server.awaitTermination();
+  }
+}
+```
+
+生成代码负责注册和序列化 request/response 类型,service 实现不需要手动创建 Fory 实例。
+
+## 创建 Client
+
+使用普通 grpc-java channel 和生成 stub:
+
+```java
+package demo.greeter;
+
+import io.grpc.ManagedChannel;
+import io.grpc.ManagedChannelBuilder;
+
+public final class GreeterClient {
+  public static void main(String[] args) {
+    ManagedChannel channel =
+        ManagedChannelBuilder.forAddress("localhost", 50051)
+            .usePlaintext()
+            .build();
+    try {
+      GreeterGrpc.GreeterBlockingStub stub =
+          GreeterGrpc.newBlockingStub(channel);
+
+      HelloRequest request = new HelloRequest();
+      request.setName("Fory");
+      HelloReply reply = stub.sayHello(request);
+      System.out.println(reply.getReply());
+    } finally {
+      channel.shutdownNow();
+    }
+  }
+}
+```
+
+Channel lifecycle、deadline、credential、metadata、load balancing、retry 和 interceptor 都保持
+grpc-java 行为。
+
+## Streaming RPC
+
+Fory service 可以使用 gRPC 的所有 streaming shape:
+
+```protobuf
+service Greeter {
+  rpc SayHello (HelloRequest) returns (HelloReply);
+  rpc LotsOfReplies (HelloRequest) returns (stream HelloReply);
+  rpc LotsOfGreetings (stream HelloRequest) returns (HelloReply);
+  rpc Chat (stream HelloRequest) returns (stream HelloReply);
+}
+```
+
+生成 Java service 方法遵循 grpc-java 约定:
+
+| IDL shape                                 | Server 方法形态                                         | Client 方法形态                    |
+| ----------------------------------------- | ------------------------------------------------------- | ---------------------------------- |
+| `rpc A (Req) returns (Res)`               | `void a(Req request, StreamObserver<Res> responses)`    | blocking、async、future unary stub |
+| `rpc A (Req) returns (stream Res)`        | `void a(Req request, StreamObserver<Res> responses)`    | blocking iterator 或 async observer |
+| `rpc A (stream Req) returns (Res)`        | `StreamObserver<Req> a(StreamObserver<Res> responses)`  | async request observer             |
+| `rpc A (stream Req) returns (stream Res)` | `StreamObserver<Req> a(StreamObserver<Res> responses)`  | async request observer             |
+
+Server 可以直接实现生成的 streaming 方法:
+
+```java
+package demo.greeter;
+
+import io.grpc.stub.StreamObserver;
+import java.util.ArrayList;
+import java.util.List;
+
+final class GreeterService extends GreeterGrpc.GreeterImplBase {
+  @Override
+  public void lotsOfReplies(
+      HelloRequest request, StreamObserver<HelloReply> responseObserver) {
+    HelloReply first = new HelloReply();
+    first.setReply("Hello, " + request.getName());
+    responseObserver.onNext(first);
+
+    HelloReply second = new HelloReply();
+    second.setReply("Welcome, " + request.getName());
+    responseObserver.onNext(second);
+    responseObserver.onCompleted();
+  }
+
+  @Override
+  public StreamObserver<HelloRequest> lotsOfGreetings(
+      StreamObserver<HelloReply> responseObserver) {
+    List<String> names = new ArrayList<>();
+    return new StreamObserver<>() {
+      @Override
+      public void onNext(HelloRequest request) {
+        names.add(request.getName());
+      }
+
+      @Override
+      public void onError(Throwable error) {
+        responseObserver.onError(error);
+      }
+
+      @Override
+      public void onCompleted() {
+        HelloReply reply = new HelloReply();
+        reply.setReply(String.join(", ", names));
+        responseObserver.onNext(reply);
+        responseObserver.onCompleted();
+      }
+    };
+  }
+
+  @Override
+  public StreamObserver<HelloRequest> chat(
+      StreamObserver<HelloReply> responseObserver) {
+    return new StreamObserver<>() {
+      @Override
+      public void onNext(HelloRequest request) {
+        HelloReply reply = new HelloReply();
+        reply.setReply("Hello, " + request.getName());
+        responseObserver.onNext(reply);
+      }
+
+      @Override
+      public void onError(Throwable error) {
+        responseObserver.onError(error);
+      }
+
+      @Override
+      public void onCompleted() {
+        responseObserver.onCompleted();
+      }
+    };
+  }
+}
+```
+
+生成的 client 返回标准 grpc-java 调用形态:
+
+```java
+package demo.greeter;
+
+import io.grpc.stub.StreamObserver;
+import java.util.Iterator;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+
+final class StreamingClient {
+  private final GreeterGrpc.GreeterBlockingStub blockingStub;
+  private final GreeterGrpc.GreeterStub asyncStub;
+
+  StreamingClient(
+      GreeterGrpc.GreeterBlockingStub blockingStub,
+      GreeterGrpc.GreeterStub asyncStub) {
+    this.blockingStub = blockingStub;
+    this.asyncStub = asyncStub;
+  }
+
+  void run() throws InterruptedException {
+    Iterator<HelloReply> replies =
+        blockingStub.lotsOfReplies(newRequest("Fory"));
+    while (replies.hasNext()) {
+      System.out.println(replies.next().getReply());
+    }
+
+    CountDownLatch greetingsDone = new CountDownLatch(1);
+    StreamObserver<HelloRequest> greetings =
+        asyncStub.lotsOfGreetings(new StreamObserver<>() {
+          @Override
+          public void onNext(HelloReply reply) {
+            System.out.println(reply.getReply());
+          }
+
+          @Override
+          public void onError(Throwable error) {
+            greetingsDone.countDown();
+          }
+
+          @Override
+          public void onCompleted() {
+            greetingsDone.countDown();
+          }
+        });
+    greetings.onNext(newRequest("Ada"));
+    greetings.onNext(newRequest("Grace"));
+    greetings.onCompleted();
+    greetingsDone.await(5, TimeUnit.SECONDS);
+
+    CountDownLatch chatDone = new CountDownLatch(1);
+    StreamObserver<HelloRequest> chat =
+        asyncStub.chat(new StreamObserver<>() {
+          @Override
+          public void onNext(HelloReply reply) {
+            System.out.println(reply.getReply());
+          }
+
+          @Override
+          public void onError(Throwable error) {
+            chatDone.countDown();
+          }
+
+          @Override
+          public void onCompleted() {
+            chatDone.countDown();
+          }
+        });
+    chat.onNext(newRequest("Fory"));
+    chat.onCompleted();
+    chatDone.await(5, TimeUnit.SECONDS);
+  }
+
+  private static HelloRequest newRequest(String name) {
+    HelloRequest request = new HelloRequest();
+    request.setName(name);
+    return request;
+  }
+}
+```
+
+生成 descriptor 会保留 IDL 中的 service 和 method 名称作为 gRPC path。
+
+## 运维语义
+
+生成的 service code 只替换 request/response 序列化。常规 gRPC 运维能力仍由 grpc-java 提供:
+
+- Deadline 和取消
+- TLS 和认证
+- 名称解析与负载均衡
+- Client/server interceptor
+- Status code 和 metadata
+- Channel 池化与生命周期管理
+
+## 故障排查
+
+### 缺少 `io.grpc` 或 Guava 类
+
+添加上面的 grpc-java 依赖。生成的 Fory service 文件导入 grpc-java API,但 Fory Java artifact
+不会自动依赖 gRPC。
+
+### `UNIMPLEMENTED`
+
+确认生成的 service 实现已通过 `ServerBuilder.addService(...)` 注册,并且 client 与 server 来自相同
+package、service 和 method 名称。
+
+### Protobuf Client 无法解码
+
+Fory gRPC companion 不使用 protobuf wire encoding。请使用 Fory 生成的 client 调用 Fory 生成的
+service,或提供单独的 protobuf endpoint。
diff --git a/docs/guide/javascript/grpc-support.md b/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/javascript/grpc-support.md
similarity index 58%
copy from docs/guide/javascript/grpc-support.md
copy to i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/javascript/grpc-support.md
index 32ca805171..261f310900 100644
--- a/docs/guide/javascript/grpc-support.md
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/javascript/grpc-support.md
@@ -1,5 +1,5 @@
 ---
-title: gRPC Support
+title: gRPC 支持
 sidebar_position: 25
 id: grpc_support
 license: |
@@ -19,33 +19,38 @@ license: |
   limitations under the License.
 ---
 
-Fory can generate JavaScript service companions for schemas that define
-services. The generated service code uses normal gRPC transports while request
-and response objects are serialized with Fory instead of protobuf.
+Fory 可以为包含 service 定义的 schema 生成 JavaScript service companion。生成的 service code
+使用普通 gRPC transport,但 request 和 response 对象使用 Fory 序列化,而不是 protobuf。
 
-Use `--grpc` for Node.js server and client code. Use `--grpc-web` for browser
-clients that call a gRPC-Web compatible server or proxy.
+当 RPC 两端都由同一份 Fory IDL、protobuf IDL 或 FlatBuffers IDL 生成,并且两端都期望
+Fory 编码的 message body 时,可以使用这种模式。如果 API 必须被通用 protobuf client、
+reflection 工具或期望 protobuf message bytes 的组件消费,请使用标准 protobuf gRPC 代码生成。
 
-## Add Dependencies
+使用 `--grpc` 生成 Node.js server/client 代码;使用 `--grpc-web` 生成调用 gRPC-Web 兼容
+server 或 proxy 的浏览器 client。
 
-The generated model file depends on `@apache-fory/core`.
+## 添加依赖
 
-Node.js gRPC companions import `@grpc/grpc-js`:
+生成的 model 文件依赖 `@apache-fory/core`。
+
+Node.js gRPC companion 导入 `@grpc/grpc-js`:
 
 ```bash
 npm install @apache-fory/core @grpc/grpc-js
 ```
 
-Browser gRPC-Web companions import `grpc-web`:
+浏览器 gRPC-Web companion 导入 `grpc-web`:
 
 ```bash
 npm install @apache-fory/core grpc-web
 ```
 
-Fory does not add gRPC packages as hard dependencies. Add only the transport
-package used by your application.
+Fory 不会把 gRPC package 作为硬依赖。只需添加应用实际使用的 transport package。
+
+## 定义 Service
 
-## Define a Service
+Service 定义可以来自 Fory IDL、protobuf IDL 或 FlatBuffers `rpc_service`。Fory IDL service
+示例如下:
 
 ```protobuf
 package demo.greeter;
@@ -63,38 +68,33 @@ service Greeter {
 }
 ```
 
-Generate Node.js gRPC bindings:
+生成 Node.js gRPC binding:
 
 ```bash
 foryc service.fdl --javascript_out=./generated/javascript --grpc
 ```
 
-Generate browser gRPC-Web bindings:
+生成浏览器 gRPC-Web binding:
 
 ```bash
 foryc service.fdl --javascript_out=./generated/javascript --grpc-web
 ```
 
-Generate both:
+也可以同时生成:
 
 ```bash
 foryc service.fdl --javascript_out=./generated/javascript --grpc --grpc-web
 ```
 
-For `service.fdl`, JavaScript output contains:
-
-| File                  | Purpose                                       |
-| --------------------- | --------------------------------------------- |
-| `service.ts`          | Interfaces, enums, unions, and schema helpers |
-| `service_grpc.ts`     | Node.js `@grpc/grpc-js` server/client code    |
-| `service_grpc_web.ts` | Browser `grpc-web` clients                    |
+输出包含:
 
-The generated model file exports `registerXxxTypes(fory)` for custom `Fory`
-instances and default root helpers such as `serializeHelloRequest` and
-`deserializeHelloRequest`. Generated gRPC companions import those helpers
-automatically.
+| 文件                  | 用途                                  |
+| --------------------- | ------------------------------------- |
+| `service.ts`          | interface、enum、union 和 schema helper |
+| `service_grpc.ts`     | Node.js `@grpc/grpc-js` server/client |
+| `service_grpc_web.ts` | 浏览器 `grpc-web` client              |
 
-## Implement a Node.js Server
+## 实现 Node.js Server
 
 ```ts
 import * as grpc from "@grpc/grpc-js";
@@ -126,7 +126,7 @@ server.bindAsync(
 );
 ```
 
-## Create a Node.js Client
+## 创建 Node.js Client
 
 ```ts
 import * as grpc from "@grpc/grpc-js";
@@ -145,10 +145,9 @@ client.sayHello({ name: "Fory" }, (error, reply) => {
 });
 ```
 
-Use normal `@grpc/grpc-js` metadata, call options, credentials, deadlines, and
-interceptors with the generated client and server.
+可以继续使用普通 `@grpc/grpc-js` metadata、call option、credential、deadline 和 interceptor。
 
-## Create a Browser Client
+## 创建 Browser Client
 
 ```ts
 import { createGreeterWebClient } from "./generated/javascript/service_grpc_web";
@@ -166,7 +165,7 @@ client.sayHello({ name: "Fory" }, null, (error, reply) => {
 });
 ```
 
-For unary calls, the generated promise client is also available:
+Unary 调用也可以使用生成的 promise client:
 
 ```ts
 import { createGreeterWebPromiseClient } from "./generated/javascript/service_grpc_web";
@@ -176,9 +175,11 @@ const reply = await client.sayHello({ name: "Fory" });
 console.log(reply.reply);
 ```
 
-## Streaming RPCs
+## Streaming RPC
 
-Node.js companions support all gRPC streaming shapes:
+Node.js companion 支持所有 gRPC streaming shape。浏览器 gRPC-Web companion 支持 unary 和
+server-streaming;gRPC-Web 不支持 client-streaming 或 bidirectional streaming,compiler 会拒绝
+这些 shape 的 `--grpc-web` 生成。
 
 ```protobuf
 service Greeter {
@@ -189,12 +190,8 @@ service Greeter {
 }
 ```
 
-Browser gRPC-Web companions support unary and server-streaming methods. gRPC-Web
-does not support client-streaming or bidirectional methods; the compiler rejects
-those shapes for `--grpc-web`.
-
-Node.js server implementations use the normal `@grpc/grpc-js` streaming call
-objects:
+Node.js server 实现使用普通 `@grpc/grpc-js` streaming call object。生成 companion 只负责把 Fory
+payload 接入 gRPC,deadline、credential、metadata、interceptor 和错误语义仍遵循 gRPC 库行为。
 
 ```ts
 const greeter: GreeterHandlers = {
@@ -229,7 +226,7 @@ const greeter: GreeterHandlers = {
 };
 ```
 
-Node.js clients use the generated methods that match the RPC shape:
+Node.js client 使用与 RPC shape 对应的生成方法:
 
 ```ts
 const replies = client.lotsOfReplies({ name: "Fory" });
@@ -256,9 +253,8 @@ chat.write({ name: "Bob" });
 chat.end();
 ```
 
-For services with server-streaming methods, the generated gRPC-Web companion
-defaults to `grpcwebtext` wire format. Unary-only services default to
-`grpcweb`. You can choose the format explicitly:
+包含 server-streaming 方法的 service 中,生成的 gRPC-Web companion 默认使用 `grpcwebtext`
+编码格式。只有 unary 方法的 service 默认使用 `grpcweb`。也可以显式指定:
 
 ```ts
 const client = createGreeterWebClient("https://api.example.com", {
@@ -266,7 +262,7 @@ const client = createGreeterWebClient("https://api.example.com", {
 });
 ```
 
-Browser clients can consume server-streaming RPCs with the callback client:
+浏览器 client 可以用 callback client 消费 server-streaming RPC:
 
 ```ts
 const stream = client.lotsOfReplies({ name: "Fory" });
@@ -282,13 +278,29 @@ stream.on("end", () => {
 });
 ```
 
-## Operations
+## 运维语义
+
+生成的 service code 只替换 request/response 序列化。常规 gRPC 运维能力仍由 transport package
+提供:
+
+- TLS 和 credential
+- Metadata 和 status code
+- Deadline 和取消
+- Client/server interceptor
+- 负载均衡和部署相关 proxy 配置
+
+## 故障排查
+
+### 缺少 gRPC Package
+
+Node.js 添加 `@grpc/grpc-js`,浏览器添加 `grpc-web`。生成 model 仍需要 `@apache-fory/core`。
+
+### gRPC-Web Client-Streaming 或 Bidirectional RPC 被拒绝
+
+gRPC-Web 不支持 client-streaming 或 bidirectional streaming。对于这些 shape,请使用 `--grpc`
+生成 Node.js companion,或只向浏览器 client 暴露 unary 和 server-streaming 方法。
 
-Generated service code only replaces request and response serialization. Normal
-gRPC operational features still belong to the transport package:
+### Protobuf Client 无法读取响应
 
-- TLS and credentials
-- Metadata and status codes
-- Deadlines and cancellation
-- Client and server interceptors
-- Load balancing and deployment-specific proxy configuration
+Fory gRPC 使用 Fory 二进制协议 payload,不是 protobuf wire-format message。请在两端使用同一份
+schema 生成的 Fory gRPC companion。
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/kotlin/grpc-support.md b/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/kotlin/grpc-support.md
new file mode 100644
index 0000000000..d2e81792d3
--- /dev/null
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/kotlin/grpc-support.md
@@ -0,0 +1,257 @@
+---
+title: Kotlin gRPC 支持
+sidebar_position: 6
+id: grpc_support
+license: |
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+---
+
+Fory IDL 可以生成 Kotlin coroutine gRPC companion。生成的 gRPC 文件使用普通 grpc-java 和
+grpc-kotlin API,每个 request/response message 使用 Fory 序列化。
+
+当 RPC 两端都由同一份 Fory IDL、protobuf IDL 或 FlatBuffers IDL 生成,并且两端都期望
+Fory 编码的 message body 时,可以使用这种模式。如果 API 必须被通用 protobuf client、
+reflection 工具或期望 protobuf message bytes 的组件消费,请使用标准 protobuf gRPC 代码生成。
+
+## 添加依赖
+
+在编译生成源码的应用或 service module 中添加 Fory Kotlin、KSP、grpc-java、grpc-kotlin、
+coroutines 和一个 grpc-java transport:
+
+```kotlin
+plugins {
+  id("com.google.devtools.ksp") version "<ksp-version>"
+}
+
+dependencies {
+  implementation("org.apache.fory:fory-kotlin:<fory-version>")
+  ksp("org.apache.fory:fory-kotlin-ksp:<fory-version>")
+
+  implementation("io.grpc:grpc-api:<grpc-version>")
+  implementation("io.grpc:grpc-stub:<grpc-version>")
+  implementation("io.grpc:grpc-kotlin-stub:<grpc-kotlin-version>")
+  implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:<coroutines-version>")
+
+  runtimeOnly("io.grpc:grpc-netty-shaded:<grpc-version>")
+}
+```
+
+如果应用已经统一使用其他 grpc-java transport,可以替换 `grpc-netty-shaded`。生成的 Kotlin
+Fory gRPC 不需要 `grpc-protobuf` 来编码 payload。
+
+## 定义 Service
+
+Service 定义可以来自 Fory IDL、protobuf IDL 或 FlatBuffers `rpc_service`。Fory IDL service
+示例如下:
+
+```protobuf
+package demo.greeter;
+
+message HelloRequest {
+  string name = 1;
+}
+
+message HelloReply {
+  string reply = 1;
+}
+
+service Greeter {
+  rpc SayHello (HelloRequest) returns (HelloReply);
+}
+```
+
+使用 `--grpc` 生成 Kotlin model 和 gRPC companion:
+
+```bash
+foryc service.fdl --kotlin_out=./generated/kotlin --grpc
+```
+
+该 schema 会生成:
+
+| 文件                | 用途                                  |
+| ------------------- | ------------------------------------- |
+| `HelloRequest.kt`   | request 的 Fory model 类型            |
+| `HelloReply.kt`     | response 的 Fory model 类型           |
+| `ServiceForyModule` | 生成类型的 Fory 注册 module           |
+| `GreeterGrpcKt.kt`  | Coroutine service base、stub 和 codec |
+
+编译生成 model 文件时需要运行 KSP,以便 runtime 可以使用 schema serializer。生成的 request 和
+response 类型由 service companion 使用的 schema module 注册,service 实现不需要手动注册 serializer。
+
+## 实现 Server
+
+实现生成的 coroutine base class,并注册到普通 grpc-java server:
+
+```kotlin
+import demo.greeter.GreeterGrpcKt
+import demo.greeter.HelloReply
+import demo.greeter.HelloRequest
+import io.grpc.ServerBuilder
+
+class GreeterService : GreeterGrpcKt.GreeterCoroutineImplBase() {
+  override suspend fun sayHello(request: HelloRequest): HelloReply =
+    HelloReply(reply = "Hello, ${request.name}")
+}
+
+val server = ServerBuilder
+  .forPort(50051)
+  .addService(GreeterService())
+  .build()
+  .start()
+```
+
+未实现的生成方法会返回 gRPC `UNIMPLEMENTED`。Service 方法抛出的异常遵循 grpc-kotlin server 行为。
+
+## 创建 Client
+
+从 grpc-java channel 直接构造生成的 coroutine stub:
+
+```kotlin
+import demo.greeter.GreeterGrpcKt
+import demo.greeter.HelloRequest
+import io.grpc.ManagedChannelBuilder
+
+val channel = ManagedChannelBuilder
+  .forAddress("localhost", 50051)
+  .usePlaintext()
+  .build()
+
+val stub = GreeterGrpcKt.GreeterCoroutineStub(channel)
+val reply = stub.sayHello(HelloRequest(name = "Fory"))
+```
+
+Channel 构造、关闭、deadline、credential、interceptor、load balancing、retry 和 server lifecycle
+仍由 grpc-java/grpc-kotlin 负责。
+
+## Streaming RPC
+
+Fory service 可以使用 gRPC 的所有 streaming shape:
+
+```protobuf
+service Greeter {
+  rpc SayHello (HelloRequest) returns (HelloReply);
+  rpc LotsOfReplies (HelloRequest) returns (stream HelloReply);
+  rpc LotsOfGreetings (stream HelloRequest) returns (HelloReply);
+  rpc Chat (stream HelloRequest) returns (stream HelloReply);
+}
+```
+
+Streaming RPC 使用 `kotlinx.coroutines.flow.Flow`。
+
+| IDL shape                                 | Server 方法                              | Client 方法                              |
+| ----------------------------------------- | ---------------------------------------- | ---------------------------------------- |
+| `rpc A (Req) returns (Res)`               | `suspend fun a(request: Req): Res`       | `suspend fun a(request: Req): Res`       |
+| `rpc A (Req) returns (stream Res)`        | `fun a(request: Req): Flow<Res>`         | `fun a(request: Req): Flow<Res>`         |
+| `rpc A (stream Req) returns (Res)`        | `suspend fun a(requests: Flow<Req>): Res` | `suspend fun a(requests: Flow<Req>): Res` |
+| `rpc A (stream Req) returns (stream Res)` | `fun a(requests: Flow<Req>): Flow<Res>`  | `fun a(requests: Flow<Req>): Flow<Res>`  |
+
+生成 method path 保留 schema 中的 service 和 method 名称,例如 `/demo.greeter.Greeter/SayHello`。
+
+Server 可以直接返回或消费 `Flow`:
+
+```kotlin
+import demo.greeter.GreeterGrpcKt
+import demo.greeter.HelloReply
+import demo.greeter.HelloRequest
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.flow
+import kotlinx.coroutines.flow.map
+import kotlinx.coroutines.flow.toList
+
+class GreeterService : GreeterGrpcKt.GreeterCoroutineImplBase() {
+  override fun lotsOfReplies(request: HelloRequest): Flow<HelloReply> = flow {
+    emit(HelloReply(reply = "Hello, ${request.name}"))
+    emit(HelloReply(reply = "Welcome, ${request.name}"))
+  }
+
+  override suspend fun lotsOfGreetings(
+    requests: Flow<HelloRequest>
+  ): HelloReply {
+    val names = requests.toList().joinToString(", ") { it.name }
+    return HelloReply(reply = names)
+  }
+
+  override fun chat(requests: Flow<HelloRequest>): Flow<HelloReply> =
+    requests.map { request ->
+      HelloReply(reply = "Hello, ${request.name}")
+    }
+}
+```
+
+生成的 client 暴露对应的 coroutine 和 `Flow` API:
+
+```kotlin
+import demo.greeter.HelloRequest
+import kotlinx.coroutines.flow.flowOf
+
+stub.lotsOfReplies(HelloRequest(name = "Fory")).collect { reply ->
+  println(reply.reply)
+}
+
+val summary = stub.lotsOfGreetings(
+  flowOf(
+    HelloRequest(name = "Ada"),
+    HelloRequest(name = "Grace"),
+  )
+)
+println(summary.reply)
+
+stub.chat(
+  flowOf(
+    HelloRequest(name = "Fory"),
+    HelloRequest(name = "RPC"),
+  )
+).collect { reply ->
+  println(reply.reply)
+}
+```
+
+## 运维语义
+
+生成的 service code 只替换 request/response 序列化。常规 gRPC 运维能力仍由 grpc-java 和
+grpc-kotlin 提供:
+
+- Deadline 和取消
+- TLS 和认证
+- 名称解析与负载均衡
+- Client/server interceptor
+- Status code 和 metadata
+- Channel 池化与生命周期管理
+
+## 互操作性
+
+生成的 Kotlin service companion 在 gRPC frame 中使用 Fory 二进制 payload。它可以与从同一 schema
+生成的其他 Fory gRPC companion 互操作,例如 Java、Go、Python 和 Rust。通用 protobuf gRPC
+client 无法解码这些 payload。
+
+## 故障排查
+
+### 缺少生成的 service 文件
+
+同时传入 `--grpc` 和 `--kotlin_out`。没有 service 定义的 schema 只会生成 model 文件和 schema module。
+
+### 运行时找不到 serializer class
+
+确保生成的 Kotlin model source 运行了 KSP,并且 `fory-kotlin-ksp` 与 `fory-kotlin` 使用同一个 Fory 版本。
+
+### gRPC 类无法解析
+
+向应用 module 添加 grpc-java 和 grpc-kotlin 依赖。Fory Kotlin artifact 不会自动添加这些依赖。
+
+### Protobuf client 无法读取响应
+
+Fory gRPC 使用 Fory 二进制协议 payload,不是 protobuf wire-format message。请在两端使用同一份
+schema 生成的 Fory gRPC companion。
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/kotlin/index.md b/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/kotlin/index.md
index f7a2b53fbf..859dfa00f9 100644
--- a/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/kotlin/index.md
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/kotlin/index.md
@@ -50,14 +50,14 @@ Fory Kotlin 继承了 Fory Java 的全部特性,并增加了 Kotlin 特定优
 <dependency>
   <groupId>org.apache.fory</groupId>
   <artifactId>fory-kotlin</artifactId>
-  <version>1.1.0</version>
+  <version>1.2.0</version>
 </dependency>
 ```
 
 ### Gradle
 
 ```kotlin
-implementation("org.apache.fory:fory-kotlin:1.1.0")
+implementation("org.apache.fory:fory-kotlin:1.2.0")
 ```
 
 ## 快速开始
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/python/grpc-support.md b/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/python/grpc-support.md
new file mode 100644
index 0000000000..a144babf3f
--- /dev/null
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/python/grpc-support.md
@@ -0,0 +1,224 @@
+---
+title: gRPC 支持
+sidebar_position: 9
+id: grpc_support
+license: |
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+---
+
+Fory 可以为包含 service 定义的 schema 生成 Python gRPC companion module。生成代码使用
+`grpcio` 负责传输,request 和 response 对象使用 `pyfory` 序列化。
+
+当两端都由同一份 Fory IDL、protobuf IDL 或 FlatBuffers IDL 生成,并且你希望使用 gRPC
+传输语义与 Fory payload 编码时,可以使用这种模式。如果客户端或工具必须直接消费 protobuf
+message bytes,请使用标准 protobuf gRPC 代码生成。
+
+当前生成的 Python companion 面向同步 `grpcio` API。请使用普通 `def` servicer 方法、
+`grpc.server(...)`、`grpc.insecure_channel(...)`,并用 Python iterator/generator 处理
+streaming RPC。Compiler 不会生成 `grpc.aio` stub 或 service base,因此不要把生成 servicer
+方法实现成 `async def`,除非你在生成 companion 外自行封装 adapter。
+
+## 添加依赖
+
+```bash
+pip install pyfory grpcio
+```
+
+Fory Python package 不会把 gRPC 作为硬依赖;只有编译或运行生成 gRPC companion 的应用需要安装
+`grpcio`。
+
+## 定义 Service
+
+```protobuf
+package demo.greeter;
+
+message HelloRequest {
+  string name = 1;
+}
+
+message HelloReply {
+  string reply = 1;
+}
+
+service Greeter {
+  rpc SayHello (HelloRequest) returns (HelloReply);
+}
+```
+
+生成 Python model 和 gRPC companion:
+
+```bash
+foryc service.fdl --python_out=./generated/python --grpc
+```
+
+该 schema 会生成:
+
+| 文件                   | 用途                              |
+| ---------------------- | --------------------------------- |
+| `demo_greeter.py`      | Fory dataclass 和注册辅助逻辑     |
+| `demo_greeter_grpc.py` | `grpcio` stub、servicer base 和注册函数 |
+
+Module 名称来自 Fory package,点号会替换成下划线;没有 package 的 schema 使用 `generated.py` 和
+`generated_grpc.py`。
+
+## 实现 Server
+
+```python
+from concurrent import futures
+
+import grpc
+
+import demo_greeter
+import demo_greeter_grpc
+
+
+class Greeter(demo_greeter_grpc.GreeterServicer):
+    def say_hello(self, request, context):
+        return demo_greeter.HelloReply(reply=f"Hello, {request.name}")
+
+
+def serve():
+    server = grpc.server(futures.ThreadPoolExecutor(max_workers=8))
+    demo_greeter_grpc.add_servicer(Greeter(), server)
+    server.add_insecure_port("[::]:50051")
+    server.start()
+    server.wait_for_termination()
+
+
+if __name__ == "__main__":
+    serve()
+```
+
+## 创建 Client
+
+```python
+import grpc
+
+import demo_greeter
+import demo_greeter_grpc
+
+
+def main():
+    with grpc.insecure_channel("localhost:50051") as channel:
+        stub = demo_greeter_grpc.GreeterStub(channel)
+        reply = stub.say_hello(demo_greeter.HelloRequest(name="Fory"))
+        print(reply.reply)
+
+
+if __name__ == "__main__":
+    main()
+```
+
+Channel、credential、deadline、metadata、interceptor、retry 和 server lifecycle 都保持 `grpcio`
+行为。
+
+## Streaming RPC
+
+Fory service 可以使用 unary、server-streaming、client-streaming 和 bidirectional streaming:
+
+```protobuf
+service Greeter {
+  rpc SayHello (HelloRequest) returns (HelloReply);
+  rpc LotsOfReplies (HelloRequest) returns (stream HelloReply);
+  rpc LotsOfGreetings (stream HelloRequest) returns (HelloReply);
+  rpc Chat (stream HelloRequest) returns (stream HelloReply);
+}
+```
+
+生成 Python companion 遵循 `grpcio` 的 iterator/generator 约定:
+
+| IDL shape                                 | Servicer 方法形态                         | Stub 方法形态             |
+| ----------------------------------------- | ----------------------------------------- | ------------------------- |
+| `rpc A (Req) returns (Res)`               | 返回一个 response 对象                    | 返回一个 response 对象    |
+| `rpc A (Req) returns (stream Res)`        | yield 多个 response 对象                  | 返回 response iterator    |
+| `rpc A (stream Req) returns (Res)`        | 消费 request iterator 并返回一个 response | 接收 request iterator     |
+| `rpc A (stream Req) returns (stream Res)` | 消费 request iterator 并 yield response   | 接收并返回 iterator       |
+
+Servicer 方法使用 snake_case 名称;生成 descriptor 会保留 IDL 中的 service 和 method 名称作为
+gRPC path。每个 message frame 都通过 Fory serializer/deserializer 编码。
+
+Server 可以直接使用 Python iterator:
+
+```python
+class Greeter(demo_greeter_grpc.GreeterServicer):
+    def lots_of_replies(self, request, context):
+        yield demo_greeter.HelloReply(reply=f"Hello, {request.name}")
+        yield demo_greeter.HelloReply(reply=f"Welcome, {request.name}")
+
+    def lots_of_greetings(self, request_iterator, context):
+        names = [request.name for request in request_iterator]
+        return demo_greeter.HelloReply(reply=", ".join(names))
+
+    def chat(self, request_iterator, context):
+        for request in request_iterator:
+            yield demo_greeter.HelloReply(reply=f"Hello, {request.name}")
+```
+
+生成的 client 使用标准 `grpcio` streaming 调用形态:
+
+```python
+with grpc.insecure_channel("localhost:50051") as channel:
+    stub = demo_greeter_grpc.GreeterStub(channel)
+
+    for reply in stub.lots_of_replies(
+        demo_greeter.HelloRequest(name="Fory")
+    ):
+        print(reply.reply)
+
+    def greeting_requests():
+        yield demo_greeter.HelloRequest(name="Ada")
+        yield demo_greeter.HelloRequest(name="Grace")
+
+    summary = stub.lots_of_greetings(greeting_requests())
+    print(summary.reply)
+
+    def chat_requests():
+        yield demo_greeter.HelloRequest(name="Fory")
+        yield demo_greeter.HelloRequest(name="RPC")
+
+    for reply in stub.chat(chat_requests()):
+        print(reply.reply)
+```
+
+## 运维语义
+
+生成的 service companion 只提供 Fory serialization callback。运维行为仍遵循标准 `grpcio`:
+
+- Deadline 和取消
+- TLS 和认证 credential
+- Client/server interceptor
+- Status code、details 和 metadata
+- Channel/server 生命周期
+- 同步 server 的线程池大小
+
+## 故障排查
+
+### 缺少 `grpc`
+
+安装 `grpcio`:
+
+```bash
+pip install grpcio
+```
+
+### `UNIMPLEMENTED`
+
+确认生成的 servicer 已注册到 server,并且 client 与 server 来自相同 package、service 和 method 名称。
+
+### Protobuf Client 无法解码
+
+Fory gRPC 使用 Fory 二进制协议 payload,不是 protobuf wire-format message。两端应使用同一份
+schema 生成的 Fory gRPC companion。
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/rust/basic-serialization.md b/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/rust/basic-serialization.md
index 691f093e7c..76bfe93fa6 100644
--- a/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/rust/basic-serialization.md
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/rust/basic-serialization.md
@@ -143,7 +143,7 @@ let later = timestamp.checked_add_duration(duration)?;
 
 ```toml
 [dependencies]
-fory = { version = "1.1.0", features = ["chrono"] }
+fory = { version = "1.2.0", features = ["chrono"] }
 ```
 
 ### 自定义类型
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/rust/grpc-support.md b/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/rust/grpc-support.md
new file mode 100644
index 0000000000..b6c603b61f
--- /dev/null
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/rust/grpc-support.md
@@ -0,0 +1,311 @@
+---
+title: gRPC 支持
+sidebar_position: 12
+id: grpc_support
+license: |
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+---
+
+Fory 可以为包含 service 定义的 schema 生成 Rust gRPC service companion。生成代码使用
+`tonic` 负责传输,使用 Fory 序列化 request 和 response payload。
+
+当 RPC 两端都由同一份 Fory IDL、protobuf IDL 或 FlatBuffers IDL 生成,并且你希望使用
+gRPC 的传输语义与 Fory payload 编码时,可以使用这种模式。如果客户端或工具必须直接读取
+protobuf message bytes,请继续使用标准 protobuf gRPC 代码生成。
+
+## 添加依赖
+
+编译生成 service 文件的 crate 需要添加 `tonic` 和 `bytes`。Fory Rust crate 不会将
+gRPC 作为硬依赖。异步 server/client 还需要 `tokio`;如果 service 实现需要构造
+streaming response 或 request stream,可添加 `tokio-stream`。
+
+```toml
+[dependencies]
+fory = "1.2.0"
+bytes = "1"
+tonic = { version = "0.14", features = ["transport"] }
+tokio = { version = "1", features = ["macros", "rt-multi-thread"] }
+tokio-stream = "0.1"
+```
+
+请使用与应用服务栈兼容的依赖版本。
+
+## 定义 Service
+
+Service 定义可以来自 Fory IDL、protobuf IDL 或 FlatBuffers `rpc_service`。例如:
+
+```protobuf
+package demo.greeter;
+
+message HelloRequest {
+  string name = 1;
+}
+
+message HelloReply {
+  string reply = 1;
+}
+
+service Greeter {
+  rpc SayHello (HelloRequest) returns (HelloReply);
+}
+```
+
+使用 `--grpc` 生成 Rust model 和 gRPC companion:
+
+```bash
+foryc service.fdl --rust_out=./generated/rust --grpc
+```
+
+该 schema 会生成:
+
+| 文件                           | 用途                                |
+| ------------------------------ | ----------------------------------- |
+| `demo_greeter.rs`              | Fory model 类型和注册辅助逻辑       |
+| `demo_greeter_service.rs`      | 异步 service trait 与 gRPC path 常量 |
+| `demo_greeter_service_grpc.rs` | tonic client、server wrapper 和 Fory codec |
+
+将生成文件加入 crate root:
+
+```rust
+pub mod demo_greeter;
+pub mod demo_greeter_service;
+pub mod demo_greeter_service_grpc;
+```
+
+## 实现 Server
+
+实现生成的异步 trait,并把生成的 server wrapper 添加到普通 `tonic` server:
+
+```rust
+use demo_greeter::{HelloReply, HelloRequest};
+use demo_greeter_service::Greeter;
+use demo_greeter_service_grpc::greeter_server::GreeterServer;
+use tonic::{Request, Response, Status};
+
+#[derive(Default)]
+struct MyGreeter;
+
+#[tonic::async_trait]
+impl Greeter for MyGreeter {
+    async fn say_hello(
+        &self,
+        request: Request<HelloRequest>,
+    ) -> Result<Response<HelloReply>, Status> {
+        let request = request.into_inner();
+        Ok(Response::new(HelloReply {
+            reply: format!("Hello, {}", request.name),
+        }))
+    }
+}
+
+#[tokio::main]
+async fn main() -> Result<(), Box<dyn std::error::Error>> {
+    let addr = "[::1]:50051".parse()?;
+    tonic::transport::Server::builder()
+        .add_service(GreeterServer::new(MyGreeter::default()))
+        .serve(addr)
+        .await?;
+    Ok(())
+}
+```
+
+生成的 service code 会负责序列化 request 和 response 类型,service 实现中不需要手动注册 Fory。
+
+## 创建 Client
+
+使用生成的 tonic client:
+
+```rust
+use demo_greeter::HelloRequest;
+use demo_greeter_service_grpc::greeter_client::GreeterClient;
+
+#[tokio::main]
+async fn main() -> Result<(), Box<dyn std::error::Error>> {
+    let mut client = GreeterClient::connect("http://[::1]:50051").await?;
+    let response = client
+        .say_hello(HelloRequest {
+            name: "Fory".to_string(),
+        })
+        .await?;
+    println!("{}", response.into_inner().reply);
+    Ok(())
+}
+```
+
+Channel 配置、TLS、deadline、metadata、interceptor 和传输生命周期仍由 `tonic` 管理。
+
+## Streaming RPC
+
+Fory service 支持 unary、server-streaming、client-streaming 和 bidirectional streaming:
+
+```protobuf
+service Greeter {
+  rpc SayHello (HelloRequest) returns (HelloReply);
+  rpc LotsOfReplies (HelloRequest) returns (stream HelloReply);
+  rpc LotsOfGreetings (stream HelloRequest) returns (HelloReply);
+  rpc Chat (stream HelloRequest) returns (stream HelloReply);
+}
+```
+
+生成 Rust 代码遵循 tonic 约定:
+
+- Unary 方法使用 `tonic::Request<T>`,返回 `tonic::Response<U>`。
+- Server-streaming 方法返回内部值为 stream 的 response。
+- Client-streaming 和 bidirectional 方法接收 `tonic::Streaming<T>`。
+- 生成的 client module 暴露与 service 方法对应的异步方法。
+- 每个 message frame 都使用生成 codec,包括 streaming frame。
+
+生成 trait 签名是 service 实现中具体 associated stream type 的准确信息来源:
+
+```rust
+use demo_greeter::{HelloReply, HelloRequest};
+use demo_greeter_service::Greeter;
+use std::pin::Pin;
+use tokio_stream::{self as stream, Stream, StreamExt};
+use tonic::{Request, Response, Status};
+
+#[derive(Default)]
+struct MyGreeter;
+
+type ReplyStream =
+    Pin<Box<dyn Stream<Item = Result<HelloReply, Status>> + Send + 'static>>;
+
+#[tonic::async_trait]
+impl Greeter for MyGreeter {
+    type LotsOfRepliesStream = ReplyStream;
+    type ChatStream = ReplyStream;
+
+    async fn lots_of_replies(
+        &self,
+        request: Request<HelloRequest>,
+    ) -> Result<Response<Self::LotsOfRepliesStream>, Status> {
+        let name = request.into_inner().name;
+        let replies = vec![
+            Ok(HelloReply {
+                reply: format!("Hello, {name}"),
+            }),
+            Ok(HelloReply {
+                reply: format!("Welcome, {name}"),
+            }),
+        ];
+        Ok(Response::new(Box::pin(stream::iter(replies))))
+    }
+
+    async fn lots_of_greetings(
+        &self,
+        request: Request<tonic::Streaming<HelloRequest>>,
+    ) -> Result<Response<HelloReply>, Status> {
+        let mut requests = request.into_inner();
+        let mut names = Vec::new();
+        while let Some(request) = requests.next().await {
+            names.push(request?.name);
+        }
+        Ok(Response::new(HelloReply {
+            reply: names.join(", "),
+        }))
+    }
+
+    async fn chat(
+        &self,
+        request: Request<tonic::Streaming<HelloRequest>>,
+    ) -> Result<Response<Self::ChatStream>, Status> {
+        let replies = request.into_inner().map(|request| {
+            request.map(|request| HelloReply {
+                reply: format!("Hello, {}", request.name),
+            })
+        });
+        Ok(Response::new(Box::pin(replies)))
+    }
+}
+```
+
+生成的 client 返回 tonic streaming response:
+
+```rust
+use demo_greeter::HelloRequest;
+use demo_greeter_service_grpc::greeter_client::GreeterClient;
+use tokio_stream as stream;
+
+let mut client = GreeterClient::connect("http://[::1]:50051").await?;
+
+let mut replies = client
+    .lots_of_replies(HelloRequest {
+        name: "Fory".to_string(),
+    })
+    .await?
+    .into_inner();
+while let Some(reply) = replies.message().await? {
+    println!("{}", reply.reply);
+}
+
+let greetings = stream::iter(vec![
+    HelloRequest {
+        name: "Ada".to_string(),
+    },
+    HelloRequest {
+        name: "Grace".to_string(),
+    },
+]);
+let summary = client.lots_of_greetings(greetings).await?.into_inner();
+println!("{}", summary.reply);
+
+let chat_requests = stream::iter(vec![
+    HelloRequest {
+        name: "Fory".to_string(),
+    },
+    HelloRequest {
+        name: "RPC".to_string(),
+    },
+]);
+let mut chat = client.chat(chat_requests).await?.into_inner();
+while let Some(reply) = chat.message().await? {
+    println!("{}", reply.reply);
+}
+```
+
+生成 descriptor 会保留 IDL 中的 service 和 method 名称作为 gRPC path。
+
+## 线程安全与 Payload 类型
+
+Rust gRPC payload 必须满足 `Send + 'static`,这样 tonic 才能在线程间移动 request/response。
+如果 request 或 response schema 使用非线程安全的引用元信息,Rust gRPC 生成会拒绝该 service。
+
+## 运维语义
+
+生成的 service companion 只提供 Fory 序列化和 tonic binding。deadline、取消、TLS、认证、
+Tower middleware、interceptor、status code、metadata、channel/server 生命周期和 backpressure
+仍遵循标准 tonic 行为。
+
+## 故障排查
+
+### 缺少 `tonic` 或 `bytes`
+
+在编译生成 service 文件的 crate 中添加上述依赖。
+
+### `UNIMPLEMENTED`
+
+确认已通过 `Server::builder().add_service(...)` 添加生成的 server wrapper,并且 client 与
+server 来自相同的 package、service 和 method 名称。
+
+### 生成时报非线程安全引用错误
+
+Rust gRPC payload 必须满足 `Send + 'static`。请调整 request/response schema 使用线程安全
+引用形态,或不要把非线程安全类型放在 RPC 边界上。
+
+### Protobuf Client 无法解码 Service
+
+Fory gRPC companion 不使用 protobuf wire encoding。请使用 Fory 生成的 client 调用 Fory 生成的
+service,或为通用 protobuf client 提供单独的 protobuf service endpoint。
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/rust/index.md b/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/rust/index.md
index 04b0d2fb30..d6349d2e66 100644
--- a/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/rust/index.md
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/rust/index.md
@@ -47,7 +47,7 @@ Rust 实现提供灵活而高性能的序列化能力,具备自动内存管理
 
 ```toml
 [dependencies]
-fory = "1.1.0"
+fory = "1.2.0"
 ```
 
 ### 基础示例
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/scala/grpc-support.md b/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/scala/grpc-support.md
new file mode 100644
index 0000000000..dd1780dff2
--- /dev/null
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/scala/grpc-support.md
@@ -0,0 +1,169 @@
+---
+title: gRPC 支持
+sidebar_position: 6
+id: grpc_support
+license: |
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+---
+
+Fory 可以为包含 service 定义的 schema 生成 Scala 3 gRPC service companion。生成代码使用普通
+grpc-java channel、server、deadline、status code、interceptor 和 transport security,但
+request/response 对象使用 Fory 序列化,而不是 protobuf。
+
+当 RPC 两端都由同一份 Fory IDL、protobuf IDL 或 FlatBuffers IDL 生成,并且你希望使用
+gRPC 传输语义与 Fory payload 编码时,可以使用这种模式。如果 API 必须被通用 protobuf client
+或 reflection 工具消费,请使用标准 protobuf gRPC 代码生成。
+
+## 添加依赖
+
+生成的 Scala service 文件编译时需要 grpc-java。`fory-scala` artifact 不会把 gRPC 作为硬依赖:
+
+```sbt
+libraryDependencies ++= Seq(
+  "org.apache.fory" %% "fory-scala" % "<fory-version>",
+  "io.grpc" % "grpc-api" % "<grpc-version>",
+  "io.grpc" % "grpc-stub" % "<grpc-version>",
+  "io.grpc" % "grpc-netty-shaded" % "<grpc-version>"
+)
+```
+
+生成的 Scala model 和 gRPC companion 是 Scala 3 source。`fory-scala` 仍同时 cross-build
+Scala 2.13 和 Scala 3。
+
+## 定义 Service
+
+```protobuf
+package demo.greeter;
+
+message HelloRequest {
+  string name = 1;
+}
+
+message HelloReply {
+  string reply = 1;
+}
+
+service Greeter {
+  rpc SayHello (HelloRequest) returns (HelloReply);
+}
+```
+
+生成 Scala model 和 gRPC companion:
+
+```bash
+foryc service.fdl --scala_out=./generated/scala --grpc
+```
+
+输出包含:
+
+| 文件                      | 用途                               |
+| ------------------------- | ---------------------------------- |
+| `HelloRequest.scala`      | request 的 Fory model type         |
+| `HelloReply.scala`        | response 的 Fory model type        |
+| `GreeterForyModule.scala` | 生成类型的 Fory 注册 module        |
+| `GreeterGrpc.scala`       | grpc-java service base、client 和 codec |
+
+## 实现 Server
+
+继承生成的 `GreeterGrpc.GreeterImplBase`,并注册到标准 grpc-java `Server`:
+
+```scala
+package demo.greeter
+
+import io.grpc.ServerBuilder
+
+final class GreeterService extends GreeterGrpc.GreeterImplBase {
+  override def sayHello(request: HelloRequest): HelloReply =
+    HelloReply(s"Hello, ${request.name}")
+}
+
+@main def runServer(): Unit = {
+  val server = ServerBuilder
+    .forPort(50051)
+    .addService(new GreeterService)
+    .build()
+    .start()
+  server.awaitTermination()
+}
+```
+
+生成代码会注册 request/response 类型,service 实现不需要手动注册 serializer。
+
+## 创建 Client
+
+使用普通 grpc-java channel 和生成 client:
+
+```scala
+package demo.greeter
+
+import io.grpc.ManagedChannelBuilder
+import scala.concurrent.Await
+import scala.concurrent.duration.DurationInt
+
+@main def runClient(): Unit = {
+  val channel = ManagedChannelBuilder
+    .forAddress("localhost", 50051)
+    .usePlaintext()
+    .build()
+  try {
+    val client = GreeterGrpc.newClient(channel)
+    val call = client.sayHello(HelloRequest("Fory"))
+    val reply = Await.result(call.asFuture, 30.seconds)
+    println(reply.reply)
+  } finally {
+    channel.shutdownNow()
+  }
+}
+```
+
+Unary Scala-friendly 方法返回 `RpcFuture[A]`。调用者可以通过 `asFuture` 与 Scala `Future` 组合,
+并在需要提前取消 RPC 时调用 `cancel()`。
+
+## Streaming RPC
+
+Fory service 支持与 grpc-java 相同的 streaming shape:
+
+```protobuf
+service Greeter {
+  rpc SayHello (HelloRequest) returns (HelloReply);
+  rpc LotsOfReplies (HelloRequest) returns (stream HelloReply);
+  rpc LotsOfGreetings (stream HelloRequest) returns (HelloReply);
+  rpc Chat (stream HelloRequest) returns (stream HelloReply);
+}
+```
+
+| IDL shape               | Scala client convenience | grpc-java-style 方法                         |
+| ----------------------- | ------------------------ | -------------------------------------------- |
+| Unary                   | `RpcFuture[Resp]`        | async observer、blocking、`ListenableFuture` |
+| Server streaming        | `RpcIterator[Resp]`      | async observer 和 blocking iterator          |
+| Client streaming        | 无                       | `StreamObserver` request stream              |
+| Bidirectional streaming | 无                       | request/response `StreamObserver`            |
+
+Server-streaming 的 `RpcIterator[A]` 扩展 Scala `Iterator[A]` 和 `AutoCloseable`。如果调用者提前停止消费,
+应调用 `close()` 或 `cancel()` 释放底层 gRPC call。
+
+Client-streaming 和 bidirectional streaming 保持 grpc-java `StreamObserver` API,因为 request
+stream lifecycle、completion、cancellation 和 flow-control 规则都属于 grpc-java。
+
+## 故障排查
+
+### 缺少 grpc-java 类
+
+添加 `grpc-api`、`grpc-stub` 和一个 transport,例如 `grpc-netty-shaded`。
+
+### Protobuf Client 无法读取响应
+
+Fory gRPC 使用 Fory 二进制协议 payload。请在两端使用同一份 schema 生成的 Fory gRPC companion。
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/scala/index.md b/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/scala/index.md
index f6a0a3a685..f04891a0d4 100644
--- a/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/scala/index.md
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/scala/index.md
@@ -48,7 +48,7 @@ Fory Scala 继承了 Fory Java 的全部特性,并增加了 Scala 特定优化
 使用 sbt 添加依赖:
 
 ```sbt
-libraryDependencies += "org.apache.fory" %% "fory-scala" % "1.1.0"
+libraryDependencies += "org.apache.fory" %% "fory-scala" % "1.2.0"
 ```
 
 ## 快速开始
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/xlang/getting-started.md b/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/xlang/getting-started.md
index f8fe9b2946..f2b9a89e77 100644
--- a/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/xlang/getting-started.md
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/xlang/getting-started.md
@@ -31,14 +31,14 @@ license: |
 <dependency>
   <groupId>org.apache.fory</groupId>
   <artifactId>fory-core</artifactId>
-  <version>1.1.0</version>
+  <version>1.2.0</version>
 </dependency>
 ```
 
 **Gradle:**
 
 ```gradle
-implementation 'org.apache.fory:fory-core:1.1.0'
+implementation 'org.apache.fory:fory-core:1.2.0'
 ```
 
 ### Python
@@ -57,7 +57,7 @@ go get github.com/apache/fory/go/fory
 
 ```toml
 [dependencies]
-fory = "1.1.0"
+fory = "1.2.0"
 ```
 
 ### JavaScript/TypeScript
@@ -75,13 +75,13 @@ npm install @apache-fory/core @apache-fory/hps
 ### C\#
 
 ```bash
-dotnet add package Apache.Fory --version 1.1.0
+dotnet add package Apache.Fory --version 1.2.0
 ```
 
 ### Dart
 
 ```bash
-dart pub add fory:^1.1.0
+dart pub add fory:^1.2.0
 dart pub add dev:build_runner
 ```
 
@@ -91,20 +91,20 @@ dart pub add dev:build_runner
 
 ```swift
 dependencies: [
-  .package(url: "https://github.com/apache/fory.git", exact: "1.1.0")
+  .package(url: "https://github.com/apache/fory.git", exact: "1.2.0")
 ]
 ```
 
 ### Scala
 
 ```scala
-libraryDependencies += "org.apache.fory" %% "fory-scala" % "1.1.0"
+libraryDependencies += "org.apache.fory" %% "fory-scala" % "1.2.0"
 ```
 
 ### Kotlin
 
 ```kotlin
-implementation("org.apache.fory:fory-kotlin:1.1.0")
+implementation("org.apache.fory:fory-kotlin:1.2.0")
 ```
 
 ### C++
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/current/start/install.md b/i18n/zh-CN/docusaurus-plugin-content-docs/current/start/install.md
index d29a4f0d96..5c43f4d64b 100644
--- a/i18n/zh-CN/docusaurus-plugin-content-docs/current/start/install.md
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs/current/start/install.md
@@ -16,14 +16,14 @@ Apache Fory™ 同时提供源码发布物和各语言对应的软件包。
 <dependency>
   <groupId>org.apache.fory</groupId>
   <artifactId>fory-core</artifactId>
-  <version>1.1.0</version>
+  <version>1.2.0</version>
 </dependency>
 <!-- 可选的 row format 支持 -->
 <!--
 <dependency>
   <groupId>org.apache.fory</groupId>
   <artifactId>fory-format</artifactId>
-  <version>1.1.0</version>
+  <version>1.2.0</version>
 </dependency>
 -->
 <!-- 用于数组压缩的 SIMD 加速(Java 16+) -->
@@ -31,7 +31,7 @@ Apache Fory™ 同时提供源码发布物和各语言对应的软件包。
 <dependency>
   <groupId>org.apache.fory</groupId>
   <artifactId>fory-simd</artifactId>
-  <version>1.1.0</version>
+  <version>1.2.0</version>
 </dependency>
 -->
 ```
@@ -44,7 +44,7 @@ Scala 2.13 的 Maven 依赖:
 <dependency>
   <groupId>org.apache.fory</groupId>
   <artifactId>fory-scala_2.13</artifactId>
-  <version>1.1.0</version>
+  <version>1.2.0</version>
 </dependency>
 ```
 
@@ -54,20 +54,20 @@ Scala 3 的 Maven 依赖:
 <dependency>
   <groupId>org.apache.fory</groupId>
   <artifactId>fory-scala_3</artifactId>
-  <version>1.1.0</version>
+  <version>1.2.0</version>
 </dependency>
 ```
 
 Scala 2.13 的 sbt 依赖:
 
 ```sbt
-libraryDependencies += "org.apache.fory" % "fory-scala_2.13" % "1.1.0"
+libraryDependencies += "org.apache.fory" % "fory-scala_2.13" % "1.2.0"
 ```
 
 Scala 3 的 sbt 依赖:
 
 ```sbt
-libraryDependencies += "org.apache.fory" % "fory-scala_3" % "1.1.0"
+libraryDependencies += "org.apache.fory" % "fory-scala_3" % "1.2.0"
 ```
 
 ## Kotlin
@@ -78,7 +78,7 @@ libraryDependencies += "org.apache.fory" % "fory-scala_3" % "1.1.0"
 <dependency>
   <groupId>org.apache.fory</groupId>
   <artifactId>fory-kotlin</artifactId>
-  <version>1.1.0</version>
+  <version>1.2.0</version>
 </dependency>
 ```
 
@@ -86,7 +86,7 @@ libraryDependencies += "org.apache.fory" % "fory-scala_3" % "1.1.0"
 
 ```bash
 python -m pip install --upgrade pip
-pip install pyfory==1.1.0
+pip install pyfory==1.2.0
 ```
 
 ## Go
@@ -94,7 +94,7 @@ pip install pyfory==1.1.0
 请使用完整的 Go 模块路径 `github.com/apache/fory/go/fory`:
 
 ```bash
-go get github.com/apache/fory/go/fory@v1.1.0
+go get github.com/apache/fory/go/fory@v1.2.0
 ```
 
 如果你的 Go proxy 还没有同步新的子模块 tag,请稍后重试,或者临时使用 `GOPROXY=direct`。
@@ -103,13 +103,13 @@ go get github.com/apache/fory/go/fory@v1.1.0
 
 ```toml
 [dependencies]
-fory = "1.1.0"
+fory = "1.2.0"
 ```
 
 或者使用 `cargo add`:
 
 ```bash
-cargo add fory@1.1.0
+cargo add fory@1.2.0
 ```
 
 ## JavaScript / TypeScript
@@ -132,7 +132,7 @@ npm install @apache-fory/hps
 
 ```yaml
 dependencies:
-  fory: ^1.1.0
+  fory: ^1.2.0
 
 dev_dependencies:
   build_runner: ^2.4.13
@@ -149,12 +149,12 @@ dart run build_runner build --delete-conflicting-outputs
 安装 `Apache.Fory` NuGet 包。它同时包含运行时以及 `[ForyObject]` 类型所需的源代码生成器。
 
 ```bash
-dotnet add package Apache.Fory --version 1.1.0
+dotnet add package Apache.Fory --version 1.2.0
 ```
 
 ```xml
 <ItemGroup>
-  <PackageReference Include="Apache.Fory" Version="1.1.0" />
+  <PackageReference Include="Apache.Fory" Version="1.2.0" />
 </ItemGroup>
 ```
 
@@ -164,7 +164,7 @@ dotnet add package Apache.Fory --version 1.1.0
 
 ```swift
 dependencies: [
-    .package(url: "https://github.com/apache/fory.git", exact: "1.1.0")
+    .package(url: "https://github.com/apache/fory.git", exact: "1.2.0")
 ],
 targets: [
     .target(
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0.json b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0.json
new file mode 100644
index 0000000000..2465a530e7
--- /dev/null
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0.json
@@ -0,0 +1,26 @@
+{
+  "version.label": {
+    "message": "1.2.0",
+    "description": "The label for version 1.2.0"
+  },
+  "sidebar.docsSidebar.category.Introduction": {
+    "message": "介绍",
+    "description": "The label for category Introduction in sidebar docsSidebar"
+  },
+  "sidebar.docsSidebar.category.Start": {
+    "message": "快速开始",
+    "description": "The label for category Start in sidebar docsSidebar"
+  },
+  "sidebar.docsSidebar.category.Schema IDL & Compiler": {
+    "message": "Schema IDL 与编译器",
+    "description": "The label for category Schema IDL & Compiler in sidebar docsSidebar"
+  },
+  "sidebar.docsSidebar.category.Guide": {
+    "message": "用户指南",
+    "description": "The label for category Guide in sidebar docsSidebar"
+  },
+  "sidebar.docsSidebar.category.Cross Language": {
+    "message": "跨语言",
+    "description": "The label for category Cross Language in sidebar docsSidebar"
+  }
+}
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/cpp/README.md b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/cpp/README.md
new file mode 100644
index 0000000000..53e1284bea
--- /dev/null
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/cpp/README.md
@@ -0,0 +1,78 @@
+# C++ 基准性能报告
+
+_生成于 2026-05-08 17:54:45_
+
+## 如何生成本报告
+
+```bash
+cd benchmarks/cpp/build
+./fory_benchmark --benchmark_format=json --benchmark_out=benchmark_results.json
+cd ..
+python benchmark_report.py --json-file build/benchmark_results.json --output-dir report
+```
+
+## 基准图表
+
+图表展示吞吐量(ops/sec);数值越高越好。
+
+![Throughput](throughput.png)
+
+## 硬件与操作系统信息
+
+| 键                        | 值                     |
+| -------------------------- | ------------------------- |
+| 操作系统                         | Darwin 24.6.0             |
+| 机器架构                    | arm64                     |
+| 处理器                  | arm                       |
+| CPU 核心数(物理)       | 12                        |
+| CPU 核心数(逻辑)        | 12                        |
+| 总内存(GB)             | 48.0                      |
+| 基准日期             | 2026-05-08T16:29:28+08:00 |
+| CPU 核心数(基准采集) | 12                        |
+
+## 基准结果
+
+### 延迟结果(纳秒)
+
+| 数据类型          | 操作   | fory (ns) | protobuf (ns) | msgpack (ns) | 最快 |
+| ----------------- | ---- | --------- | ------------- | ------------ | ------- |
+| NumericStruct     | 序列化   | 24.9      | 48.2          | 91.0         | fory    |
+| NumericStruct     | 反序列化 | 26.6      | 33.0          | 1194.5       | fory    |
+| Sample            | 序列化   | 62.3      | 97.3          | 314.6        | fory    |
+| Sample            | 反序列化 | 371.1     | 689.0         | 2649.9       | fory    |
+| MediaContent      | 序列化   | 115.0     | 857.2         | 311.7        | fory    |
+| MediaContent      | 反序列化 | 406.5     | 1193.1        | 3311.1       | fory    |
+| NumericStructList | 序列化   | 81.7      | 495.0         | 485.6        | fory    |
+| NumericStructList | 反序列化 | 180.9     | 410.6         | 5733.1       | fory    |
+| SampleList        | 序列化   | 284.9     | 5004.9        | 1579.6       | fory    |
+| SampleList        | 反序列化 | 1928.7    | 5118.1        | 13396.8      | fory    |
+| MediaContentList  | 序列化   | 464.8     | 4861.1        | 1671.1       | fory    |
+| MediaContentList  | 反序列化 | 2099.8    | 6610.3        | 13963.4      | fory    |
+
+### 吞吐结果(ops/sec)
+
+| 数据类型          | 操作   | fory TPS   | protobuf TPS | msgpack TPS | 最快 |
+| ----------------- | ---- | ---------- | ------------ | ---- | ------- |
+| NumericStruct     | 序列化   | 40,087,668 | 20,733,305   | 10,989,907  | fory    |
+| NumericStruct     | 反序列化 | 37,606,127 | 30,296,744   | 837,189     | fory    |
+| Sample            | 序列化   | 16,041,299 | 10,277,207   | 3,178,983   | fory    |
+| Sample            | 反序列化 | 2,694,434  | 1,451,449    | 377,373     | fory    |
+| MediaContent      | 序列化   | 8,698,574  | 1,166,539    | 3,208,626   | fory    |
+| MediaContent      | 反序列化 | 2,460,094  | 838,185      | 302,013     | fory    |
+| NumericStructList | 序列化   | 12,240,275 | 2,020,102    | 2,059,276   | fory    |
+| NumericStructList | 反序列化 | 5,527,333  | 2,435,246    | 174,427     | fory    |
+| SampleList        | 序列化   | 3,510,210  | 199,804      | 633,061     | fory    |
+| SampleList        | 反序列化 | 518,490    | 195,386      | 74,645      | fory    |
+| MediaContentList  | 序列化   | 2,151,560  | 205,715      | 598,396     | fory    |
+| MediaContentList  | 反序列化 | 476,241    | 151,280      | 71,616      | fory    |
+
+### 序列化数据大小(字节)
+
+| 数据类型          | fory | protobuf | msgpack |
+| ----------------- | ---- | -------- | ------- |
+| NumericStruct     | 78   | 93       | 87      |
+| Sample            | 445  | 375      | 530     |
+| MediaContent      | 362  | 301      | 480     |
+| NumericStructList | 255  | 475      | 449     |
+| SampleList        | 1978 | 1890     | 2664    |
+| MediaContentList  | 1531 | 1520     | 2421    |
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/cpp/throughput.png b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/cpp/throughput.png
new file mode 100644
index 0000000000..4ae6119fa7
Binary files /dev/null and b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/cpp/throughput.png differ
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/csharp/README.md b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/csharp/README.md
new file mode 100644
index 0000000000..f4c27a9e76
--- /dev/null
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/csharp/README.md
@@ -0,0 +1,89 @@
+# C# 基准性能报告
+
+_生成于 2026-05-08 17:54:45_
+
+## 如何生成本报告
+
+```bash
+cd benchmarks/csharp
+dotnet run -c Release --project ./Fory.CSharpBenchmark.csproj -- --output build/benchmark_results.json
+python3 benchmark_report.py --json-file build/benchmark_results.json --output-dir report
+```
+
+## 基准图表
+
+图表展示吞吐量(ops/sec);数值越高越好。
+
+![Throughput](throughput.png)
+
+## 硬件与操作系统信息
+
+| 键                                | 值                                                                                                                        |
+| ---------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
+| 操作系统                                 | Darwin 24.6.0 Darwin Kernel Version 24.6.0: Wed Oct 15 21:12:15 PDT 2025; root:xnu-11417.140.69.703.14~1/RELEASE_ARM64_T6041 |
+| 操作系统 Architecture                    | Arm64                                                                                                                        |
+| 机器架构                            | Arm64                                                                                                                        |
+| 运行时版本                    | 8.0.24                                                                                                                       |
+| 基准日期(UTC)               | 2026-05-08T08:17:48.7871870Z                                                                                                 |
+| 预热秒数                     | 1                                                                                                                            |
+| 持续秒数                   | 3                                                                                                                            |
+| CPU 逻辑核心数(基准采集) | 12                                                                                                                           |
+| CPU 核心数(物理)               | 12                                                                                                                           |
+| CPU 核心数(逻辑)                | 12                                                                                                                           |
+| 总内存(GB)                     | 48.0                                                                                                                         |
+
+## 基准覆盖范围
+
+| 键                 | 值                                                                  |
+| ------------------- | ---------------------------------------------------------------------- |
+| 输入 JSON 中的用例 | 36 / 36                                                                |
+| 序列化器         | fory, msgpack, protobuf                                                |
+| 数据类型           | struct, sample, mediacontent, structlist, samplelist, mediacontentlist |
+| 操作          | serialize, deserialize                                                 |
+
+## 基准结果
+
+### 延迟结果(纳秒)
+
+| 数据类型          | 操作   | fory (ns) | protobuf (ns) | msgpack (ns) | 最快 |
+| ----------------- | ---- | --------- | ------------- | ------------ | ------- |
+| NumericStruct     | 序列化   | 50.3      | 170.8         | 107.8        | fory    |
+| NumericStruct     | 反序列化 | 82.4      | 252.0         | 143.4        | fory    |
+| Sample            | 序列化   | 263.2     | 607.1         | 377.1        | fory    |
+| Sample            | 反序列化 | 199.4     | 1191.7        | 785.6        | fory    |
+| MediaContent      | 序列化   | 379.7     | 509.6         | 417.6        | fory    |
+| MediaContent      | 反序列化 | 450.3     | 846.6         | 791.4        | fory    |
+| NumericStructList | 序列化   | 183.7     | 641.8         | 447.8        | fory    |
+| NumericStructList | 反序列化 | 288.3     | 974.3         | 702.1        | fory    |
+| SampleList        | 序列化   | 1205.7    | 3559.1        | 1864.1       | fory    |
+| SampleList        | 反序列化 | 895.1     | 5710.3        | 2757.4       | fory    |
+| MediaContentList  | 序列化   | 1495.4    | 2473.6        | 1812.4       | fory    |
+| MediaContentList  | 反序列化 | 1946.7    | 3789.3        | 3778.4       | fory    |
+
+### 吞吐结果(ops/sec)
+
+| 数据类型          | 操作   | fory TPS   | protobuf TPS | msgpack TPS | 最快 |
+| ----------------- | ---- | ---------- | ------------ | ---- | ------- |
+| NumericStruct     | 序列化   | 19,881,457 | 5,853,473    | 9,276,378   | fory    |
+| NumericStruct     | 反序列化 | 12,137,374 | 3,968,585    | 6,973,504   | fory    |
+| Sample            | 序列化   | 3,799,418  | 1,647,119    | 2,652,142   | fory    |
+| Sample            | 反序列化 | 5,016,006  | 839,129      | 1,272,975   | fory    |
+| MediaContent      | 序列化   | 2,633,704  | 1,962,428    | 2,394,549   | fory    |
+| MediaContent      | 反序列化 | 2,220,537  | 1,181,222    | 1,263,568   | fory    |
+| NumericStructList | 序列化   | 5,445,002  | 1,558,156    | 2,232,996   | fory    |
+| NumericStructList | 反序列化 | 3,469,207  | 1,026,402    | 1,424,322   | fory    |
+| SampleList        | 序列化   | 829,415    | 280,973      | 536,448     | fory    |
+| SampleList        | 反序列化 | 1,117,133  | 175,122      | 362,663     | fory    |
+| MediaContentList  | 序列化   | 668,732    | 404,272      | 551,755     | fory    |
+| MediaContentList  | 反序列化 | 513,699    | 263,899      | 264,664     | fory    |
+
+### 序列化数据大小(字节)
+
+| 数据类型          | fory | protobuf | msgpack |
+| ----------------- | ---- | -------- | ------- |
+| NumericStruct     | 78   | 93       | 87      |
+| Sample            | 445  | 460      | 562     |
+| MediaContent      | 362  | 307      | 479     |
+| NumericStructList | 255  | 475      | 444     |
+| SampleList        | 1978 | 2315     | 2819    |
+| MediaContentList  | 1531 | 1550     | 2404    |
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/csharp/throughput.png b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/csharp/throughput.png
new file mode 100644
index 0000000000..2c6c7bdd8c
Binary files /dev/null and b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/csharp/throughput.png differ
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/dart/README.md b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/dart/README.md
new file mode 100644
index 0000000000..b99b93440c
--- /dev/null
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/dart/README.md
@@ -0,0 +1,49 @@
+# Fory Dart 基准
+
+该基准比较 Apache Fory、Protocol Buffers 和 JSON 在 Dart 中的序列化与反序列化吞吐量。
+
+## 吞吐图表
+
+![Throughput](throughput.png)
+
+## 硬件与运行时信息
+
+| 键                   | 值                                                             |
+| --------------------- | ----------------------------------------------------------------- |
+| 时间戳             | 2026-05-08T08:23:10.201764Z                                       |
+| 操作系统                    | Version 15.7.2 (Build 24G325)                                     |
+| 主机                  | MacBook-Pro.local                                                 |
+| CPU 核心数(逻辑)   | 12                                                                |
+| 内存(GB)           | 48.00                                                             |
+| Dart                  | 3.10.7 (stable) (Tue Dec 23 00:01:57 2025 -0800) on "macos_arm64" |
+| 每个用例采样次数      | 5                                                                 |
+| 每个用例预热时长(秒)   | 1.0                                                               |
+| 每个用例持续时长(秒) | 1.5                                                               |
+
+## 吞吐结果
+
+| 数据类型          | 操作   |  Fory TPS | Protobuf TPS |  JSON TPS | 最快       |
+| ----------------- | ---- | --------: | -----------: | --------: | ------------- |
+| NumericStruct     | 序列化   | 9,007,809 |    1,582,003 |   774,574 | fory (5.69x)  |
+| NumericStruct     | 反序列化 | 9,039,403 |    3,343,459 | 1,391,036 | fory (2.70x)  |
+| Sample            | 序列化   | 2,434,800 |      538,385 |   133,800 | fory (4.52x)  |
+| Sample            | 反序列化 | 2,362,665 |      909,410 |   239,924 | fory (2.60x)  |
+| MediaContent      | 序列化   | 1,167,225 |      423,564 |   223,387 | fory (2.76x)  |
+| MediaContent      | 反序列化 | 1,987,141 |      770,107 |   254,156 | fory (2.58x)  |
+| NumericStructList | 序列化   | 2,551,102 |      283,827 |   139,615 | fory (8.99x)  |
+| NumericStructList | 反序列化 | 3,028,068 |      530,360 |   265,058 | fory (5.71x)  |
+| SampleList        | 序列化   |   568,937 |       47,426 |    25,386 | fory (12.00x) |
+| SampleList        | 反序列化 |   542,871 |      108,349 |    48,058 | fory (5.01x)  |
+| MediaContentList  | 序列化   |   226,507 |       81,828 |    41,780 | fory (2.77x)  |
+| MediaContentList  | 反序列化 |   458,667 |      139,395 |    50,183 | fory (3.29x)  |
+
+## 序列化大小(字节)
+
+| 数据类型          | Fory | Protobuf | JSON |
+| ----------------- | ---: | -------: | ---: |
+| NumericStruct     |   78 |       93 |  159 |
+| Sample            |  445 |      377 |  791 |
+| MediaContent      |  362 |      307 |  619 |
+| NumericStructList |  255 |      475 |  816 |
+| SampleList        | 1978 |     1900 | 3976 |
+| MediaContentList  | 1531 |     1550 | 3122 |
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/dart/throughput.png b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/dart/throughput.png
new file mode 100644
index 0000000000..ee3833d8bc
Binary files /dev/null and b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/dart/throughput.png differ
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/go/README.md b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/go/README.md
new file mode 100644
index 0000000000..265c3d42d4
--- /dev/null
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/go/README.md
@@ -0,0 +1,58 @@
+# Go 序列化基准报告
+
+生成时间: 2026-05-08 17:55:12
+
+## 性能图表
+
+![Throughput](throughput.png)
+
+## 系统信息
+
+- **操作系统**: Darwin 24.6.0
+- **架构**: arm64
+- **Python**: 3.10.8
+
+## 性能汇总
+
+| 数据类型         | 操作   | Fory (ops/s) | Protobuf (ops/s) | Msgpack (ops/s) | Fory vs PB | Fory vs MP |
+| ----------------- | ---- | ------------ | ---------------- | --------------- | ---------- | ---------- |
+| NumericStruct     | 序列化   | 12.74M       | 7.16M            | 3.63M           | 1.78x      | 3.51x      |
+| NumericStruct     | 反序列化 | 10.63M       | 8.40M            | 1.78M           | 1.27x      | 5.98x      |
+| Sample            | 序列化   | 7.16M        | 2.53M            | 646K            | 2.84x      | 11.10x     |
+| Sample            | 反序列化 | 3.27M        | 2.10M            | 343K            | 1.56x      | 9.54x      |
+| MediaContent      | 序列化   | 3.74M        | 1.75M            | 1.14M           | 2.14x      | 3.27x      |
+| MediaContent      | 反序列化 | 2.03M        | 1.23M            | 646K            | 1.66x      | 3.15x      |
+| NumericStructList | 序列化   | 1.10M        | 386K             | 201K            | 2.84x      | 5.44x      |
+| NumericStructList | 反序列化 | 1.09M        | 368K             | 103K            | 2.96x      | 10.54x     |
+| SampleList        | 序列化   | 496K         | 126K             | 36K             | 3.93x      | 13.83x     |
+| SampleList        | 反序列化 | 195K         | 96K              | 17K             | 2.04x      | 11.73x     |
+| MediaContentList  | 序列化   | 250K         | 91K              | 57K             | 2.73x      | 4.38x      |
+| MediaContentList  | 反序列化 | 112K         | 74K              | 31K             | 1.53x      | 3.65x      |
+
+## 详细耗时(ns/op)
+
+| 数据类型         | 操作   | Fory   | Protobuf | Msgpack |
+| ----------------- | ---- | ------ | -------- | ------- |
+| NumericStruct     | 序列化   | 78.5   | 139.6    | 275.5   |
+| NumericStruct     | 反序列化 | 94.0   | 119.0    | 562.5   |
+| Sample            | 序列化   | 139.6  | 395.9    | 1549.0  |
+| Sample            | 反序列化 | 306.0  | 475.9    | 2919.0  |
+| MediaContent      | 序列化   | 267.3  | 571.6    | 875.1   |
+| MediaContent      | 反序列化 | 492.4  | 815.8    | 1549.0  |
+| NumericStructList | 序列化   | 912.8  | 2594.0   | 4970.0  |
+| NumericStructList | 反序列化 | 919.9  | 2721.0   | 9698.0  |
+| SampleList        | 序列化   | 2018.0 | 7927.0   | 27909.0 |
+| SampleList        | 反序列化 | 5126.0 | 10460.0  | 60118.0 |
+| MediaContentList  | 序列化   | 4006.0 | 10939.0  | 17553.0 |
+| MediaContentList  | 反序列化 | 8893.0 | 13588.0  | 32439.0 |
+
+### 序列化数据大小(字节)
+
+| 数据类型         | Fory | Protobuf | Msgpack |
+| ----------------- | ---- | -------- | ------- |
+| NumericStruct     | 78   | 93       | 88      |
+| Sample            | 445  | 375      | 524     |
+| MediaContent      | 340  | 301      | 400     |
+| NumericStructList | 819  | 1900     | 1766    |
+| SampleList        | 7599 | 7560     | 10486   |
+| MediaContentList  | 5774 | 6080     | 8006    |
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/go/benchmark_results.txt b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/go/benchmark_results.txt
new file mode 100644
index 0000000000..9f471bc01f
--- /dev/null
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/go/benchmark_results.txt
@@ -0,0 +1,326 @@
+============================================
+Serialized Sizes (bytes):
+============================================
+NumericStruct:
+  Fory:     78 bytes
+  Protobuf: 93 bytes
+  Msgpack:  88 bytes
+Sample:
+  Fory:     445 bytes
+  Protobuf: 375 bytes
+  Msgpack:  524 bytes
+MediaContent:
+  Fory:     340 bytes
+  Protobuf: 301 bytes
+  Msgpack:  400 bytes
+NumericStructList:
+  Fory:     819 bytes
+  Protobuf: 1900 bytes
+  Msgpack:  1766 bytes
+SampleList:
+  Fory:     7599 bytes
+  Protobuf: 7560 bytes
+  Msgpack:  10486 bytes
+MediaContentList:
+  Fory:     5774 bytes
+  Protobuf: 6080 bytes
+  Msgpack:  8006 bytes
+============================================
+============================================
+Serialized Sizes (bytes):
+============================================
+NumericStruct:
+  Fory:     78 bytes
+  Protobuf: 93 bytes
+  Msgpack:  88 bytes
+Sample:
+  Fory:     445 bytes
+  Protobuf: 375 bytes
+  Msgpack:  524 bytes
+MediaContent:
+  Fory:     340 bytes
+  Protobuf: 301 bytes
+  Msgpack:  400 bytes
+NumericStructList:
+  Fory:     819 bytes
+  Protobuf: 1900 bytes
+  Msgpack:  1766 bytes
+SampleList:
+  Fory:     7599 bytes
+  Protobuf: 7560 bytes
+  Msgpack:  10486 bytes
+MediaContentList:
+  Fory:     5774 bytes
+  Protobuf: 6080 bytes
+  Msgpack:  8006 bytes
+============================================
+============================================
+Serialized Sizes (bytes):
+============================================
+NumericStruct:
+  Fory:     78 bytes
+  Protobuf: 93 bytes
+  Msgpack:  88 bytes
+Sample:
+  Fory:     445 bytes
+  Protobuf: 375 bytes
+  Msgpack:  524 bytes
+MediaContent:
+  Fory:     340 bytes
+  Protobuf: 301 bytes
+  Msgpack:  400 bytes
+NumericStructList:
+  Fory:     819 bytes
+  Protobuf: 1900 bytes
+  Msgpack:  1766 bytes
+SampleList:
+  Fory:     7599 bytes
+  Protobuf: 7560 bytes
+  Msgpack:  10486 bytes
+MediaContentList:
+  Fory:     5774 bytes
+  Protobuf: 6080 bytes
+  Msgpack:  8006 bytes
+============================================
+============================================
+Serialized Sizes (bytes):
+============================================
+NumericStruct:
+  Fory:     78 bytes
+  Protobuf: 93 bytes
+  Msgpack:  88 bytes
+Sample:
+  Fory:     445 bytes
+  Protobuf: 375 bytes
+  Msgpack:  524 bytes
+MediaContent:
+  Fory:     340 bytes
+  Protobuf: 301 bytes
+  Msgpack:  400 bytes
+NumericStructList:
+  Fory:     819 bytes
+  Protobuf: 1900 bytes
+  Msgpack:  1766 bytes
+SampleList:
+  Fory:     7599 bytes
+  Protobuf: 7560 bytes
+  Msgpack:  10486 bytes
+MediaContentList:
+  Fory:     5774 bytes
+  Protobuf: 6080 bytes
+  Msgpack:  8006 bytes
+============================================
+============================================
+Serialized Sizes (bytes):
+============================================
+NumericStruct:
+  Fory:     78 bytes
+  Protobuf: 93 bytes
+  Msgpack:  88 bytes
+Sample:
+  Fory:     445 bytes
+  Protobuf: 375 bytes
+  Msgpack:  524 bytes
+MediaContent:
+  Fory:     340 bytes
+  Protobuf: 301 bytes
+  Msgpack:  400 bytes
+NumericStructList:
+  Fory:     819 bytes
+  Protobuf: 1900 bytes
+  Msgpack:  1766 bytes
+SampleList:
+  Fory:     7599 bytes
+  Protobuf: 7560 bytes
+  Msgpack:  10486 bytes
+MediaContentList:
+  Fory:     5774 bytes
+  Protobuf: 6080 bytes
+  Msgpack:  8006 bytes
+============================================
+goos: darwin
+goarch: arm64
+pkg: github.com/apache/fory/benchmarks/go
+cpu: Apple M4 Pro
+BenchmarkFory_NumericStruct_Serialize-12              	15385461	        78.49 ns/op	       0 B/op	       0 allocs/op
+BenchmarkFory_NumericStruct_Serialize-12              	14953550	        78.78 ns/op	       0 B/op	       0 allocs/op
+BenchmarkFory_NumericStruct_Serialize-12              	15520209	        76.33 ns/op	       0 B/op	       0 allocs/op
+BenchmarkFory_NumericStruct_Serialize-12              	15806354	        76.43 ns/op	       0 B/op	       0 allocs/op
+BenchmarkFory_NumericStruct_Serialize-12              	15314667	        78.51 ns/op	       0 B/op	       0 allocs/op
+BenchmarkProtobuf_NumericStruct_Serialize-12          	 8704411	       138.0 ns/op	     192 B/op	       2 allocs/op
+BenchmarkProtobuf_NumericStruct_Serialize-12          	 8522941	       138.8 ns/op	     192 B/op	       2 allocs/op
+BenchmarkProtobuf_NumericStruct_Serialize-12          	 8285118	       138.9 ns/op	     192 B/op	       2 allocs/op
+BenchmarkProtobuf_NumericStruct_Serialize-12          	 8818959	       139.6 ns/op	     192 B/op	       2 allocs/op
+BenchmarkProtobuf_NumericStruct_Serialize-12          	 8463876	       139.6 ns/op	     192 B/op	       2 allocs/op
+BenchmarkMsgpack_NumericStruct_Serialize-12           	 4396588	       274.9 ns/op	     240 B/op	       3 allocs/op
+BenchmarkMsgpack_NumericStruct_Serialize-12           	 4438035	       272.7 ns/op	     240 B/op	       3 allocs/op
+BenchmarkMsgpack_NumericStruct_Serialize-12           	 4352302	       272.0 ns/op	     240 B/op	       3 allocs/op
+BenchmarkMsgpack_NumericStruct_Serialize-12           	 4346308	       277.3 ns/op	     240 B/op	       3 allocs/op
+BenchmarkMsgpack_NumericStruct_Serialize-12           	 4361384	       275.5 ns/op	     240 B/op	       3 allocs/op
+BenchmarkFory_NumericStruct_Deserialize-12            	12784374	        95.10 ns/op	      48 B/op	       1 allocs/op
+BenchmarkFory_NumericStruct_Deserialize-12            	12615007	        94.35 ns/op	      48 B/op	       1 allocs/op
+BenchmarkFory_NumericStruct_Deserialize-12            	12597256	        94.07 ns/op	      48 B/op	       1 allocs/op
+BenchmarkFory_NumericStruct_Deserialize-12            	12663748	        93.35 ns/op	      48 B/op	       1 allocs/op
+BenchmarkFory_NumericStruct_Deserialize-12            	12668444	        94.05 ns/op	      48 B/op	       1 allocs/op
+BenchmarkProtobuf_NumericStruct_Deserialize-12        	 9892239	       157.3 ns/op	      96 B/op	       1 allocs/op
+BenchmarkProtobuf_NumericStruct_Deserialize-12        	 6950502	       152.1 ns/op	      96 B/op	       1 allocs/op
+BenchmarkProtobuf_NumericStruct_Deserialize-12        	 7466115	       210.2 ns/op	      96 B/op	       1 allocs/op
+BenchmarkProtobuf_NumericStruct_Deserialize-12        	 6987369	       156.1 ns/op	      96 B/op	       1 allocs/op
+BenchmarkProtobuf_NumericStruct_Deserialize-12        	10052640	       119.0 ns/op	      96 B/op	       1 allocs/op
+BenchmarkMsgpack_NumericStruct_Deserialize-12         	 2397518	       502.5 ns/op	      96 B/op	       2 allocs/op
+BenchmarkMsgpack_NumericStruct_Deserialize-12         	 2379376	       501.1 ns/op	      96 B/op	       2 allocs/op
+BenchmarkMsgpack_NumericStruct_Deserialize-12         	 2390596	       500.8 ns/op	      96 B/op	       2 allocs/op
+BenchmarkMsgpack_NumericStruct_Deserialize-12         	 2387790	       504.9 ns/op	      96 B/op	       2 allocs/op
+BenchmarkMsgpack_NumericStruct_Deserialize-12         	 2404051	       562.5 ns/op	      96 B/op	       2 allocs/op
+BenchmarkFory_NumericStructList_Serialize-12          	 1000000	      1081 ns/op	       0 B/op	       0 allocs/op
+BenchmarkFory_NumericStructList_Serialize-12          	 1000000	      1021 ns/op	       0 B/op	       0 allocs/op
+BenchmarkFory_NumericStructList_Serialize-12          	 1293205	       947.2 ns/op	       0 B/op	       0 allocs/op
+BenchmarkFory_NumericStructList_Serialize-12          	 1278226	       929.6 ns/op	       0 B/op	       0 allocs/op
+BenchmarkFory_NumericStructList_Serialize-12          	 1316396	       912.8 ns/op	       0 B/op	       0 allocs/op
+BenchmarkProtobuf_NumericStructList_Serialize-12      	  467838	      2594 ns/op	    4192 B/op	      23 allocs/op
+BenchmarkProtobuf_NumericStructList_Serialize-12      	  462572	      2743 ns/op	    4192 B/op	      23 allocs/op
+BenchmarkProtobuf_NumericStructList_Serialize-12      	  453700	      2589 ns/op	    4192 B/op	      23 allocs/op
+BenchmarkProtobuf_NumericStructList_Serialize-12      	  460408	      2607 ns/op	    4192 B/op	      23 allocs/op
+BenchmarkProtobuf_NumericStructList_Serialize-12      	  452139	      2594 ns/op	    4192 B/op	      23 allocs/op
+BenchmarkMsgpack_NumericStructList_Serialize-12       	  247603	      4879 ns/op	    4106 B/op	       8 allocs/op
+BenchmarkMsgpack_NumericStructList_Serialize-12       	  249087	      4844 ns/op	    4106 B/op	       8 allocs/op
+BenchmarkMsgpack_NumericStructList_Serialize-12       	  248340	      5142 ns/op	    4106 B/op	       8 allocs/op
+BenchmarkMsgpack_NumericStructList_Serialize-12       	  206158	      5846 ns/op	    4106 B/op	       8 allocs/op
+BenchmarkMsgpack_NumericStructList_Serialize-12       	  238311	      4970 ns/op	    4106 B/op	       8 allocs/op
+BenchmarkFory_NumericStructList_Deserialize-12        	 1311939	       932.1 ns/op	    1072 B/op	       3 allocs/op
+BenchmarkFory_NumericStructList_Deserialize-12        	 1313912	       937.1 ns/op	    1072 B/op	       3 allocs/op
+BenchmarkFory_NumericStructList_Deserialize-12        	 1315593	       915.4 ns/op	    1072 B/op	       3 allocs/op
+BenchmarkFory_NumericStructList_Deserialize-12        	 1311540	       927.6 ns/op	    1072 B/op	       3 allocs/op
+BenchmarkFory_NumericStructList_Deserialize-12        	 1292565	       919.9 ns/op	    1072 B/op	       3 allocs/op
+BenchmarkProtobuf_NumericStructList_Deserialize-12    	  447052	      2745 ns/op	    3512 B/op	      28 allocs/op
+BenchmarkProtobuf_NumericStructList_Deserialize-12    	  429406	      2743 ns/op	    3512 B/op	      28 allocs/op
+BenchmarkProtobuf_NumericStructList_Deserialize-12    	  438819	      2706 ns/op	    3512 B/op	      28 allocs/op
+BenchmarkProtobuf_NumericStructList_Deserialize-12    	  447928	      2785 ns/op	    3512 B/op	      28 allocs/op
+BenchmarkProtobuf_NumericStructList_Deserialize-12    	  447502	      2721 ns/op	    3512 B/op	      28 allocs/op
+BenchmarkMsgpack_NumericStructList_Deserialize-12     	  122101	      9764 ns/op	    2193 B/op	       7 allocs/op
+BenchmarkMsgpack_NumericStructList_Deserialize-12     	  123258	      9896 ns/op	    2193 B/op	       7 allocs/op
+BenchmarkMsgpack_NumericStructList_Deserialize-12     	  121612	      9738 ns/op	    2193 B/op	       7 allocs/op
+BenchmarkMsgpack_NumericStructList_Deserialize-12     	  124760	      9670 ns/op	    2193 B/op	       7 allocs/op
+BenchmarkMsgpack_NumericStructList_Deserialize-12     	  125086	      9698 ns/op	    2193 B/op	       7 allocs/op
+BenchmarkFory_Sample_Serialize-12                     	 8696760	       147.5 ns/op	       0 B/op	       0 allocs/op
+BenchmarkFory_Sample_Serialize-12                     	 8567470	       181.8 ns/op	       0 B/op	       0 allocs/op
+BenchmarkFory_Sample_Serialize-12                     	 8293867	       139.5 ns/op	       0 B/op	       0 allocs/op
+BenchmarkFory_Sample_Serialize-12                     	 8486005	       140.6 ns/op	       0 B/op	       0 allocs/op
+BenchmarkFory_Sample_Serialize-12                     	 8506568	       139.6 ns/op	       0 B/op	       0 allocs/op
+BenchmarkProtobuf_Sample_Serialize-12                 	 3011733	       387.9 ns/op	     704 B/op	       2 allocs/op
+BenchmarkProtobuf_Sample_Serialize-12                 	 3108796	       390.8 ns/op	     704 B/op	       2 allocs/op
+BenchmarkProtobuf_Sample_Serialize-12                 	 2547630	       393.6 ns/op	     704 B/op	       2 allocs/op
+BenchmarkProtobuf_Sample_Serialize-12                 	 3026661	       392.1 ns/op	     704 B/op	       2 allocs/op
+BenchmarkProtobuf_Sample_Serialize-12                 	 3128582	       395.9 ns/op	     704 B/op	       2 allocs/op
+BenchmarkMsgpack_Sample_Serialize-12                  	  777014	      1553 ns/op	    2321 B/op	       7 allocs/op
+BenchmarkMsgpack_Sample_Serialize-12                  	  775314	      1520 ns/op	    2321 B/op	       7 allocs/op
+BenchmarkMsgpack_Sample_Serialize-12                  	  757838	      1525 ns/op	    2321 B/op	       7 allocs/op
+BenchmarkMsgpack_Sample_Serialize-12                  	  802612	      1757 ns/op	    2321 B/op	       7 allocs/op
+BenchmarkMsgpack_Sample_Serialize-12                  	  790094	      1549 ns/op	    2321 B/op	       7 allocs/op
+BenchmarkFory_Sample_Deserialize-12                   	 4167534	       327.9 ns/op	     676 B/op	       9 allocs/op
+BenchmarkFory_Sample_Deserialize-12                   	 3184602	       338.0 ns/op	     676 B/op	       9 allocs/op
+BenchmarkFory_Sample_Deserialize-12                   	 3629605	       301.8 ns/op	     676 B/op	       9 allocs/op
+BenchmarkFory_Sample_Deserialize-12                   	 4008093	       302.2 ns/op	     676 B/op	       9 allocs/op
+BenchmarkFory_Sample_Deserialize-12                   	 3992972	       306.0 ns/op	     676 B/op	       9 allocs/op
+BenchmarkProtobuf_Sample_Deserialize-12               	 2527548	       477.1 ns/op	     708 B/op	       9 allocs/op
+BenchmarkProtobuf_Sample_Deserialize-12               	 2476074	       474.8 ns/op	     708 B/op	       9 allocs/op
+BenchmarkProtobuf_Sample_Deserialize-12               	 2532358	       475.8 ns/op	     708 B/op	       9 allocs/op
+BenchmarkProtobuf_Sample_Deserialize-12               	 2408528	       473.0 ns/op	     708 B/op	       9 allocs/op
+BenchmarkProtobuf_Sample_Deserialize-12               	 2482132	       475.9 ns/op	     708 B/op	       9 allocs/op
+BenchmarkMsgpack_Sample_Deserialize-12                	  415698	      2893 ns/op	    1576 B/op	      38 allocs/op
+BenchmarkMsgpack_Sample_Deserialize-12                	  417212	      2950 ns/op	    1576 B/op	      38 allocs/op
+BenchmarkMsgpack_Sample_Deserialize-12                	  424497	      2879 ns/op	    1576 B/op	      38 allocs/op
+BenchmarkMsgpack_Sample_Deserialize-12                	  417026	      2953 ns/op	    1576 B/op	      38 allocs/op
+BenchmarkMsgpack_Sample_Deserialize-12                	  418338	      2919 ns/op	    1576 B/op	      38 allocs/op
+BenchmarkFory_SampleList_Serialize-12                 	  599605	      2041 ns/op	       0 B/op	       0 allocs/op
+BenchmarkFory_SampleList_Serialize-12                 	  582406	      2046 ns/op	       0 B/op	       0 allocs/op
+BenchmarkFory_SampleList_Serialize-12                 	  563160	      2029 ns/op	       0 B/op	       0 allocs/op
+BenchmarkFory_SampleList_Serialize-12                 	  607074	      2067 ns/op	       0 B/op	       0 allocs/op
+BenchmarkFory_SampleList_Serialize-12                 	  613364	      2018 ns/op	       0 B/op	       0 allocs/op
+BenchmarkProtobuf_SampleList_Serialize-12             	  145861	      8291 ns/op	   14816 B/op	      23 allocs/op
+BenchmarkProtobuf_SampleList_Serialize-12             	  150979	      7938 ns/op	   14816 B/op	      23 allocs/op
+BenchmarkProtobuf_SampleList_Serialize-12             	  144135	      8049 ns/op	   14816 B/op	      23 allocs/op
+BenchmarkProtobuf_SampleList_Serialize-12             	  149202	      8469 ns/op	   14816 B/op	      23 allocs/op
+BenchmarkProtobuf_SampleList_Serialize-12             	  152338	      7927 ns/op	   14816 B/op	      23 allocs/op
+BenchmarkMsgpack_SampleList_Serialize-12              	   43825	     27705 ns/op	   32793 B/op	      11 allocs/op
+BenchmarkMsgpack_SampleList_Serialize-12              	   43051	     29707 ns/op	   32793 B/op	      11 allocs/op
+BenchmarkMsgpack_SampleList_Serialize-12              	   42046	     27699 ns/op	   32793 B/op	      11 allocs/op
+BenchmarkMsgpack_SampleList_Serialize-12              	   42596	     37501 ns/op	   32793 B/op	      11 allocs/op
+BenchmarkMsgpack_SampleList_Serialize-12              	   42518	     27909 ns/op	   32793 B/op	      11 allocs/op
+BenchmarkFory_SampleList_Deserialize-12               	  249300	      4817 ns/op	   13952 B/op	     163 allocs/op
+BenchmarkFory_SampleList_Deserialize-12               	  245127	      5156 ns/op	   13952 B/op	     163 allocs/op
+BenchmarkFory_SampleList_Deserialize-12               	  247790	      4943 ns/op	   13952 B/op	     163 allocs/op
+BenchmarkFory_SampleList_Deserialize-12               	  249534	      4934 ns/op	   13952 B/op	     163 allocs/op
+BenchmarkFory_SampleList_Deserialize-12               	  239244	      5126 ns/op	   13952 B/op	     163 allocs/op
+BenchmarkProtobuf_SampleList_Deserialize-12           	  111327	     10797 ns/op	   20872 B/op	     188 allocs/op
+BenchmarkProtobuf_SampleList_Deserialize-12           	  109178	     10919 ns/op	   20872 B/op	     188 allocs/op
+BenchmarkProtobuf_SampleList_Deserialize-12           	   92876	     12674 ns/op	   20872 B/op	     188 allocs/op
+BenchmarkProtobuf_SampleList_Deserialize-12           	  108414	     10816 ns/op	   20872 B/op	     188 allocs/op
+BenchmarkProtobuf_SampleList_Deserialize-12           	  114196	     10460 ns/op	   20872 B/op	     188 allocs/op
+BenchmarkMsgpack_SampleList_Deserialize-12            	   20566	     58400 ns/op	   37251 B/op	     727 allocs/op
+BenchmarkMsgpack_SampleList_Deserialize-12            	   20526	     65792 ns/op	   37251 B/op	     727 allocs/op
+BenchmarkMsgpack_SampleList_Deserialize-12            	   20550	     58213 ns/op	   37251 B/op	     727 allocs/op
+BenchmarkMsgpack_SampleList_Deserialize-12            	   19180	     58170 ns/op	   37251 B/op	     727 allocs/op
+BenchmarkMsgpack_SampleList_Deserialize-12            	   20426	     60118 ns/op	   37251 B/op	     727 allocs/op
+BenchmarkFory_MediaContent_Serialize-12               	 4481811	       268.2 ns/op	       0 B/op	       0 allocs/op
+BenchmarkFory_MediaContent_Serialize-12               	 4470292	       269.4 ns/op	       0 B/op	       0 allocs/op
+BenchmarkFory_MediaContent_Serialize-12               	 4524715	       269.0 ns/op	       0 B/op	       0 allocs/op
+BenchmarkFory_MediaContent_Serialize-12               	 4516789	       270.0 ns/op	       0 B/op	       0 allocs/op
+BenchmarkFory_MediaContent_Serialize-12               	 4391221	       267.3 ns/op	       0 B/op	       0 allocs/op
+BenchmarkProtobuf_MediaContent_Serialize-12           	 2135143	       544.6 ns/op	    1144 B/op	      11 allocs/op
+BenchmarkProtobuf_MediaContent_Serialize-12           	 2160157	       561.0 ns/op	    1144 B/op	      11 allocs/op
+BenchmarkProtobuf_MediaContent_Serialize-12           	 2221641	       545.3 ns/op	    1144 B/op	      11 allocs/op
+BenchmarkProtobuf_MediaContent_Serialize-12           	 2214582	       565.7 ns/op	    1144 B/op	      11 allocs/op
+BenchmarkProtobuf_MediaContent_Serialize-12           	 2115079	       571.6 ns/op	    1144 B/op	      11 allocs/op
+BenchmarkMsgpack_MediaContent_Serialize-12            	 1380163	       869.0 ns/op	    1168 B/op	       6 allocs/op
+BenchmarkMsgpack_MediaContent_Serialize-12            	 1380481	       874.4 ns/op	    1168 B/op	       6 allocs/op
+BenchmarkMsgpack_MediaContent_Serialize-12            	 1369536	       873.7 ns/op	    1168 B/op	       6 allocs/op
+BenchmarkMsgpack_MediaContent_Serialize-12            	 1376877	       881.8 ns/op	    1168 B/op	       6 allocs/op
+BenchmarkMsgpack_MediaContent_Serialize-12            	 1381296	       875.1 ns/op	    1168 B/op	       6 allocs/op
+BenchmarkFory_MediaContent_Deserialize-12             	 2537758	       474.9 ns/op	     656 B/op	      13 allocs/op
+BenchmarkFory_MediaContent_Deserialize-12             	 2491048	       478.2 ns/op	     656 B/op	      13 allocs/op
+BenchmarkFory_MediaContent_Deserialize-12             	 2500486	       520.6 ns/op	     656 B/op	      13 allocs/op
+BenchmarkFory_MediaContent_Deserialize-12             	 2419058	       495.7 ns/op	     656 B/op	      13 allocs/op
+BenchmarkFory_MediaContent_Deserialize-12             	 2404918	       492.4 ns/op	     656 B/op	      13 allocs/op
+BenchmarkProtobuf_MediaContent_Deserialize-12         	 1852849	       647.5 ns/op	    1088 B/op	      21 allocs/op
+BenchmarkProtobuf_MediaContent_Deserialize-12         	 1865282	       638.1 ns/op	    1088 B/op	      21 allocs/op
+BenchmarkProtobuf_MediaContent_Deserialize-12         	 1873513	       649.3 ns/op	    1088 B/op	      21 allocs/op
+BenchmarkProtobuf_MediaContent_Deserialize-12         	 1853527	       635.6 ns/op	    1088 B/op	      21 allocs/op
+BenchmarkProtobuf_MediaContent_Deserialize-12         	 1729706	       815.8 ns/op	    1088 B/op	      21 allocs/op
+BenchmarkMsgpack_MediaContent_Deserialize-12          	  801156	      1553 ns/op	     896 B/op	      17 allocs/op
+BenchmarkMsgpack_MediaContent_Deserialize-12          	  787426	      1520 ns/op	     896 B/op	      17 allocs/op
+BenchmarkMsgpack_MediaContent_Deserialize-12          	  750510	      1538 ns/op	     896 B/op	      17 allocs/op
+BenchmarkMsgpack_MediaContent_Deserialize-12          	  803448	      1543 ns/op	     896 B/op	      17 allocs/op
+BenchmarkMsgpack_MediaContent_Deserialize-12          	  780190	      1549 ns/op	     896 B/op	      17 allocs/op
+BenchmarkFory_MediaContentList_Serialize-12           	  304236	      4158 ns/op	       0 B/op	       0 allocs/op
+BenchmarkFory_MediaContentList_Serialize-12           	  300002	      4008 ns/op	       0 B/op	       0 allocs/op
+BenchmarkFory_MediaContentList_Serialize-12           	  301590	      4026 ns/op	       0 B/op	       0 allocs/op
+BenchmarkFory_MediaContentList_Serialize-12           	  304356	      3955 ns/op	       0 B/op	       0 allocs/op
+BenchmarkFory_MediaContentList_Serialize-12           	  305937	      4006 ns/op	       0 B/op	       0 allocs/op
+BenchmarkProtobuf_MediaContentList_Serialize-12       	  113460	     10919 ns/op	   22848 B/op	     203 allocs/op
+BenchmarkProtobuf_MediaContentList_Serialize-12       	  105204	     12060 ns/op	   22848 B/op	     203 allocs/op
+BenchmarkProtobuf_MediaContentList_Serialize-12       	  112503	     10890 ns/op	   22848 B/op	     203 allocs/op
+BenchmarkProtobuf_MediaContentList_Serialize-12       	  110593	     10468 ns/op	   22848 B/op	     203 allocs/op
+BenchmarkProtobuf_MediaContentList_Serialize-12       	  112423	     10939 ns/op	   22848 B/op	     203 allocs/op
+BenchmarkMsgpack_MediaContentList_Serialize-12        	   77541	     15641 ns/op	   16881 B/op	      30 allocs/op
+BenchmarkMsgpack_MediaContentList_Serialize-12        	   77178	     16293 ns/op	   16880 B/op	      30 allocs/op
+BenchmarkMsgpack_MediaContentList_Serialize-12        	   73228	     16168 ns/op	   16880 B/op	      30 allocs/op
+BenchmarkMsgpack_MediaContentList_Serialize-12        	   71780	     16275 ns/op	   16880 B/op	      30 allocs/op
+BenchmarkMsgpack_MediaContentList_Serialize-12        	   77145	     17553 ns/op	   16881 B/op	      30 allocs/op
+BenchmarkFory_MediaContentList_Deserialize-12         	  146653	      8254 ns/op	   13040 B/op	     243 allocs/op
+BenchmarkFory_MediaContentList_Deserialize-12         	  145420	      8133 ns/op	   13040 B/op	     243 allocs/op
+BenchmarkFory_MediaContentList_Deserialize-12         	  148918	      8145 ns/op	   13040 B/op	     243 allocs/op
+BenchmarkFory_MediaContentList_Deserialize-12         	  141998	      8498 ns/op	   13040 B/op	     243 allocs/op
+BenchmarkFory_MediaContentList_Deserialize-12         	  138174	      8893 ns/op	   13040 B/op	     243 allocs/op
+BenchmarkProtobuf_MediaContentList_Deserialize-12     	   90056	     13521 ns/op	   25400 B/op	     428 allocs/op
+BenchmarkProtobuf_MediaContentList_Deserialize-12     	   82902	     13638 ns/op	   25400 B/op	     428 allocs/op
+BenchmarkProtobuf_MediaContentList_Deserialize-12     	   91242	     14083 ns/op	   25400 B/op	     428 allocs/op
+BenchmarkProtobuf_MediaContentList_Deserialize-12     	   85706	     13089 ns/op	   25400 B/op	     428 allocs/op
+BenchmarkProtobuf_MediaContentList_Deserialize-12     	   91342	     13588 ns/op	   25400 B/op	     428 allocs/op
+BenchmarkMsgpack_MediaContentList_Deserialize-12      	   33295	     31198 ns/op	   20058 B/op	     307 allocs/op
+BenchmarkMsgpack_MediaContentList_Deserialize-12      	   40077	     31423 ns/op	   20058 B/op	     307 allocs/op
+BenchmarkMsgpack_MediaContentList_Deserialize-12      	   39219	     30604 ns/op	   20058 B/op	     307 allocs/op
+BenchmarkMsgpack_MediaContentList_Deserialize-12      	   39799	     30377 ns/op	   20058 B/op	     307 allocs/op
+BenchmarkMsgpack_MediaContentList_Deserialize-12      	   39267	     32439 ns/op	   20058 B/op	     307 allocs/op
+PASS
+ok  	github.com/apache/fory/benchmarks/go	268.327s
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/go/serialized_sizes.txt b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/go/serialized_sizes.txt
new file mode 100644
index 0000000000..a64d3e1c05
--- /dev/null
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/go/serialized_sizes.txt
@@ -0,0 +1,27 @@
+Serialized Sizes (bytes):
+============================================
+NumericStruct:
+  Fory:     78 bytes
+  Protobuf: 93 bytes
+  Msgpack:  88 bytes
+Sample:
+  Fory:     445 bytes
+  Protobuf: 375 bytes
+  Msgpack:  524 bytes
+MediaContent:
+  Fory:     340 bytes
+  Protobuf: 301 bytes
+  Msgpack:  400 bytes
+NumericStructList:
+  Fory:     819 bytes
+  Protobuf: 1900 bytes
+  Msgpack:  1766 bytes
+SampleList:
+  Fory:     7599 bytes
+  Protobuf: 7560 bytes
+  Msgpack:  10486 bytes
+MediaContentList:
+  Fory:     5774 bytes
+  Protobuf: 6080 bytes
+  Msgpack:  8006 bytes
+============================================
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/go/throughput.png b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/go/throughput.png
new file mode 100644
index 0000000000..086d8b5533
Binary files /dev/null and b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/go/throughput.png differ
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/java/README.md b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/java/README.md
new file mode 100644
index 0000000000..2475ee4c14
--- /dev/null
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/java/README.md
@@ -0,0 +1,239 @@
+# Java 基准测试
+
+## 系统环境
+
+- Operation System:4.9.151-015.x86_64
+- CPU:Intel(R) Xeon(R) Platinum 8163 CPU @ 2.50GHz
+- Byte Order:Little Endian
+- L1d cache: 32K
+- L1i cache:32K
+- L2 cache: 1024K
+- L3 cache: 33792K
+
+## JMH 参数
+
+不要跳过 **warm up**,否则结果不准确。
+
+```bash
+ -f 1 -wi 3 -i 3 -t 1 -w 2s -r 2s -rf cs
+```
+
+## 基准数据
+
+### Struct
+
+Struct 是一个包含 100 个基础类型字段的类:
+
+```java
+public class Struct {
+  public int f1;
+  public long f2;
+  public float f3;
+  public double f4;
+  // ...
+  public double f99;
+}
+```
+
+### Struct2
+
+Struct2 是一个包含 100 个装箱类型字段的类:
+
+```java
+public class Struct {
+  public Integer f1;
+  public Long f2;
+  public Float f3;
+  public Double f4;
+  // ...
+  public Double f99;
+}
+```
+
+### MediaContent
+
+MEDIA_CONTENT 来自 [jvm-serializers](https://github.com/eishay/jvm-serializers/blob/master/tpc/src/data/media/MediaContent.java).
+
+### Sample
+
+SAMPLE 来自 [kryo benchmark](https://github.com/EsotericSoftware/kryo/blob/master/benchmarks/src/main/java/com/esotericsoftware/kryo/benchmarks/data/Sample.java)
+
+## 基准图表
+
+### 序列化到堆内缓冲区
+
+将数据序列化到 Java 字节数组。
+
+#### Java schema 一致性序列化
+
+反序列化端必须与序列化端使用相同的类定义。
+该模式不支持类的前向/后向兼容。
+
+![Java Heap Schema Consistent Serialization](java_heap_serialize_consistent.png)
+
+#### Java schema 兼容模式序列化
+
+反序列化端可以与序列化端使用不同的类定义。
+该模式支持类的前向/后向兼容。
+
+![Java Heap Schema Compatible Serialization](java_heap_serialize_compatible.png)
+
+#### Java schema 一致性反序列化
+
+反序列化端必须与序列化端使用相同的类定义。
+该模式不支持类的前向/后向兼容。
+
+![Java Heap Schema Consistent Deserialization](java_heap_deserialize_consistent.png)
+
+#### Java schema 兼容模式反序列化
+
+反序列化端可以与序列化端使用不同的类定义。
+该模式支持类的前向/后向兼容。
+
+![Java Heap Schema Compatible Deserialization](java_heap_deserialize_compatible.png)
+
+### 堆外序列化
+
+将数据序列化到堆外内存。
+
+#### Java schema 一致性序列化
+
+反序列化端必须与序列化端使用相同的类定义。
+该模式不支持类的前向/后向兼容。
+
+![Java Off Heap Schema Consistent Serialization](java_offheap_serialize_consistent.png)
+
+#### Java schema 兼容模式序列化
+
+反序列化端可以与序列化端使用不同的类定义。
+该模式支持类的前向/后向兼容。
+
+![Java Off Heap Schema Compatible Serialization](java_offheap_serialize_compatible.png)
+
+#### Java schema 一致性反序列化
+
+反序列化端必须与序列化端使用相同的类定义。
+该模式不支持类的前向/后向兼容。
+
+![Java Off Heap Schema Consistent Deserialization](java_offheap_deserialize_consistent.png)
+
+#### Java schema 兼容模式反序列化
+
+反序列化端可以与序列化端使用不同的类定义。
+该模式支持类的前向/后向兼容。
+
+![Java Off Heap Schema Compatible Deserialization](java_offheap_deserialize_compatible.png)
+
+### 零拷贝序列化
+
+注意:零拷贝序列化只是在序列化阶段避免拷贝;如果将数据发送到其他机器,仍可能发生拷贝。
+
+但如果在同一节点进程间序列化并使用共享内存,且数据在序列化前已位于堆外,那么其他进程可无拷贝读取该缓冲区。
+
+#### Java 零拷贝序列化到堆内缓冲区
+
+![Java Zero Copy Serialization](java_zero_copy_serialize.png)
+
+#### Java 零拷贝序列化到直接缓冲区
+
+![Java Zero Copy Deserialization](java_zero_copy_deserialize.png)
+
+## 基准数据
+
+### Java Serialization
+
+| Benchmark              | objectType    | bufferType   | references | Fory           | ForyMetaShared  | Kryo           | Fst           | Hession       | Jdk           | Protostuff    |
+| ---------------------- | ------------- | ------------ | ---------- | -------------- | --------------- | -------------- | ------------- | ------------- | ------------- | ------------- |
+| serialize              | STRUCT        | array        | False      | 7501415.567260 |                 | 558194.100861  | 882178.995727 | 258233.998931 | 155908.244240 | 330975.350403 |
+| serialize              | STRUCT        | array        | True       | 6264439.154428 |                 | 557542.628765  | 757753.756691 | 260845.209485 | 151258.539369 |               |
+| serialize              | STRUCT        | directBuffer | False      | 9834223.243204 |                 | 1078046.011115 | 807847.663261 | 266481.009225 | 154875.908438 | 340262.650047 |
+| serialize              | STRUCT        | directBuffer | True       | 7551780.823133 |                 | 853350.408656  | 762088.935404 | 261762.594966 | 156404.686214 |               |
+| serialize              | STRUCT2       | array        | False      | 3586126.623874 |                 | 325172.969175  | 371762.982661 | 56056.080075  | 36846.049162  | 322563.440433 |
+| serialize              | STRUCT2       | array        | True       | 3306474.506382 |                 | 259863.332448  | 380638.700267 | 60038.879790  | 38183.705811  |               |
+| serialize              | STRUCT2       | directBuffer | False      | 2643155.135327 |                 | 355688.882786  | 365317.705376 | 55924.319442  | 37444.967981  | 325093.716261 |
+| serialize              | STRUCT2       | directBuffer | True       | 2391110.083108 |                 | 338960.426033  | 370851.880711 | 56674.065604  | 35798.679246  |               |
+| serialize              | MEDIA_CONTENT | array        | False      | 3031642.924542 |                 | 730792.521676  | 751892.023189 | 367782.358049 | 137989.198821 | 780618.761219 |
+| serialize              | MEDIA_CONTENT | array        | True       | 2250384.600246 |                 | 445251.084327  | 583859.907758 | 329427.470680 | 140260.668888 |               |
+| serialize              | MEDIA_CONTENT | directBuffer | False      | 2479862.129632 |                 | 608972.517580  | 728001.080250 | 372477.138150 | 138567.623369 | 805941.345157 |
+| serialize              | MEDIA_CONTENT | directBuffer | True       | 1938527.588331 |                 | 359875.473951  | 595679.580108 | 353376.085025 | 140158.673910 |               |
+| serialize              | SAMPLE        | array        | False      | 3570966.469087 |                 | 1105365.931217 | 915907.574306 | 220386.502846 | 118374.836631 | 663272.710783 |
+| serialize              | SAMPLE        | array        | True       | 1767693.835090 |                 | 734215.482291  | 731869.156376 | 192414.014211 | 119858.140625 |               |
+| serialize              | SAMPLE        | directBuffer | False      | 3684487.760591 |                 | 1376560.302168 | 902302.261168 | 220981.308085 | 118273.584257 | 693641.589806 |
+| serialize              | SAMPLE        | directBuffer | True       | 1826456.709478 |                 | 932887.968348  | 723614.066770 | 211949.960255 | 108263.040839 |               |
+| serialize_compatible   | STRUCT        | array        | False      | 3530406.108869 | 9204444.777172  | 145964.199559  |               | 258650.663523 |               |               |
+| serialize_compatible   | STRUCT        | array        | True       | 3293059.098127 | 7064625.291374  | 136180.832879  |               | 263564.913879 |               |               |
+| serialize_compatible   | STRUCT        | directBuffer | False      | 2653169.568374 | 11650229.648715 | 106695.800225  |               | 249221.452137 |               |               |
+| serialize_compatible   | STRUCT        | directBuffer | True       | 2393817.762938 | 8702412.752357  | 106458.212005  |               | 263623.143601 |               |               |
+| serialize_compatible   | STRUCT2       | array        | False      | 2773368.997680 | 2575824.143864  | 125807.748004  |               | 58509.125342  |               |               |
+| serialize_compatible   | STRUCT2       | array        | True       | 2564174.550276 | 3543082.528217  | 114983.546343  |               | 55552.977735  |               |               |
+| serialize_compatible   | STRUCT2       | directBuffer | False      | 1912402.937879 | 2714748.572248  | 92130.672361   |               | 58908.567439  |               |               |
+| serialize_compatible   | STRUCT2       | directBuffer | True       | 1848338.968058 | 1866073.031851  | 88989.724768   |               | 55524.373547  |               |               |
+| serialize_compatible   | MEDIA_CONTENT | array        | False      | 1679272.036223 | 2992288.235281  | 188911.259146  |               | 377195.903772 |               |               |
+| serialize_compatible   | MEDIA_CONTENT | array        | True       | 1406736.538716 | 2058738.716953  | 145782.916427  |               | 351657.879556 |               |               |
+| serialize_compatible   | MEDIA_CONTENT | directBuffer | False      | 1710680.937387 | 2291443.556971  | 185363.714829  |               | 371729.727192 |               |               |
+| serialize_compatible   | MEDIA_CONTENT | directBuffer | True       | 1149999.473994 | 1804349.244125  | 142836.961878  |               | 343834.954942 |               |               |
+| serialize_compatible   | SAMPLE        | array        | False      | 3604596.465625 | 4409055.687063  | 378907.663184  |               | 234454.975158 |               |               |
+| serialize_compatible   | SAMPLE        | array        | True       | 1619648.337293 | 1840705.439334  | 320815.567701  |               | 206174.173039 |               |               |
+| serialize_compatible   | SAMPLE        | directBuffer | False      | 3484533.218305 | 5043538.364886  | 296102.615094  |               | 194761.224263 |               |               |
+| serialize_compatible   | SAMPLE        | directBuffer | True       | 1730822.630648 | 1859289.705838  | 276757.392449  |               | 212840.483308 |               |               |
+| deserialize            | STRUCT        | array        | False      | 4595230.434552 |                 | 607750.343557  | 357887.235311 | 84709.108821  | 29603.066599  | 517381.168594 |
+| deserialize            | STRUCT        | array        | True       | 4634753.596131 |                 | 552802.227807  | 353480.554035 | 91050.370224  | 29727.744196  |               |
+| deserialize            | STRUCT        | directBuffer | False      | 5012002.859236 |                 | 910534.169114  | 352441.597147 | 91151.633583  | 28717.004518  | 538922.947147 |
+| deserialize            | STRUCT        | directBuffer | True       | 4864329.316938 |                 | 914404.107564  | 334574.303484 | 91037.205901  | 29549.998286  |               |
+| deserialize            | STRUCT2       | array        | False      | 1126298.359550 |                 | 275984.042401  | 280131.091068 | 69758.767783  | 14888.805111  | 416212.973861 |
+| deserialize            | STRUCT2       | array        | True       | 1046649.083082 |                 | 222710.554833  | 260649.308016 | 68616.029248  | 14034.100664  |               |
+| deserialize            | STRUCT2       | directBuffer | False      | 1117586.457565 |                 | 319247.256793  | 262519.858810 | 66866.108653  | 14652.043788  | 425523.315814 |
+| deserialize            | STRUCT2       | directBuffer | True       | 1018277.848128 |                 | 249105.828416  | 234973.637096 | 65338.345185  | 14425.886048  |               |
+| deserialize            | MEDIA_CONTENT | array        | False      | 2054066.903469 |                 | 577631.234369  | 363455.785182 | 118156.072284 | 38536.250402  | 951662.019963 |
+| deserialize            | MEDIA_CONTENT | array        | True       | 1507767.206603 |                 | 365530.417232  | 304371.728638 | 120016.594171 | 38957.191090  |               |
+| deserialize            | MEDIA_CONTENT | directBuffer | False      | 1502746.028159 |                 | 389473.174523  | 311691.658687 | 111067.942626 | 40512.632076  | 964664.641598 |
+| deserialize            | MEDIA_CONTENT | directBuffer | True       | 1290593.975753 |                 | 306995.220799  | 251820.171513 | 121820.821260 | 37030.594632  |               |
+| deserialize            | SAMPLE        | array        | False      | 2069988.624415 |                 | 979173.981159  | 473409.796491 | 119471.518388 | 29309.573998  | 619338.385412 |
+| deserialize            | SAMPLE        | array        | True       | 1797942.442313 |                 | 716438.884369  | 428315.502365 | 121106.002978 | 27466.003923  |               |
+| deserialize            | SAMPLE        | directBuffer | False      | 2229791.078395 |                 | 983538.936801  | 441027.550809 | 117806.916589 | 28128.457935  | 624804.978534 |
+| deserialize            | SAMPLE        | directBuffer | True       | 1958815.397807 |                 | 762889.302732  | 420523.770904 | 121940.783597 | 28221.014735  |               |
+| deserialize_compatible | STRUCT        | array        | False      | 2110335.039275 | 4978833.206806  | 78771.635309   |               | 88617.486795  |               |               |
+| deserialize_compatible | STRUCT        | array        | True       | 2135681.982674 | 4807963.882520  | 72805.937649   |               | 90206.654212  |               |               |
+| deserialize_compatible | STRUCT        | directBuffer | False      | 1596464.248141 | 5149070.657830  | 58574.904225   |               | 89580.561575  |               |               |
+| deserialize_compatible | STRUCT        | directBuffer | True       | 1684681.074242 | 5137500.621288  | 60685.320299   |               | 84407.472531  |               |               |
+| deserialize_compatible | STRUCT2       | array        | False      | 849507.176263  | 1201998.142474  | 60602.285743   |               | 63703.763814  |               |               |
+| deserialize_compatible | STRUCT2       | array        | True       | 815120.319155  | 1058423.614156  | 62729.908347   |               | 69521.573119  |               |               |
+| deserialize_compatible | STRUCT2       | directBuffer | False      | 784036.589363  | 1131212.586953  | 54637.329134   |               | 69342.030965  |               |               |
+| deserialize_compatible | STRUCT2       | directBuffer | True       | 782679.662083  | 1089162.408165  | 51761.569591   |               | 68542.055543  |               |               |
+| deserialize_compatible | MEDIA_CONTENT | array        | False      | 1441671.706320 | 2279742.810882  | 180882.860363  |               | 121619.090797 |               |               |
+| deserialize_compatible | MEDIA_CONTENT | array        | True       | 1121136.039627 | 1623938.202345  | 154311.211540  |               | 119994.104050 |               |               |
+| deserialize_compatible | MEDIA_CONTENT | directBuffer | False      | 1256034.732514 | 1718098.363961  | 134485.160300  |               | 107594.474890 |               |               |
+| deserialize_compatible | MEDIA_CONTENT | directBuffer | True       | 1054942.751816 | 1333345.536684  | 119311.787329  |               | 116531.023438 |               |               |
+| deserialize_compatible | SAMPLE        | array        | False      | 2296046.895861 | 2485564.396196  | 255086.928308  |               | 121898.105768 |               |               |
+| deserialize_compatible | SAMPLE        | array        | True       | 1834139.395757 | 2002938.794909  | 238811.995510  |               | 121297.485903 |               |               |
+| deserialize_compatible | SAMPLE        | directBuffer | False      | 2308111.633661 | 2289261.533644  | 201993.787890  |               | 124044.417439 |               |               |
+| deserialize_compatible | SAMPLE        | directBuffer | True       | 1820490.585648 | 1927548.827586  | 174534.710870  |               | 120276.449497 |               |               |
+
+### Java 零拷贝
+
+| Benchmark   | array_size | bufferType   | dataType        | Fory           | Kryo           | Fst            |
+| ---- | ---------- | ------------ | --------------- | -------------- | -------------- | -------------- |
+| serialize   | 200        | array        | BUFFER          | 5123572.914045 | 1985187.977633 | 2400193.220466 |
+| serialize   | 200        | array        | PRIMITIVE_ARRAY | 8297232.942927 | 147342.606262  | 313986.053417  |
+| serialize   | 200        | directBuffer | BUFFER          | 5400346.890126 | 1739454.519770 | 2282550.111756 |
+| serialize   | 200        | directBuffer | PRIMITIVE_ARRAY | 8335248.350301 | 972683.763633  | 294132.218623  |
+| serialize   | 1000       | array        | BUFFER          | 4979590.929127 | 1616159.671230 | 1805557.477810 |
+| serialize   | 1000       | array        | PRIMITIVE_ARRAY | 8772856.921028 | 31395.721514   | 67209.107012   |
+| serialize   | 1000       | directBuffer | BUFFER          | 5376191.775007 | 1377272.568510 | 1644789.427010 |
+| serialize   | 1000       | directBuffer | PRIMITIVE_ARRAY | 8207563.785251 | 209183.090868  | 66108.014322   |
+| serialize   | 5000       | array        | BUFFER          | 5018916.322770 | 711287.533377  | 811029.402136  |
+| serialize   | 5000       | array        | PRIMITIVE_ARRAY | 8027439.580226 | 6248.006967    | 14997.400124   |
+| serialize   | 5000       | directBuffer | BUFFER          | 5330897.682960 | 707092.956534  | 477148.540850  |
+| serialize   | 5000       | directBuffer | PRIMITIVE_ARRAY | 7695981.988316 | 43565.678616   | 15000.378818   |
+| deserialize | 200        | array        | BUFFER          | 3302149.383135 | 1296284.787720 | 657754.887247  |
+| deserialize | 200        | array        | PRIMITIVE_ARRAY | 986136.067809  | 146675.360652  | 219333.990504  |
+| deserialize | 200        | directBuffer | BUFFER          | 3113115.471758 | 1004844.498712 | 598421.278941  |
+| deserialize | 200        | directBuffer | PRIMITIVE_ARRAY | 991807.969328  | 518713.299422  | 179604.045774  |
+| deserialize | 1000       | array        | BUFFER          | 2831942.848999 | 721266.541130  | 422147.154601  |
+| deserialize | 1000       | array        | PRIMITIVE_ARRAY | 205671.992736  | 30409.835023   | 53100.903684   |
+| deserialize | 1000       | directBuffer | BUFFER          | 3397690.327371 | 592972.713203  | 298929.116572  |
+| deserialize | 1000       | directBuffer | PRIMITIVE_ARRAY | 202275.242341  | 112132.004609  | 38572.001768   |
+| deserialize | 5000       | array        | BUFFER          | 3296658.120035 | 147251.846111  | 136934.604328  |
+| deserialize | 5000       | array        | PRIMITIVE_ARRAY | 40312.590172   | 6122.351228    | 10672.872798   |
+| deserialize | 5000       | directBuffer | BUFFER          | 3284441.570594 | 148614.476829  | 77950.612503   |
+| deserialize | 5000       | directBuffer | PRIMITIVE_ARRAY | 40413.743717   | 21826.040410   | 8561.694533    |
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/java/data/jmh-jdk-11-deserialization.csv b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/java/data/jmh-jdk-11-deserialization.csv
new file mode 100644
index 0000000000..98760a4721
--- /dev/null
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/java/data/jmh-jdk-11-deserialization.csv
@@ -0,0 +1,153 @@
+"Benchmark","Mode","Threads","Samples","Score","Score Error (99.9%)","Unit","Param: bufferType","Param: objectType","Param: references"
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.fst_deserialize","thrpt",1,3,473409.796491,250793.361170,"ops/s",array,SAMPLE,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.fst_deserialize","thrpt",1,3,428315.502365,191770.682411,"ops/s",array,SAMPLE,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.fst_deserialize","thrpt",1,3,363455.785182,44717.666948,"ops/s",array,MEDIA_CONTENT,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.fst_deserialize","thrpt",1,3,304371.728638,74831.791688,"ops/s",array,MEDIA_CONTENT,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.fst_deserialize","thrpt",1,3,357887.235311,218092.594151,"ops/s",array,STRUCT,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.fst_deserialize","thrpt",1,3,353480.554035,229239.505256,"ops/s",array,STRUCT,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.fst_deserialize","thrpt",1,3,280131.091068,89472.347221,"ops/s",array,STRUCT2,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.fst_deserialize","thrpt",1,3,260649.308016,165597.762734,"ops/s",array,STRUCT2,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.fst_deserialize","thrpt",1,3,441027.550809,321712.847983,"ops/s",directBuffer,SAMPLE,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.fst_deserialize","thrpt",1,3,420523.770904,122531.658151,"ops/s",directBuffer,SAMPLE,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.fst_deserialize","thrpt",1,3,311691.658687,185300.664992,"ops/s",directBuffer,MEDIA_CONTENT,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.fst_deserialize","thrpt",1,3,251820.171513,894743.730727,"ops/s",directBuffer,MEDIA_CONTENT,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.fst_deserialize","thrpt",1,3,352441.597147,109488.413174,"ops/s",directBuffer,STRUCT,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.fst_deserialize","thrpt",1,3,334574.303484,89858.329407,"ops/s",directBuffer,STRUCT,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.fst_deserialize","thrpt",1,3,262519.858810,138990.948859,"ops/s",directBuffer,STRUCT2,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.fst_deserialize","thrpt",1,3,234973.637096,568162.582389,"ops/s",directBuffer,STRUCT2,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.fory_deserialize","thrpt",1,3,2069988.624415,1501625.089719,"ops/s",array,SAMPLE,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.fory_deserialize","thrpt",1,3,1797942.442313,3541577.357052,"ops/s",array,SAMPLE,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.fory_deserialize","thrpt",1,3,2054066.903469,3314161.094630,"ops/s",array,MEDIA_CONTENT,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.fory_deserialize","thrpt",1,3,1507767.206603,1662320.958961,"ops/s",array,MEDIA_CONTENT,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.fory_deserialize","thrpt",1,3,4595230.434552,678411.427346,"ops/s",array,STRUCT,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.fory_deserialize","thrpt",1,3,4634753.596131,582102.492158,"ops/s",array,STRUCT,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.fory_deserialize","thrpt",1,3,1126298.359550,856691.704987,"ops/s",array,STRUCT2,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.fory_deserialize","thrpt",1,3,1046649.083082,1816153.563648,"ops/s",array,STRUCT2,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.fory_deserialize","thrpt",1,3,2229791.078395,2950833.975767,"ops/s",directBuffer,SAMPLE,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.fory_deserialize","thrpt",1,3,1958815.397807,381903.427430,"ops/s",directBuffer,SAMPLE,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.fory_deserialize","thrpt",1,3,1502746.028159,1759759.267183,"ops/s",directBuffer,MEDIA_CONTENT,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.fory_deserialize","thrpt",1,3,1290593.975753,246089.810346,"ops/s",directBuffer,MEDIA_CONTENT,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.fory_deserialize","thrpt",1,3,5012002.859236,3360944.705659,"ops/s",directBuffer,STRUCT,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.fory_deserialize","thrpt",1,3,4864329.316938,4357833.300692,"ops/s",directBuffer,STRUCT,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.fory_deserialize","thrpt",1,3,1117586.457565,323438.118804,"ops/s",directBuffer,STRUCT2,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.fory_deserialize","thrpt",1,3,1018277.848128,1141314.435153,"ops/s",directBuffer,STRUCT2,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.fory_deserialize_compatible","thrpt",1,3,2296046.895861,2532372.600048,"ops/s",array,SAMPLE,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.fory_deserialize_compatible","thrpt",1,3,1834139.395757,1021897.505849,"ops/s",array,SAMPLE,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.fory_deserialize_compatible","thrpt",1,3,1441671.706320,317052.609754,"ops/s",array,MEDIA_CONTENT,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.fory_deserialize_compatible","thrpt",1,3,1121136.039627,979316.642796,"ops/s",array,MEDIA_CONTENT,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.fory_deserialize_compatible","thrpt",1,3,2110335.039275,389404.889706,"ops/s",array,STRUCT,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.fory_deserialize_compatible","thrpt",1,3,2135681.982674,1140328.709799,"ops/s",array,STRUCT,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.fory_deserialize_compatible","thrpt",1,3,849507.176263,77466.989680,"ops/s",array,STRUCT2,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.fory_deserialize_compatible","thrpt",1,3,815120.319155,110547.743648,"ops/s",array,STRUCT2,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.fory_deserialize_compatible","thrpt",1,3,2308111.633661,1699117.497565,"ops/s",directBuffer,SAMPLE,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.fory_deserialize_compatible","thrpt",1,3,1820490.585648,244290.391445,"ops/s",directBuffer,SAMPLE,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.fory_deserialize_compatible","thrpt",1,3,1256034.732514,811833.294307,"ops/s",directBuffer,MEDIA_CONTENT,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.fory_deserialize_compatible","thrpt",1,3,1054942.751816,180122.424477,"ops/s",directBuffer,MEDIA_CONTENT,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.fory_deserialize_compatible","thrpt",1,3,1596464.248141,1624412.248391,"ops/s",directBuffer,STRUCT,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.fory_deserialize_compatible","thrpt",1,3,1684681.074242,865262.572050,"ops/s",directBuffer,STRUCT,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.fory_deserialize_compatible","thrpt",1,3,784036.589363,189745.805570,"ops/s",directBuffer,STRUCT2,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.fory_deserialize_compatible","thrpt",1,3,782679.662083,232459.929272,"ops/s",directBuffer,STRUCT2,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.forymetashared_deserialize_compatible","thrpt",1,3,2485564.396196,404678.689647,"ops/s",array,SAMPLE,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.forymetashared_deserialize_compatible","thrpt",1,3,2002938.794909,254819.284313,"ops/s",array,SAMPLE,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.forymetashared_deserialize_compatible","thrpt",1,3,2279742.810882,1984221.778254,"ops/s",array,MEDIA_CONTENT,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.forymetashared_deserialize_compatible","thrpt",1,3,1623938.202345,902985.831204,"ops/s",array,MEDIA_CONTENT,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.forymetashared_deserialize_compatible","thrpt",1,3,4978833.206806,1201415.339844,"ops/s",array,STRUCT,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.forymetashared_deserialize_compatible","thrpt",1,3,4807963.882520,981981.561987,"ops/s",array,STRUCT,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.forymetashared_deserialize_compatible","thrpt",1,3,1201998.142474,446807.356524,"ops/s",array,STRUCT2,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.forymetashared_deserialize_compatible","thrpt",1,3,1058423.614156,2254684.330438,"ops/s",array,STRUCT2,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.forymetashared_deserialize_compatible","thrpt",1,3,2289261.533644,330913.304260,"ops/s",directBuffer,SAMPLE,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.forymetashared_deserialize_compatible","thrpt",1,3,1927548.827586,2169684.221478,"ops/s",directBuffer,SAMPLE,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.forymetashared_deserialize_compatible","thrpt",1,3,1718098.363961,1096276.962216,"ops/s",directBuffer,MEDIA_CONTENT,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.forymetashared_deserialize_compatible","thrpt",1,3,1333345.536684,1110700.750020,"ops/s",directBuffer,MEDIA_CONTENT,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.forymetashared_deserialize_compatible","thrpt",1,3,5149070.657830,3249519.880480,"ops/s",directBuffer,STRUCT,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.forymetashared_deserialize_compatible","thrpt",1,3,5137500.621288,3988987.937014,"ops/s",directBuffer,STRUCT,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.forymetashared_deserialize_compatible","thrpt",1,3,1131212.586953,240674.468318,"ops/s",directBuffer,STRUCT2,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.forymetashared_deserialize_compatible","thrpt",1,3,1089162.408165,294119.059967,"ops/s",directBuffer,STRUCT2,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.hession_deserialize","thrpt",1,3,119471.518388,29846.632785,"ops/s",array,SAMPLE,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.hession_deserialize","thrpt",1,3,121106.002978,27710.578092,"ops/s",array,SAMPLE,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.hession_deserialize","thrpt",1,3,118156.072284,4767.841380,"ops/s",array,MEDIA_CONTENT,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.hession_deserialize","thrpt",1,3,120016.594171,41255.986380,"ops/s",array,MEDIA_CONTENT,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.hession_deserialize","thrpt",1,3,84709.108821,132894.355932,"ops/s",array,STRUCT,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.hession_deserialize","thrpt",1,3,91050.370224,17939.461828,"ops/s",array,STRUCT,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.hession_deserialize","thrpt",1,3,69758.767783,10886.276794,"ops/s",array,STRUCT2,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.hession_deserialize","thrpt",1,3,68616.029248,13625.851120,"ops/s",array,STRUCT2,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.hession_deserialize","thrpt",1,3,117806.916589,35449.535259,"ops/s",directBuffer,SAMPLE,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.hession_deserialize","thrpt",1,3,121940.783597,54381.355274,"ops/s",directBuffer,SAMPLE,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.hession_deserialize","thrpt",1,3,111067.942626,136178.034974,"ops/s",directBuffer,MEDIA_CONTENT,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.hession_deserialize","thrpt",1,3,121820.821260,36972.450957,"ops/s",directBuffer,MEDIA_CONTENT,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.hession_deserialize","thrpt",1,3,91151.633583,18401.579776,"ops/s",directBuffer,STRUCT,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.hession_deserialize","thrpt",1,3,91037.205901,58868.732797,"ops/s",directBuffer,STRUCT,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.hession_deserialize","thrpt",1,3,66866.108653,38522.707093,"ops/s",directBuffer,STRUCT2,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.hession_deserialize","thrpt",1,3,65338.345185,56556.914062,"ops/s",directBuffer,STRUCT2,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.hession_deserialize_compatible","thrpt",1,3,121898.105768,55415.594537,"ops/s",array,SAMPLE,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.hession_deserialize_compatible","thrpt",1,3,121297.485903,33990.621079,"ops/s",array,SAMPLE,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.hession_deserialize_compatible","thrpt",1,3,121619.090797,6094.683470,"ops/s",array,MEDIA_CONTENT,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.hession_deserialize_compatible","thrpt",1,3,119994.104050,24538.128667,"ops/s",array,MEDIA_CONTENT,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.hession_deserialize_compatible","thrpt",1,3,88617.486795,40076.835119,"ops/s",array,STRUCT,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.hession_deserialize_compatible","thrpt",1,3,90206.654212,19313.248466,"ops/s",array,STRUCT,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.hession_deserialize_compatible","thrpt",1,3,63703.763814,132184.298414,"ops/s",array,STRUCT2,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.hession_deserialize_compatible","thrpt",1,3,69521.573119,8875.645591,"ops/s",array,STRUCT2,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.hession_deserialize_compatible","thrpt",1,3,124044.417439,41135.181705,"ops/s",directBuffer,SAMPLE,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.hession_deserialize_compatible","thrpt",1,3,120276.449497,87827.771405,"ops/s",directBuffer,SAMPLE,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.hession_deserialize_compatible","thrpt",1,3,107594.474890,81084.454215,"ops/s",directBuffer,MEDIA_CONTENT,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.hession_deserialize_compatible","thrpt",1,3,116531.023438,141591.979641,"ops/s",directBuffer,MEDIA_CONTENT,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.hession_deserialize_compatible","thrpt",1,3,89580.561575,23464.095972,"ops/s",directBuffer,STRUCT,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.hession_deserialize_compatible","thrpt",1,3,84407.472531,46007.731889,"ops/s",directBuffer,STRUCT,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.hession_deserialize_compatible","thrpt",1,3,69342.030965,17706.784671,"ops/s",directBuffer,STRUCT2,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.hession_deserialize_compatible","thrpt",1,3,68542.055543,31793.805138,"ops/s",directBuffer,STRUCT2,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.jdk_deserialize","thrpt",1,3,29309.573998,765.998843,"ops/s",array,SAMPLE,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.jdk_deserialize","thrpt",1,3,27466.003923,14896.452629,"ops/s",array,SAMPLE,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.jdk_deserialize","thrpt",1,3,38536.250402,28217.590983,"ops/s",array,MEDIA_CONTENT,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.jdk_deserialize","thrpt",1,3,38957.191090,23931.545367,"ops/s",array,MEDIA_CONTENT,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.jdk_deserialize","thrpt",1,3,29603.066599,10373.666720,"ops/s",array,STRUCT,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.jdk_deserialize","thrpt",1,3,29727.744196,15820.774882,"ops/s",array,STRUCT,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.jdk_deserialize","thrpt",1,3,14888.805111,842.165916,"ops/s",array,STRUCT2,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.jdk_deserialize","thrpt",1,3,14034.100664,13936.787605,"ops/s",array,STRUCT2,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.jdk_deserialize","thrpt",1,3,28128.457935,5385.055284,"ops/s",directBuffer,SAMPLE,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.jdk_deserialize","thrpt",1,3,28221.014735,15281.277719,"ops/s",directBuffer,SAMPLE,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.jdk_deserialize","thrpt",1,3,40512.632076,8592.454839,"ops/s",directBuffer,MEDIA_CONTENT,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.jdk_deserialize","thrpt",1,3,37030.594632,9683.316145,"ops/s",directBuffer,MEDIA_CONTENT,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.jdk_deserialize","thrpt",1,3,28717.004518,17023.663871,"ops/s",directBuffer,STRUCT,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.jdk_deserialize","thrpt",1,3,29549.998286,13823.854047,"ops/s",directBuffer,STRUCT,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.jdk_deserialize","thrpt",1,3,14652.043788,2419.900104,"ops/s",directBuffer,STRUCT2,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.jdk_deserialize","thrpt",1,3,14425.886048,8723.095052,"ops/s",directBuffer,STRUCT2,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.kryo_deserialize","thrpt",1,3,979173.981159,178146.966897,"ops/s",array,SAMPLE,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.kryo_deserialize","thrpt",1,3,716438.884369,623966.984928,"ops/s",array,SAMPLE,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.kryo_deserialize","thrpt",1,3,577631.234369,221011.018380,"ops/s",array,MEDIA_CONTENT,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.kryo_deserialize","thrpt",1,3,365530.417232,214946.853015,"ops/s",array,MEDIA_CONTENT,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.kryo_deserialize","thrpt",1,3,607750.343557,99638.164976,"ops/s",array,STRUCT,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.kryo_deserialize","thrpt",1,3,552802.227807,126286.013177,"ops/s",array,STRUCT,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.kryo_deserialize","thrpt",1,3,275984.042401,9405.143983,"ops/s",array,STRUCT2,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.kryo_deserialize","thrpt",1,3,222710.554833,45168.519253,"ops/s",array,STRUCT2,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.kryo_deserialize","thrpt",1,3,983538.936801,1112062.949472,"ops/s",directBuffer,SAMPLE,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.kryo_deserialize","thrpt",1,3,762889.302732,279678.610328,"ops/s",directBuffer,SAMPLE,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.kryo_deserialize","thrpt",1,3,389473.174523,43058.395501,"ops/s",directBuffer,MEDIA_CONTENT,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.kryo_deserialize","thrpt",1,3,306995.220799,57411.579647,"ops/s",directBuffer,MEDIA_CONTENT,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.kryo_deserialize","thrpt",1,3,910534.169114,1888677.766640,"ops/s",directBuffer,STRUCT,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.kryo_deserialize","thrpt",1,3,914404.107564,357717.816934,"ops/s",directBuffer,STRUCT,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.kryo_deserialize","thrpt",1,3,319247.256793,217674.935649,"ops/s",directBuffer,STRUCT2,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.kryo_deserialize","thrpt",1,3,249105.828416,131690.474985,"ops/s",directBuffer,STRUCT2,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.kryo_deserialize_compatible","thrpt",1,3,255086.928308,23672.392381,"ops/s",array,SAMPLE,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.kryo_deserialize_compatible","thrpt",1,3,238811.995510,18059.118666,"ops/s",array,SAMPLE,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.kryo_deserialize_compatible","thrpt",1,3,180882.860363,69339.581545,"ops/s",array,MEDIA_CONTENT,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.kryo_deserialize_compatible","thrpt",1,3,154311.211540,23065.912064,"ops/s",array,MEDIA_CONTENT,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.kryo_deserialize_compatible","thrpt",1,3,78771.635309,45155.641241,"ops/s",array,STRUCT,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.kryo_deserialize_compatible","thrpt",1,3,72805.937649,16849.888437,"ops/s",array,STRUCT,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.kryo_deserialize_compatible","thrpt",1,3,60602.285743,61404.274046,"ops/s",array,STRUCT2,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.kryo_deserialize_compatible","thrpt",1,3,62729.908347,32805.651539,"ops/s",array,STRUCT2,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.kryo_deserialize_compatible","thrpt",1,3,201993.787890,41567.224827,"ops/s",directBuffer,SAMPLE,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.kryo_deserialize_compatible","thrpt",1,3,174534.710870,96357.498949,"ops/s",directBuffer,SAMPLE,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.kryo_deserialize_compatible","thrpt",1,3,134485.160300,104898.991148,"ops/s",directBuffer,MEDIA_CONTENT,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.kryo_deserialize_compatible","thrpt",1,3,119311.787329,66580.856795,"ops/s",directBuffer,MEDIA_CONTENT,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.kryo_deserialize_compatible","thrpt",1,3,58574.904225,140682.248378,"ops/s",directBuffer,STRUCT,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.kryo_deserialize_compatible","thrpt",1,3,60685.320299,24159.853451,"ops/s",directBuffer,STRUCT,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.kryo_deserialize_compatible","thrpt",1,3,54637.329134,14011.283798,"ops/s",directBuffer,STRUCT2,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.kryo_deserialize_compatible","thrpt",1,3,51761.569591,61030.640534,"ops/s",directBuffer,STRUCT2,true
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.protostuff_deserialize","thrpt",1,3,619338.385412,275705.847169,"ops/s",array,SAMPLE,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.protostuff_deserialize","thrpt",1,3,951662.019963,165160.853007,"ops/s",array,MEDIA_CONTENT,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.protostuff_deserialize","thrpt",1,3,517381.168594,313746.662696,"ops/s",array,STRUCT,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.protostuff_deserialize","thrpt",1,3,416212.973861,119393.345217,"ops/s",array,STRUCT2,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.protostuff_deserialize","thrpt",1,3,624804.978534,147685.682690,"ops/s",directBuffer,SAMPLE,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.protostuff_deserialize","thrpt",1,3,964664.641598,218386.902856,"ops/s",directBuffer,MEDIA_CONTENT,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.protostuff_deserialize","thrpt",1,3,538922.947147,59168.303230,"ops/s",directBuffer,STRUCT,false
+"org.apache.fory.benchmark.UserTypeDeserializeSuite.protostuff_deserialize","thrpt",1,3,425523.315814,179264.359952,"ops/s",directBuffer,STRUCT2,false
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/java/data/jmh-jdk-11-serialization.csv b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/java/data/jmh-jdk-11-serialization.csv
new file mode 100644
index 0000000000..2e985751a7
--- /dev/null
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/java/data/jmh-jdk-11-serialization.csv
@@ -0,0 +1,153 @@
+"Benchmark","Mode","Threads","Samples","Score","Score Error (99.9%)","Unit","Param: bufferType","Param: objectType","Param: references"
+"org.apache.fory.benchmark.UserTypeSerializeSuite.fst_serialize","thrpt",1,3,915907.574306,87627.907529,"ops/s",array,SAMPLE,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.fst_serialize","thrpt",1,3,731869.156376,37845.555465,"ops/s",array,SAMPLE,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.fst_serialize","thrpt",1,3,751892.023189,174327.010719,"ops/s",array,MEDIA_CONTENT,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.fst_serialize","thrpt",1,3,583859.907758,320047.618377,"ops/s",array,MEDIA_CONTENT,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.fst_serialize","thrpt",1,3,882178.995727,294884.724923,"ops/s",array,STRUCT,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.fst_serialize","thrpt",1,3,757753.756691,605180.489112,"ops/s",array,STRUCT,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.fst_serialize","thrpt",1,3,371762.982661,80513.482138,"ops/s",array,STRUCT2,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.fst_serialize","thrpt",1,3,380638.700267,101974.434105,"ops/s",array,STRUCT2,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.fst_serialize","thrpt",1,3,902302.261168,474054.277143,"ops/s",directBuffer,SAMPLE,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.fst_serialize","thrpt",1,3,723614.066770,77429.645491,"ops/s",directBuffer,SAMPLE,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.fst_serialize","thrpt",1,3,728001.080250,75699.111305,"ops/s",directBuffer,MEDIA_CONTENT,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.fst_serialize","thrpt",1,3,595679.580108,117269.848918,"ops/s",directBuffer,MEDIA_CONTENT,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.fst_serialize","thrpt",1,3,807847.663261,67842.801069,"ops/s",directBuffer,STRUCT,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.fst_serialize","thrpt",1,3,762088.935404,575559.070335,"ops/s",directBuffer,STRUCT,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.fst_serialize","thrpt",1,3,365317.705376,138313.634773,"ops/s",directBuffer,STRUCT2,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.fst_serialize","thrpt",1,3,370851.880711,66834.323719,"ops/s",directBuffer,STRUCT2,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.fory_serialize","thrpt",1,3,3570966.469087,152949.902180,"ops/s",array,SAMPLE,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.fory_serialize","thrpt",1,3,1767693.835090,263146.035836,"ops/s",array,SAMPLE,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.fory_serialize","thrpt",1,3,3031642.924542,567213.986117,"ops/s",array,MEDIA_CONTENT,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.fory_serialize","thrpt",1,3,2250384.600246,529709.299207,"ops/s",array,MEDIA_CONTENT,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.fory_serialize","thrpt",1,3,7501415.567260,6672023.542025,"ops/s",array,STRUCT,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.fory_serialize","thrpt",1,3,6264439.154428,976363.317001,"ops/s",array,STRUCT,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.fory_serialize","thrpt",1,3,3586126.623874,1966282.728305,"ops/s",array,STRUCT2,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.fory_serialize","thrpt",1,3,3306474.506382,869558.338568,"ops/s",array,STRUCT2,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.fory_serialize","thrpt",1,3,3684487.760591,882227.920611,"ops/s",directBuffer,SAMPLE,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.fory_serialize","thrpt",1,3,1826456.709478,1377648.673630,"ops/s",directBuffer,SAMPLE,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.fory_serialize","thrpt",1,3,2479862.129632,1498299.302699,"ops/s",directBuffer,MEDIA_CONTENT,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.fory_serialize","thrpt",1,3,1938527.588331,148125.034055,"ops/s",directBuffer,MEDIA_CONTENT,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.fory_serialize","thrpt",1,3,9834223.243204,5284494.290641,"ops/s",directBuffer,STRUCT,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.fory_serialize","thrpt",1,3,7551780.823133,744016.111639,"ops/s",directBuffer,STRUCT,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.fory_serialize","thrpt",1,3,2643155.135327,200764.008652,"ops/s",directBuffer,STRUCT2,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.fory_serialize","thrpt",1,3,2391110.083108,2608567.411194,"ops/s",directBuffer,STRUCT2,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.fory_serialize_compatible","thrpt",1,3,3604596.465625,1232634.245435,"ops/s",array,SAMPLE,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.fory_serialize_compatible","thrpt",1,3,1619648.337293,212055.067245,"ops/s",array,SAMPLE,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.fory_serialize_compatible","thrpt",1,3,1679272.036223,788041.322785,"ops/s",array,MEDIA_CONTENT,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.fory_serialize_compatible","thrpt",1,3,1406736.538716,263608.222325,"ops/s",array,MEDIA_CONTENT,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.fory_serialize_compatible","thrpt",1,3,3530406.108869,3125642.741982,"ops/s",array,STRUCT,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.fory_serialize_compatible","thrpt",1,3,3293059.098127,96940.669016,"ops/s",array,STRUCT,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.fory_serialize_compatible","thrpt",1,3,2773368.997680,503239.905176,"ops/s",array,STRUCT2,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.fory_serialize_compatible","thrpt",1,3,2564174.550276,978139.792610,"ops/s",array,STRUCT2,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.fory_serialize_compatible","thrpt",1,3,3484533.218305,476583.192148,"ops/s",directBuffer,SAMPLE,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.fory_serialize_compatible","thrpt",1,3,1730822.630648,410016.597939,"ops/s",directBuffer,SAMPLE,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.fory_serialize_compatible","thrpt",1,3,1710680.937387,307207.222026,"ops/s",directBuffer,MEDIA_CONTENT,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.fory_serialize_compatible","thrpt",1,3,1149999.473994,140915.968294,"ops/s",directBuffer,MEDIA_CONTENT,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.fory_serialize_compatible","thrpt",1,3,2653169.568374,535312.987476,"ops/s",directBuffer,STRUCT,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.fory_serialize_compatible","thrpt",1,3,2393817.762938,380997.375838,"ops/s",directBuffer,STRUCT,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.fory_serialize_compatible","thrpt",1,3,1912402.937879,284090.793301,"ops/s",directBuffer,STRUCT2,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.fory_serialize_compatible","thrpt",1,3,1848338.968058,108311.846780,"ops/s",directBuffer,STRUCT2,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.forymetashared_serialize_compatible","thrpt",1,3,4409055.687063,112740.443049,"ops/s",array,SAMPLE,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.forymetashared_serialize_compatible","thrpt",1,3,1840705.439334,516764.580627,"ops/s",array,SAMPLE,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.forymetashared_serialize_compatible","thrpt",1,3,2992288.235281,867622.163323,"ops/s",array,MEDIA_CONTENT,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.forymetashared_serialize_compatible","thrpt",1,3,2058738.716953,2388681.798594,"ops/s",array,MEDIA_CONTENT,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.forymetashared_serialize_compatible","thrpt",1,3,9204444.777172,1526628.258403,"ops/s",array,STRUCT,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.forymetashared_serialize_compatible","thrpt",1,3,7064625.291374,2655795.498346,"ops/s",array,STRUCT,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.forymetashared_serialize_compatible","thrpt",1,3,2575824.143864,2216634.295140,"ops/s",array,STRUCT2,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.forymetashared_serialize_compatible","thrpt",1,3,3543082.528217,393858.603613,"ops/s",array,STRUCT2,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.forymetashared_serialize_compatible","thrpt",1,3,5043538.364886,2797987.191909,"ops/s",directBuffer,SAMPLE,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.forymetashared_serialize_compatible","thrpt",1,3,1859289.705838,366893.710607,"ops/s",directBuffer,SAMPLE,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.forymetashared_serialize_compatible","thrpt",1,3,2291443.556971,3167882.958411,"ops/s",directBuffer,MEDIA_CONTENT,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.forymetashared_serialize_compatible","thrpt",1,3,1804349.244125,481995.792041,"ops/s",directBuffer,MEDIA_CONTENT,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.forymetashared_serialize_compatible","thrpt",1,3,11650229.648715,1101289.207239,"ops/s",directBuffer,STRUCT,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.forymetashared_serialize_compatible","thrpt",1,3,8702412.752357,1116617.972427,"ops/s",directBuffer,STRUCT,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.forymetashared_serialize_compatible","thrpt",1,3,2714748.572248,284462.787825,"ops/s",directBuffer,STRUCT2,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.forymetashared_serialize_compatible","thrpt",1,3,1866073.031851,1521156.537508,"ops/s",directBuffer,STRUCT2,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.hession_serialize","thrpt",1,3,220386.502846,60892.430853,"ops/s",array,SAMPLE,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.hession_serialize","thrpt",1,3,192414.014211,34217.359956,"ops/s",array,SAMPLE,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.hession_serialize","thrpt",1,3,367782.358049,54538.846197,"ops/s",array,MEDIA_CONTENT,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.hession_serialize","thrpt",1,3,329427.470680,530871.650379,"ops/s",array,MEDIA_CONTENT,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.hession_serialize","thrpt",1,3,258233.998931,145299.453488,"ops/s",array,STRUCT,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.hession_serialize","thrpt",1,3,260845.209485,90601.426407,"ops/s",array,STRUCT,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.hession_serialize","thrpt",1,3,56056.080075,3919.171009,"ops/s",array,STRUCT2,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.hession_serialize","thrpt",1,3,60038.879790,6808.083631,"ops/s",array,STRUCT2,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.hession_serialize","thrpt",1,3,220981.308085,153633.380796,"ops/s",directBuffer,SAMPLE,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.hession_serialize","thrpt",1,3,211949.960255,231322.136517,"ops/s",directBuffer,SAMPLE,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.hession_serialize","thrpt",1,3,372477.138150,39349.725456,"ops/s",directBuffer,MEDIA_CONTENT,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.hession_serialize","thrpt",1,3,353376.085025,11334.885856,"ops/s",directBuffer,MEDIA_CONTENT,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.hession_serialize","thrpt",1,3,266481.009225,113518.076189,"ops/s",directBuffer,STRUCT,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.hession_serialize","thrpt",1,3,261762.594966,64652.028148,"ops/s",directBuffer,STRUCT,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.hession_serialize","thrpt",1,3,55924.319442,28173.043405,"ops/s",directBuffer,STRUCT2,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.hession_serialize","thrpt",1,3,56674.065604,2667.957614,"ops/s",directBuffer,STRUCT2,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.hession_serialize_compatible","thrpt",1,3,234454.975158,5232.236462,"ops/s",array,SAMPLE,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.hession_serialize_compatible","thrpt",1,3,206174.173039,54217.176504,"ops/s",array,SAMPLE,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.hession_serialize_compatible","thrpt",1,3,377195.903772,33297.468886,"ops/s",array,MEDIA_CONTENT,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.hession_serialize_compatible","thrpt",1,3,351657.879556,10762.766962,"ops/s",array,MEDIA_CONTENT,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.hession_serialize_compatible","thrpt",1,3,258650.663523,64158.329095,"ops/s",array,STRUCT,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.hession_serialize_compatible","thrpt",1,3,263564.913879,101476.568014,"ops/s",array,STRUCT,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.hession_serialize_compatible","thrpt",1,3,58509.125342,10836.872797,"ops/s",array,STRUCT2,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.hession_serialize_compatible","thrpt",1,3,55552.977735,37802.538138,"ops/s",array,STRUCT2,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.hession_serialize_compatible","thrpt",1,3,194761.224263,8828.274695,"ops/s",directBuffer,SAMPLE,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.hession_serialize_compatible","thrpt",1,3,212840.483308,50730.019909,"ops/s",directBuffer,SAMPLE,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.hession_serialize_compatible","thrpt",1,3,371729.727192,136063.629978,"ops/s",directBuffer,MEDIA_CONTENT,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.hession_serialize_compatible","thrpt",1,3,343834.954942,13355.085558,"ops/s",directBuffer,MEDIA_CONTENT,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.hession_serialize_compatible","thrpt",1,3,249221.452137,261034.656030,"ops/s",directBuffer,STRUCT,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.hession_serialize_compatible","thrpt",1,3,263623.143601,32854.227410,"ops/s",directBuffer,STRUCT,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.hession_serialize_compatible","thrpt",1,3,58908.567439,4137.470432,"ops/s",directBuffer,STRUCT2,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.hession_serialize_compatible","thrpt",1,3,55524.373547,668.406873,"ops/s",directBuffer,STRUCT2,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.jdk_serialize","thrpt",1,3,118374.836631,34704.407553,"ops/s",array,SAMPLE,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.jdk_serialize","thrpt",1,3,119858.140625,49308.850176,"ops/s",array,SAMPLE,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.jdk_serialize","thrpt",1,3,137989.198821,40017.148924,"ops/s",array,MEDIA_CONTENT,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.jdk_serialize","thrpt",1,3,140260.668888,57308.595910,"ops/s",array,MEDIA_CONTENT,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.jdk_serialize","thrpt",1,3,155908.244240,20385.278504,"ops/s",array,STRUCT,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.jdk_serialize","thrpt",1,3,151258.539369,12676.385578,"ops/s",array,STRUCT,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.jdk_serialize","thrpt",1,3,36846.049162,5491.880967,"ops/s",array,STRUCT2,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.jdk_serialize","thrpt",1,3,38183.705811,14778.659439,"ops/s",array,STRUCT2,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.jdk_serialize","thrpt",1,3,118273.584257,18950.629048,"ops/s",directBuffer,SAMPLE,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.jdk_serialize","thrpt",1,3,108263.040839,14982.910444,"ops/s",directBuffer,SAMPLE,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.jdk_serialize","thrpt",1,3,138567.623369,24365.255940,"ops/s",directBuffer,MEDIA_CONTENT,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.jdk_serialize","thrpt",1,3,140158.673910,54416.908878,"ops/s",directBuffer,MEDIA_CONTENT,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.jdk_serialize","thrpt",1,3,154875.908438,11984.781345,"ops/s",directBuffer,STRUCT,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.jdk_serialize","thrpt",1,3,156404.686214,58131.602098,"ops/s",directBuffer,STRUCT,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.jdk_serialize","thrpt",1,3,37444.967981,14948.012339,"ops/s",directBuffer,STRUCT2,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.jdk_serialize","thrpt",1,3,35798.679246,36641.428549,"ops/s",directBuffer,STRUCT2,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.kryo_serialize","thrpt",1,3,1105365.931217,162251.803619,"ops/s",array,SAMPLE,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.kryo_serialize","thrpt",1,3,734215.482291,79297.387490,"ops/s",array,SAMPLE,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.kryo_serialize","thrpt",1,3,730792.521676,678674.266715,"ops/s",array,MEDIA_CONTENT,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.kryo_serialize","thrpt",1,3,445251.084327,85646.179264,"ops/s",array,MEDIA_CONTENT,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.kryo_serialize","thrpt",1,3,558194.100861,257156.321315,"ops/s",array,STRUCT,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.kryo_serialize","thrpt",1,3,557542.628765,63084.390134,"ops/s",array,STRUCT,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.kryo_serialize","thrpt",1,3,325172.969175,20774.334333,"ops/s",array,STRUCT2,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.kryo_serialize","thrpt",1,3,259863.332448,86373.633851,"ops/s",array,STRUCT2,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.kryo_serialize","thrpt",1,3,1376560.302168,147424.342310,"ops/s",directBuffer,SAMPLE,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.kryo_serialize","thrpt",1,3,932887.968348,249800.928765,"ops/s",directBuffer,SAMPLE,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.kryo_serialize","thrpt",1,3,608972.517580,249598.971835,"ops/s",directBuffer,MEDIA_CONTENT,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.kryo_serialize","thrpt",1,3,359875.473951,274870.064607,"ops/s",directBuffer,MEDIA_CONTENT,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.kryo_serialize","thrpt",1,3,1078046.011115,249527.480472,"ops/s",directBuffer,STRUCT,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.kryo_serialize","thrpt",1,3,853350.408656,126642.692106,"ops/s",directBuffer,STRUCT,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.kryo_serialize","thrpt",1,3,355688.882786,37587.645927,"ops/s",directBuffer,STRUCT2,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.kryo_serialize","thrpt",1,3,338960.426033,36185.446014,"ops/s",directBuffer,STRUCT2,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.kryo_serialize_compatible","thrpt",1,3,378907.663184,280309.649766,"ops/s",array,SAMPLE,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.kryo_serialize_compatible","thrpt",1,3,320815.567701,455179.720989,"ops/s",array,SAMPLE,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.kryo_serialize_compatible","thrpt",1,3,188911.259146,97827.317807,"ops/s",array,MEDIA_CONTENT,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.kryo_serialize_compatible","thrpt",1,3,145782.916427,81270.905462,"ops/s",array,MEDIA_CONTENT,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.kryo_serialize_compatible","thrpt",1,3,145964.199559,88578.667153,"ops/s",array,STRUCT,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.kryo_serialize_compatible","thrpt",1,3,136180.832879,167433.069232,"ops/s",array,STRUCT,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.kryo_serialize_compatible","thrpt",1,3,125807.748004,23178.451287,"ops/s",array,STRUCT2,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.kryo_serialize_compatible","thrpt",1,3,114983.546343,7341.380140,"ops/s",array,STRUCT2,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.kryo_serialize_compatible","thrpt",1,3,296102.615094,18485.738321,"ops/s",directBuffer,SAMPLE,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.kryo_serialize_compatible","thrpt",1,3,276757.392449,61173.636852,"ops/s",directBuffer,SAMPLE,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.kryo_serialize_compatible","thrpt",1,3,185363.714829,121440.885632,"ops/s",directBuffer,MEDIA_CONTENT,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.kryo_serialize_compatible","thrpt",1,3,142836.961878,12450.918452,"ops/s",directBuffer,MEDIA_CONTENT,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.kryo_serialize_compatible","thrpt",1,3,106695.800225,13463.570576,"ops/s",directBuffer,STRUCT,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.kryo_serialize_compatible","thrpt",1,3,106458.212005,2994.065295,"ops/s",directBuffer,STRUCT,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.kryo_serialize_compatible","thrpt",1,3,92130.672361,9515.661170,"ops/s",directBuffer,STRUCT2,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.kryo_serialize_compatible","thrpt",1,3,88989.724768,9379.338279,"ops/s",directBuffer,STRUCT2,true
+"org.apache.fory.benchmark.UserTypeSerializeSuite.protostuff_serialize","thrpt",1,3,663272.710783,522116.492895,"ops/s",array,SAMPLE,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.protostuff_serialize","thrpt",1,3,780618.761219,406063.945348,"ops/s",array,MEDIA_CONTENT,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.protostuff_serialize","thrpt",1,3,330975.350403,196475.862643,"ops/s",array,STRUCT,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.protostuff_serialize","thrpt",1,3,322563.440433,201276.713653,"ops/s",array,STRUCT2,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.protostuff_serialize","thrpt",1,3,693641.589806,43883.803566,"ops/s",directBuffer,SAMPLE,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.protostuff_serialize","thrpt",1,3,805941.345157,91281.699006,"ops/s",directBuffer,MEDIA_CONTENT,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.protostuff_serialize","thrpt",1,3,340262.650047,152117.387028,"ops/s",directBuffer,STRUCT,false
+"org.apache.fory.benchmark.UserTypeSerializeSuite.protostuff_serialize","thrpt",1,3,325093.716261,56485.972228,"ops/s",directBuffer,STRUCT2,false
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/java/data/jmh-jdk-11-zerocopy.csv b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/java/data/jmh-jdk-11-zerocopy.csv
new file mode 100644
index 0000000000..503298291f
--- /dev/null
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/java/data/jmh-jdk-11-zerocopy.csv
@@ -0,0 +1,73 @@
+"Benchmark","Mode","Threads","Samples","Score","Score Error (99.9%)","Unit","Param: array_size","Param: bufferType","Param: dataType","Param: references"
+"org.apache.fory.benchmark.ZeroCopySuite.fst_deserialize","thrpt",1,3,219333.990504,40075.312705,"ops/s",200,array,PRIMITIVE_ARRAY,false
+"org.apache.fory.benchmark.ZeroCopySuite.fst_deserialize","thrpt",1,3,657754.887247,408901.031753,"ops/s",200,array,BUFFER,false
+"org.apache.fory.benchmark.ZeroCopySuite.fst_deserialize","thrpt",1,3,179604.045774,45387.509931,"ops/s",200,directBuffer,PRIMITIVE_ARRAY,false
+"org.apache.fory.benchmark.ZeroCopySuite.fst_deserialize","thrpt",1,3,598421.278941,135411.381215,"ops/s",200,directBuffer,BUFFER,false
+"org.apache.fory.benchmark.ZeroCopySuite.fst_deserialize","thrpt",1,3,53100.903684,17709.358858,"ops/s",1000,array,PRIMITIVE_ARRAY,false
+"org.apache.fory.benchmark.ZeroCopySuite.fst_deserialize","thrpt",1,3,422147.154601,528539.529166,"ops/s",1000,array,BUFFER,false
+"org.apache.fory.benchmark.ZeroCopySuite.fst_deserialize","thrpt",1,3,38572.001768,24685.893533,"ops/s",1000,directBuffer,PRIMITIVE_ARRAY,false
+"org.apache.fory.benchmark.ZeroCopySuite.fst_deserialize","thrpt",1,3,298929.116572,135040.133488,"ops/s",1000,directBuffer,BUFFER,false
+"org.apache.fory.benchmark.ZeroCopySuite.fst_deserialize","thrpt",1,3,10672.872798,11519.184075,"ops/s",5000,array,PRIMITIVE_ARRAY,false
+"org.apache.fory.benchmark.ZeroCopySuite.fst_deserialize","thrpt",1,3,136934.604328,19269.032565,"ops/s",5000,array,BUFFER,false
+"org.apache.fory.benchmark.ZeroCopySuite.fst_deserialize","thrpt",1,3,8561.694533,2137.867210,"ops/s",5000,directBuffer,PRIMITIVE_ARRAY,false
+"org.apache.fory.benchmark.ZeroCopySuite.fst_deserialize","thrpt",1,3,77950.612503,83587.484192,"ops/s",5000,directBuffer,BUFFER,false
+"org.apache.fory.benchmark.ZeroCopySuite.fst_serialize","thrpt",1,3,313986.053417,29311.641179,"ops/s",200,array,PRIMITIVE_ARRAY,false
+"org.apache.fory.benchmark.ZeroCopySuite.fst_serialize","thrpt",1,3,2400193.220466,242732.420524,"ops/s",200,array,BUFFER,false
+"org.apache.fory.benchmark.ZeroCopySuite.fst_serialize","thrpt",1,3,294132.218623,60640.778775,"ops/s",200,directBuffer,PRIMITIVE_ARRAY,false
+"org.apache.fory.benchmark.ZeroCopySuite.fst_serialize","thrpt",1,3,2282550.111756,93004.652618,"ops/s",200,directBuffer,BUFFER,false
+"org.apache.fory.benchmark.ZeroCopySuite.fst_serialize","thrpt",1,3,67209.107012,5947.935958,"ops/s",1000,array,PRIMITIVE_ARRAY,false
+"org.apache.fory.benchmark.ZeroCopySuite.fst_serialize","thrpt",1,3,1805557.477810,5232839.112456,"ops/s",1000,array,BUFFER,false
+"org.apache.fory.benchmark.ZeroCopySuite.fst_serialize","thrpt",1,3,66108.014322,16869.542536,"ops/s",1000,directBuffer,PRIMITIVE_ARRAY,false
+"org.apache.fory.benchmark.ZeroCopySuite.fst_serialize","thrpt",1,3,1644789.427010,54907.475118,"ops/s",1000,directBuffer,BUFFER,false
+"org.apache.fory.benchmark.ZeroCopySuite.fst_serialize","thrpt",1,3,14997.400124,12425.308762,"ops/s",5000,array,PRIMITIVE_ARRAY,false
+"org.apache.fory.benchmark.ZeroCopySuite.fst_serialize","thrpt",1,3,811029.402136,39593.863849,"ops/s",5000,array,BUFFER,false
+"org.apache.fory.benchmark.ZeroCopySuite.fst_serialize","thrpt",1,3,15000.378818,2219.583522,"ops/s",5000,directBuffer,PRIMITIVE_ARRAY,false
+"org.apache.fory.benchmark.ZeroCopySuite.fst_serialize","thrpt",1,3,477148.540850,34970.176073,"ops/s",5000,directBuffer,BUFFER,false
+"org.apache.fory.benchmark.ZeroCopySuite.fory_deserialize","thrpt",1,3,986136.067809,274606.792449,"ops/s",200,array,PRIMITIVE_ARRAY,false
+"org.apache.fory.benchmark.ZeroCopySuite.fory_deserialize","thrpt",1,3,3302149.383135,3166455.521704,"ops/s",200,array,BUFFER,false
+"org.apache.fory.benchmark.ZeroCopySuite.fory_deserialize","thrpt",1,3,991807.969328,296490.837932,"ops/s",200,directBuffer,PRIMITIVE_ARRAY,false
+"org.apache.fory.benchmark.ZeroCopySuite.fory_deserialize","thrpt",1,3,3113115.471758,4861106.592529,"ops/s",200,directBuffer,BUFFER,false
+"org.apache.fory.benchmark.ZeroCopySuite.fory_deserialize","thrpt",1,3,205671.992736,127494.951753,"ops/s",1000,array,PRIMITIVE_ARRAY,false
+"org.apache.fory.benchmark.ZeroCopySuite.fory_deserialize","thrpt",1,3,2831942.848999,1720214.698856,"ops/s",1000,array,BUFFER,false
+"org.apache.fory.benchmark.ZeroCopySuite.fory_deserialize","thrpt",1,3,202275.242341,56270.238293,"ops/s",1000,directBuffer,PRIMITIVE_ARRAY,false
+"org.apache.fory.benchmark.ZeroCopySuite.fory_deserialize","thrpt",1,3,3397690.327371,146058.097383,"ops/s",1000,directBuffer,BUFFER,false
+"org.apache.fory.benchmark.ZeroCopySuite.fory_deserialize","thrpt",1,3,40312.590172,11836.614114,"ops/s",5000,array,PRIMITIVE_ARRAY,false
+"org.apache.fory.benchmark.ZeroCopySuite.fory_deserialize","thrpt",1,3,3296658.120035,2199676.238015,"ops/s",5000,array,BUFFER,false
+"org.apache.fory.benchmark.ZeroCopySuite.fory_deserialize","thrpt",1,3,40413.743717,9893.735875,"ops/s",5000,directBuffer,PRIMITIVE_ARRAY,false
+"org.apache.fory.benchmark.ZeroCopySuite.fory_deserialize","thrpt",1,3,3284441.570594,998247.999163,"ops/s",5000,directBuffer,BUFFER,false
+"org.apache.fory.benchmark.ZeroCopySuite.fory_serialize","thrpt",1,3,8297232.942927,6613235.386482,"ops/s",200,array,PRIMITIVE_ARRAY,false
+"org.apache.fory.benchmark.ZeroCopySuite.fory_serialize","thrpt",1,3,5123572.914045,9342104.794019,"ops/s",200,array,BUFFER,false
+"org.apache.fory.benchmark.ZeroCopySuite.fory_serialize","thrpt",1,3,8335248.350301,2796789.944593,"ops/s",200,directBuffer,PRIMITIVE_ARRAY,false
+"org.apache.fory.benchmark.ZeroCopySuite.fory_serialize","thrpt",1,3,5400346.890126,7654935.504676,"ops/s",200,directBuffer,BUFFER,false
+"org.apache.fory.benchmark.ZeroCopySuite.fory_serialize","thrpt",1,3,8772856.921028,1984208.178343,"ops/s",1000,array,PRIMITIVE_ARRAY,false
+"org.apache.fory.benchmark.ZeroCopySuite.fory_serialize","thrpt",1,3,4979590.929127,5568756.926202,"ops/s",1000,array,BUFFER,false
+"org.apache.fory.benchmark.ZeroCopySuite.fory_serialize","thrpt",1,3,8207563.785251,4153794.222735,"ops/s",1000,directBuffer,PRIMITIVE_ARRAY,false
+"org.apache.fory.benchmark.ZeroCopySuite.fory_serialize","thrpt",1,3,5376191.775007,9167580.616022,"ops/s",1000,directBuffer,BUFFER,false
+"org.apache.fory.benchmark.ZeroCopySuite.fory_serialize","thrpt",1,3,8027439.580226,6148996.477681,"ops/s",5000,array,PRIMITIVE_ARRAY,false
+"org.apache.fory.benchmark.ZeroCopySuite.fory_serialize","thrpt",1,3,5018916.322770,1424045.598203,"ops/s",5000,array,BUFFER,false
+"org.apache.fory.benchmark.ZeroCopySuite.fory_serialize","thrpt",1,3,7695981.988316,578662.201123,"ops/s",5000,directBuffer,PRIMITIVE_ARRAY,false
+"org.apache.fory.benchmark.ZeroCopySuite.fory_serialize","thrpt",1,3,5330897.682960,8055585.038901,"ops/s",5000,directBuffer,BUFFER,false
+"org.apache.fory.benchmark.ZeroCopySuite.kryo_deserialize","thrpt",1,3,146675.360652,23502.675233,"ops/s",200,array,PRIMITIVE_ARRAY,false
+"org.apache.fory.benchmark.ZeroCopySuite.kryo_deserialize","thrpt",1,3,1296284.787720,297204.673569,"ops/s",200,array,BUFFER,false
+"org.apache.fory.benchmark.ZeroCopySuite.kryo_deserialize","thrpt",1,3,518713.299422,600548.228171,"ops/s",200,directBuffer,PRIMITIVE_ARRAY,false
+"org.apache.fory.benchmark.ZeroCopySuite.kryo_deserialize","thrpt",1,3,1004844.498712,552313.083272,"ops/s",200,directBuffer,BUFFER,false
+"org.apache.fory.benchmark.ZeroCopySuite.kryo_deserialize","thrpt",1,3,30409.835023,9562.322209,"ops/s",1000,array,PRIMITIVE_ARRAY,false
+"org.apache.fory.benchmark.ZeroCopySuite.kryo_deserialize","thrpt",1,3,721266.541130,62426.822891,"ops/s",1000,array,BUFFER,false
+"org.apache.fory.benchmark.ZeroCopySuite.kryo_deserialize","thrpt",1,3,112132.004609,6625.327605,"ops/s",1000,directBuffer,PRIMITIVE_ARRAY,false
+"org.apache.fory.benchmark.ZeroCopySuite.kryo_deserialize","thrpt",1,3,592972.713203,511777.226637,"ops/s",1000,directBuffer,BUFFER,false
+"org.apache.fory.benchmark.ZeroCopySuite.kryo_deserialize","thrpt",1,3,6122.351228,3021.683209,"ops/s",5000,array,PRIMITIVE_ARRAY,false
+"org.apache.fory.benchmark.ZeroCopySuite.kryo_deserialize","thrpt",1,3,147251.846111,278375.379465,"ops/s",5000,array,BUFFER,false
+"org.apache.fory.benchmark.ZeroCopySuite.kryo_deserialize","thrpt",1,3,21826.040410,2246.004993,"ops/s",5000,directBuffer,PRIMITIVE_ARRAY,false
+"org.apache.fory.benchmark.ZeroCopySuite.kryo_deserialize","thrpt",1,3,148614.476829,87146.409451,"ops/s",5000,directBuffer,BUFFER,false
+"org.apache.fory.benchmark.ZeroCopySuite.kryo_serialize","thrpt",1,3,147342.606262,138864.952435,"ops/s",200,array,PRIMITIVE_ARRAY,false
+"org.apache.fory.benchmark.ZeroCopySuite.kryo_serialize","thrpt",1,3,1985187.977633,70426.638387,"ops/s",200,array,BUFFER,false
+"org.apache.fory.benchmark.ZeroCopySuite.kryo_serialize","thrpt",1,3,972683.763633,604464.052899,"ops/s",200,directBuffer,PRIMITIVE_ARRAY,false
+"org.apache.fory.benchmark.ZeroCopySuite.kryo_serialize","thrpt",1,3,1739454.519770,1053963.541481,"ops/s",200,directBuffer,BUFFER,false
+"org.apache.fory.benchmark.ZeroCopySuite.kryo_serialize","thrpt",1,3,31395.721514,3652.506399,"ops/s",1000,array,PRIMITIVE_ARRAY,false
+"org.apache.fory.benchmark.ZeroCopySuite.kryo_serialize","thrpt",1,3,1616159.671230,2722436.839807,"ops/s",1000,array,BUFFER,false
+"org.apache.fory.benchmark.ZeroCopySuite.kryo_serialize","thrpt",1,3,209183.090868,25323.702489,"ops/s",1000,directBuffer,PRIMITIVE_ARRAY,false
+"org.apache.fory.benchmark.ZeroCopySuite.kryo_serialize","thrpt",1,3,1377272.568510,203974.331559,"ops/s",1000,directBuffer,BUFFER,false
+"org.apache.fory.benchmark.ZeroCopySuite.kryo_serialize","thrpt",1,3,6248.006967,783.226602,"ops/s",5000,array,PRIMITIVE_ARRAY,false
+"org.apache.fory.benchmark.ZeroCopySuite.kryo_serialize","thrpt",1,3,711287.533377,86363.201941,"ops/s",5000,array,BUFFER,false
+"org.apache.fory.benchmark.ZeroCopySuite.kryo_serialize","thrpt",1,3,43565.678616,4221.267495,"ops/s",5000,directBuffer,PRIMITIVE_ARRAY,false
+"org.apache.fory.benchmark.ZeroCopySuite.kryo_serialize","thrpt",1,3,707092.956534,298737.951680,"ops/s",5000,directBuffer,BUFFER,false
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/java/java_heap_deserialize_compatible.png b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/java/java_heap_deserialize_compatible.png
new file mode 100644
index 0000000000..52dd292a3c
Binary files /dev/null and b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/java/java_heap_deserialize_compatible.png differ
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/java/java_heap_deserialize_consistent.png b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/java/java_heap_deserialize_consistent.png
new file mode 100644
index 0000000000..a21445421a
Binary files /dev/null and b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/java/java_heap_deserialize_consistent.png differ
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/java/java_heap_serialize_compatible.png b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/java/java_heap_serialize_compatible.png
new file mode 100644
index 0000000000..2142dfdbab
Binary files /dev/null and b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/java/java_heap_serialize_compatible.png differ
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/java/java_heap_serialize_consistent.png b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/java/java_heap_serialize_consistent.png
new file mode 100644
index 0000000000..5703f72473
Binary files /dev/null and b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/java/java_heap_serialize_consistent.png differ
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/java/java_offheap_deserialize_compatible.png b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/java/java_offheap_deserialize_compatible.png
new file mode 100644
index 0000000000..ce77bf6fb7
Binary files /dev/null and b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/java/java_offheap_deserialize_compatible.png differ
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/java/java_offheap_deserialize_consistent.png b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/java/java_offheap_deserialize_consistent.png
new file mode 100644
index 0000000000..04c3e3d04a
Binary files /dev/null and b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/java/java_offheap_deserialize_consistent.png differ
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/java/java_offheap_serialize_compatible.png b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/java/java_offheap_serialize_compatible.png
new file mode 100644
index 0000000000..8d9197121c
Binary files /dev/null and b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/java/java_offheap_serialize_compatible.png differ
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/java/java_offheap_serialize_consistent.png b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/java/java_offheap_serialize_consistent.png
new file mode 100644
index 0000000000..8bdea8f559
Binary files /dev/null and b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/java/java_offheap_serialize_consistent.png differ
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/java/java_repo_deserialization_throughput.png b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/java/java_repo_deserialization_throughput.png
new file mode 100644
index 0000000000..d64f5e77a1
Binary files /dev/null and b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/java/java_repo_deserialization_throughput.png differ
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/java/java_repo_serialization_throughput.png b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/java/java_repo_serialization_throughput.png
new file mode 100644
index 0000000000..8f9824ffe1
Binary files /dev/null and b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/java/java_repo_serialization_throughput.png differ
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/java/java_zero_copy_deserialize.png b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/java/java_zero_copy_deserialize.png
new file mode 100644
index 0000000000..a91315eb34
Binary files /dev/null and b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/java/java_zero_copy_deserialize.png differ
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/java/java_zero_copy_serialize.png b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/java/java_zero_copy_serialize.png
new file mode 100644
index 0000000000..a3f1b98346
Binary files /dev/null and b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/java/java_zero_copy_serialize.png differ
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/java/throughput.png b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/java/throughput.png
new file mode 100644
index 0000000000..025f8b4329
Binary files /dev/null and b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/java/throughput.png differ
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/javascript/README.md b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/javascript/README.md
new file mode 100644
index 0000000000..574bb7dfe2
--- /dev/null
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/javascript/README.md
@@ -0,0 +1,82 @@
+# JavaScript 基准性能报告
+
+_生成于 2026-05-08 17:55:12_
+
+## 如何生成本报告
+
+```bash
+cd benchmarks/javascript
+./run.sh
+```
+
+## 基准语义
+
+计时的序列化器循环使用各序列化器原生的类型化值。Fory 接收其 schema 使用的预归一化 Fory 值,protobuf 接收预构造的 protobuf 形态值,JSON 接收基准 JavaScript 对象。Protobuf 耗时不包含 `toProto`、`fromProto`、`protobufjs.create` 或 `toObject` 转换工作。
+
+## 基准图表
+
+图表展示吞吐量(ops/sec);数值越高越好。
+
+![Throughput](throughput.png)
+
+## 硬件与操作系统信息
+
+| 键                        | 值                    |
+| -------------------------- | ------------------------ |
+| 操作系统                         | Darwin 24.6.0            |
+| 机器架构                    | arm64                    |
+| 处理器                  | arm                      |
+| CPU 核心数(物理)       | 12                       |
+| CPU 核心数(逻辑)        | 12                       |
+| 总内存(GB)             | 48.0                     |
+| 基准日期             | 2026-05-08T08:07:36.073Z |
+| CPU 核心数(基准采集) | 12                       |
+| Node.js                    | v22.20.0                 |
+| V8                         | 12.4.254.21-node.33      |
+
+## 基准结果
+
+### 延迟结果(纳秒)
+
+| 数据类型          | 操作   | fory (ns) | protobuf (ns) | json (ns) | 最快  |
+| ----------------- | ---- | --------- | ------------- | --------- | -------- |
+| NumericStruct     | 序列化   | 76.0      | 613.0         | 496.0     | fory     |
+| NumericStruct     | 反序列化 | 56.9      | 94.8          | 333.0     | fory     |
+| Sample            | 序列化   | 318.0     | 2016.6        | 1409.3    | fory     |
+| Sample            | 反序列化 | 496.0     | 902.5         | 1609.6    | fory     |
+| MediaContent      | 序列化   | 494.1     | 1358.5        | 803.5     | fory     |
+| MediaContent      | 反序列化 | 539.3     | 628.3         | 1134.3    | fory     |
+| NumericStructList | 序列化   | 195.3     | 3019.3        | 2013.5    | fory     |
+| NumericStructList | 反序列化 | 183.7     | 606.9         | 1944.0    | fory     |
+| SampleList        | 序列化   | 1681.9    | 19346.7       | 11870.3   | fory     |
+| SampleList        | 反序列化 | 2571.9    | 5730.6        | 9074.5    | fory     |
+| MediaContentList  | 序列化   | 2785.9    | 7616.6        | 3611.5    | fory     |
+| MediaContentList  | 反序列化 | 3709.7    | 3018.6        | 5294.5    | protobuf |
+
+### 吞吐结果(ops/sec)
+
+| 数据类型          | 操作   | fory TPS   | protobuf TPS | json TPS  | 最快  |
+| ----------------- | ---- | ---------- | ------------ | --------- | -------- |
+| NumericStruct     | 序列化   | 13,162,466 | 1,631,271    | 2,016,097 | fory     |
+| NumericStruct     | 反序列化 | 17,568,418 | 10,543,763   | 3,002,971 | fory     |
+| Sample            | 序列化   | 3,144,194  | 495,893      | 709,593   | fory     |
+| Sample            | 反序列化 | 2,015,942  | 1,108,010    | 621,285   | fory     |
+| MediaContent      | 序列化   | 2,023,719  | 736,097      | 1,244,512 | fory     |
+| MediaContent      | 反序列化 | 1,854,348  | 1,591,617    | 881,572   | fory     |
+| NumericStructList | 序列化   | 5,121,376  | 331,201      | 496,645   | fory     |
+| NumericStructList | 反序列化 | 5,444,504  | 1,647,728    | 514,414   | fory     |
+| SampleList        | 序列化   | 594,551    | 51,688       | 84,244    | fory     |
+| SampleList        | 反序列化 | 388,820    | 174,503      | 110,199   | fory     |
+| MediaContentList  | 序列化   | 358,954    | 131,293      | 276,891   | fory     |
+| MediaContentList  | 反序列化 | 269,561    | 331,275      | 188,876   | protobuf |
+
+### 序列化数据大小(字节)
+
+| 数据类型          | fory | protobuf | json |
+| ----------------- | ---- | -------- | ---- |
+| NumericStruct     | 78   | 93       | 159  |
+| Sample            | 445  | 377      | 724  |
+| MediaContent      | 388  | 307      | 596  |
+| NumericStructList | 255  | 475      | 817  |
+| SampleList        | 1978 | 1900     | 3642 |
+| MediaContentList  | 1661 | 1550     | 3009 |
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/javascript/throughput.png b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/javascript/throughput.png
new file mode 100644
index 0000000000..54c24051d6
Binary files /dev/null and b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/javascript/throughput.png differ
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/python/README.md b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/python/README.md
new file mode 100644
index 0000000000..fa2de3f06f
--- /dev/null
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/python/README.md
@@ -0,0 +1,87 @@
+# Python 基准性能报告
+
+_生成于 2026-05-08 17:54:45_
+
+## 如何生成本报告
+
+```bash
+cd benchmarks/python
+./run.sh
+```
+
+## 基准图表
+
+图表展示吞吐量(ops/sec);数值越高越好。
+
+![Throughput](throughput.png)
+
+## 硬件与操作系统信息
+
+| 键                   | 值                        |
+| --------------------- | ---------------------------- |
+| 操作系统                    | Darwin 24.6.0                |
+| 机器架构               | arm64                        |
+| 处理器             | arm                          |
+| Python                | 3.10.8                       |
+| CPU 核心数(物理)  | 12                           |
+| CPU 核心数(逻辑)   | 12                           |
+| 总内存(GB)        | 48.0                         |
+| Python 实现 | CPython                      |
+| 基准平台    | macOS-15.7.2-arm64-arm-64bit |
+
+## 基准配置
+
+| 键        | 值 |
+| ---------- | ----- |
+| warmup     | 3     |
+| iterations | 15    |
+| repeat     | 5     |
+| number     | 1000  |
+| list_size  | 5     |
+
+## 基准结果
+
+### 延迟结果(纳秒)
+
+| 数据类型          | 操作   | fory (ns) | protobuf (ns) | pickle (ns) | 最快 |
+| ----------------- | ---- | --------- | ------------- | ---- | ------- |
+| NumericStruct     | 序列化   | 491.4     | 802.3         | 1119.8      | fory    |
+| NumericStruct     | 反序列化 | 522.2     | 1211.6        | 1788.7      | fory    |
+| Sample            | 序列化   | 1096.4    | 3315.8        | 10185.2     | fory    |
+| Sample            | 反序列化 | 2772.0    | 6659.7        | 7061.9      | fory    |
+| MediaContent      | 序列化   | 989.2     | 3433.2        | 4392.7      | fory    |
+| MediaContent      | 反序列化 | 1518.7    | 4381.2        | 4305.1      | fory    |
+| NumericStructList | 序列化   | 1111.2    | 4707.9        | 3235.8      | fory    |
+| NumericStructList | 反序列化 | 1891.7    | 6891.0        | 3974.9      | fory    |
+| SampleList        | 序列化   | 3447.2    | 18719.1       | 32125.7     | fory    |
+| SampleList        | 反序列化 | 13131.6   | 35264.2       | 24154.4     | fory    |
+| MediaContentList  | 序列化   | 2996.5    | 17597.4       | 11087.8     | fory    |
+| MediaContentList  | 反序列化 | 6228.7    | 21562.0       | 10459.3     | fory    |
+
+### 吞吐结果(ops/sec)
+
+| 数据类型          | 操作   | fory TPS  | protobuf TPS | pickle TPS | 最快 |
+| ----------------- | ---- | --------- | ------------ | ---------- | ------- |
+| NumericStruct     | 序列化   | 2,035,025 | 1,246,379    | 893,009    | fory    |
+| NumericStruct     | 反序列化 | 1,915,112 | 825,344      | 559,055    | fory    |
+| Sample            | 序列化   | 912,072   | 301,590      | 98,182     | fory    |
+| Sample            | 反序列化 | 360,751   | 150,158      | 141,605    | fory    |
+| MediaContent      | 序列化   | 1,010,939 | 291,275      | 227,652    | fory    |
+| MediaContent      | 反序列化 | 658,462   | 228,247      | 232,281    | fory    |
+| NumericStructList | 序列化   | 899,960   | 212,407      | 309,040    | fory    |
+| NumericStructList | 反序列化 | 528,636   | 145,116      | 251,580    | fory    |
+| SampleList        | 序列化   | 290,092   | 53,421       | 31,128     | fory    |
+| SampleList        | 反序列化 | 76,152    | 28,357       | 41,400     | fory    |
+| MediaContentList  | 序列化   | 333,720   | 56,826       | 90,189     | fory    |
+| MediaContentList  | 反序列化 | 160,547   | 46,378       | 95,609     | fory    |
+
+### 序列化数据大小(字节)
+
+| 数据类型          | fory | protobuf | pickle |
+| ----------------- | ---- | -------- | ------ |
+| NumericStruct     | 78   | 93       | 169    |
+| Sample            | 445  | 375      | 1176   |
+| MediaContent      | 366  | 301      | 624    |
+| NumericStructList | 219  | 475      | 582    |
+| SampleList        | 1914 | 1890     | 3546   |
+| MediaContentList  | 1614 | 1520     | 1415   |
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/python/throughput.png b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/python/throughput.png
new file mode 100644
index 0000000000..7bd99a82e6
Binary files /dev/null and b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/python/throughput.png differ
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/rust/README.md b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/rust/README.md
new file mode 100644
index 0000000000..76ff3c4a57
--- /dev/null
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/rust/README.md
@@ -0,0 +1,77 @@
+# Rust 基准性能报告
+
+_生成于 2026-05-08 17:55:12_
+
+## 如何生成本报告
+
+```bash
+cd benchmarks/rust
+cargo bench --bench serialization_bench 2>&1 | tee results/cargo_bench.log
+cargo run --release --bin fory_profiler -- --print-all-serialized-sizes | tee results/serialized_sizes.txt
+python benchmark_report.py --log-file results/cargo_bench.log --size-file results/serialized_sizes.txt --output-dir results
+```
+
+## 基准图表
+
+图表展示吞吐量(ops/sec);数值越高越好。
+
+![Throughput](throughput.png)
+
+## 硬件与操作系统信息
+
+| 键                  | 值               |
+| -------------------- | ------------------- |
+| 操作系统                   | Darwin 24.6.0       |
+| 机器架构              | arm64               |
+| 处理器            | arm                 |
+| CPU 核心数(物理) | 12                  |
+| CPU 核心数(逻辑)  | 12                  |
+| 总内存(GB)       | 48.0                |
+| 基准日期       | 2026-05-08T16:47:49 |
+
+## 基准结果
+
+### 延迟结果(纳秒)
+
+| 数据类型          | 操作   | fory (ns) | protobuf (ns) | msgpack (ns) | 最快 |
+| ----------------- | ---- | --------- | ------------- | ------------ | ------- |
+| NumericStruct     | 序列化   | 38.1      | 94.6          | 239.5        | fory    |
+| NumericStruct     | 反序列化 | 32.6      | 62.4          | 107.3        | fory    |
+| Sample            | 序列化   | 95.3      | 591.8         | 601.1        | fory    |
+| Sample            | 反序列化 | 410.1     | 925.8         | 805.9        | fory    |
+| MediaContent      | 序列化   | 120.0     | 553.9         | 446.9        | fory    |
+| MediaContent      | 反序列化 | 566.7     | 713.0         | 902.6        | fory    |
+| NumericStructList | 序列化   | 121.5     | 512.0         | 618.0        | fory    |
+| NumericStructList | 反序列化 | 137.9     | 404.9         | 615.9        | fory    |
+| SampleList        | 序列化   | 267.7     | 2920.2        | 2011.1       | fory    |
+| SampleList        | 反序列化 | 1831.9    | 4636.4        | 4141.4       | fory    |
+| MediaContentList  | 序列化   | 367.1     | 2835.6        | 1441.7       | fory    |
+| MediaContentList  | 反序列化 | 2703.8    | 3622.3        | 4832.3       | fory    |
+
+### 吞吐结果(ops/sec)
+
+| 数据类型          | 操作   | fory TPS   | protobuf TPS | msgpack TPS | 最快 |
+| ----------------- | ---- | ---------- | ------------ | ---- | ------- |
+| NumericStruct     | 序列化   | 26,237,767 | 10,572,613   | 4,174,668   | fory    |
+| NumericStruct     | 反序列化 | 30,720,079 | 16,035,920   | 9,322,271   | fory    |
+| Sample            | 序列化   | 10,494,611 | 1,689,874    | 1,663,700   | fory    |
+| Sample            | 反序列化 | 2,438,311  | 1,080,170    | 1,240,895   | fory    |
+| MediaContent      | 序列化   | 8,331,945  | 1,805,445    | 2,237,687   | fory    |
+| MediaContent      | 反序列化 | 1,764,633  | 1,402,426    | 1,107,960   | fory    |
+| NumericStructList | 序列化   | 8,232,485  | 1,953,125    | 1,618,071   | fory    |
+| NumericStructList | 反序列化 | 7,250,580  | 2,469,563    | 1,623,535   | fory    |
+| SampleList        | 序列化   | 3,735,664  | 342,442      | 497,240     | fory    |
+| SampleList        | 反序列化 | 545,881    | 215,685      | 241,464     | fory    |
+| MediaContentList  | 序列化   | 2,724,350  | 352,659      | 693,626     | fory    |
+| MediaContentList  | 反序列化 | 369,850    | 276,068      | 206,941     | fory    |
+
+### 序列化数据大小(字节)
+
+| 数据类型          | fory | protobuf | msgpack |
+| ----------------- | ---- | -------- | ------- |
+| NumericStruct     | 78   | 93       | 87      |
+| Sample            | 445  | 375      | 590     |
+| MediaContent      | 362  | 301      | 500     |
+| NumericStructList | 255  | 475      | 449     |
+| SampleList        | 1978 | 1890     | 2964    |
+| MediaContentList  | 1531 | 1520     | 2521    |
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/rust/throughput.png b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/rust/throughput.png
new file mode 100644
index 0000000000..5640e734e4
Binary files /dev/null and b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/rust/throughput.png differ
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/swift/README.md b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/swift/README.md
new file mode 100644
index 0000000000..f0840cc9cb
--- /dev/null
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/swift/README.md
@@ -0,0 +1,46 @@
+# Fory Swift 基准
+
+该基准比较 Apache Fory、Protocol Buffers 和 JSON 在 Swift 中的序列化与反序列化吞吐量。
+
+## 吞吐图表
+
+![Throughput](throughput.png)
+
+## 硬件与运行时信息
+
+| 键                   | 值                         |
+| --------------------- | ----------------------------- |
+| 时间戳             | 2026-05-08T09:05:32Z          |
+| 操作系统                    | Version 15.7.2 (Build 24G325) |
+| 主机                  | macbook-pro.local             |
+| CPU 核心数(逻辑)   | 12                            |
+| 内存(GB)           | 48.00                         |
+| 每个用例持续时长(秒) | 3                             |
+
+## 吞吐结果
+
+| 数据类型          | 操作   |   Fory TPS | Protobuf TPS | JSON TPS | 最快      |
+| ----------------- | ---- | ---------: | -----------: | -------: | ------------ |
+| NumericStruct     | 序列化   |  9,435,623 |    6,175,939 |  408,960 | fory (1.53x) |
+| NumericStruct     | 反序列化 | 11,037,225 |    6,842,676 |  328,302 | fory (1.61x) |
+| Sample            | 序列化   |  3,596,835 |    1,257,100 |   79,781 | fory (2.86x) |
+| Sample            | 反序列化 |    982,255 |      733,588 |   41,274 | fory (1.34x) |
+| MediaContent      | 序列化   |  1,561,376 |      609,896 |   98,677 | fory (2.56x) |
+| MediaContent      | 反序列化 |    523,836 |      395,202 |   70,528 | fory (1.33x) |
+| NumericStructList | 序列化   |  2,910,846 |      918,363 |   82,965 | fory (3.17x) |
+| NumericStructList | 反序列化 |  2,436,636 |      701,656 |   69,353 | fory (3.47x) |
+| SampleList        | 序列化   |    694,557 |      202,040 |   16,679 | fory (3.44x) |
+| SampleList        | 反序列化 |    187,109 |      131,947 |    8,236 | fory (1.42x) |
+| MediaContentList  | 序列化   |    348,238 |       98,007 |   18,698 | fory (3.55x) |
+| MediaContentList  | 反序列化 |    104,990 |       74,422 |   16,298 | fory (1.41x) |
+
+## 序列化大小(字节)
+
+| 数据类型          | Fory | Protobuf | JSON |
+| ----------------- | ---: | -------: | ---: |
+| NumericStruct     |   78 |       93 |  159 |
+| Sample            |  445 |      375 |  696 |
+| MediaContent      |  362 |      301 |  608 |
+| NumericStructList |  255 |      475 |  816 |
+| SampleList        | 1978 |     1890 | 3501 |
+| MediaContentList  | 1531 |     1520 | 3067 |
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/swift/throughput.png b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/swift/throughput.png
new file mode 100644
index 0000000000..c8d7f75e35
Binary files /dev/null and b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/benchmarks/swift/throughput.png differ
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/community/DEVELOPMENT.md b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/community/DEVELOPMENT.md
new file mode 100644
index 0000000000..9e8a116d20
--- /dev/null
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/community/DEVELOPMENT.md
@@ -0,0 +1,146 @@
+---
+title: 开发指南
+sidebar_position: 10
+id: development
+license: |
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+---
+
+## 如何构建 Apache Fory™
+
+请从 https://github.com/apache/fory 检出源代码树。
+
+### 构建 Apache Fory™ Java
+
+```bash
+cd java
+mvn clean compile -DskipTests
+```
+
+#### 环境要求
+
+- java 1.8+
+- maven 3.6.3+
+
+### 构建 Apache Fory™ Python
+
+```bash
+cd python
+# 首先卸载 numpy,以便在安装 pyarrow 时自动安装正确的 numpy 版本。
+# 对于 Python 版本低于 3.13,目前不支持 numpy 2。
+pip uninstall -y numpy
+# 为 Python < 3.13 安装必要的环境。
+pip install pyarrow Cython wheel pytest
+# pip install pyarrow Cython wheel pytest
+pip install -v -e .
+```
+
+#### 环境要求
+
+- python 3.6+
+
+### 构建 Apache Fory™ C++
+
+构建 fory 行格式:
+
+```bash
+bazel build //cpp/fory/row:fory_row_format
+```
+
+构建 fory 行格式编码器:
+
+```bash
+bazel build //cpp/fory/encoder:fory_encoder
+```
+
+#### 环境要求
+
+- 支持 C++17 的编译器
+- bazel 6.3.2
+
+### 构建 Apache Fory™ GoLang
+
+```bash
+cd go/fory
+# 运行测试
+go test -v ./...
+# 运行跨语言测试
+go test -v fory_xlang_test.go
+```
+
+#### 环境要求
+
+- go 1.13+
+
+### 构建 Apache Fory™ Rust
+
+```bash
+cd rust
+# 构建
+cargo build
+# 运行测试
+cargo test
+# 运行特定测试
+cargo test -p tests  --test $test_file $test_method
+# 运行子目录下的特定测试
+cargo test --test mod $dir$::$test_file::$test_method
+# 调试子目录下的特定测试并获取回溯信息
+RUST_BACKTRACE=1 FORY_PANIC_ON_ERROR=1 cargo test --test mod $dir$::$test_file::$test_method
+# 检查 fory derive 宏生成的代码
+cargo expand --test mod $mod$::$file$ > expanded.rs
+```
+
+#### 环境要求
+
+```bash
+curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
+```
+
+### 构建 Apache Fory™ JavaScript
+
+```bash
+cd javascript
+npm install
+
+# 运行构建
+npm run build
+# 运行测试
+npm run test
+```
+
+#### 环境要求
+
+- node 14+
+- npm 8+
+
+### Lint Markdown 文档
+
+```bash
+# 全局安装 prettier
+npm install -g prettier
+
+# 格式化 markdown 文件
+prettier --write "**/*.md"
+```
+
+#### 环境要求
+
+- node 14+
+- npm 8+
+
+## 贡献
+
+更多信息,请参考[如何贡献到 Apache Fory™](https://github.com/apache/fory/blob/main/CONTRIBUTING.md)。
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/community/community.md b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/community/community.md
new file mode 100644
index 0000000000..25b8db4021
--- /dev/null
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/community/community.md
@@ -0,0 +1,85 @@
+---
+title: 社区
+sidebar_position: 0
+id: community
+---
+
+Apache Fory™ 是一个由社区驱动的开源项目,项目的蓬勃发展得益于社区贡献。
+我们邀请您根据自己的意愿尽可能地参与项目。以下是几种贡献方式:
+
+- 使用 Apache Fory™ 并分享使用体验和反馈问题;
+- 为项目提供最佳实践示例;
+- 报告错误并修复;
+- 贡献代码和参与文档建设。
+
+## 邮件列表
+
+| 邮件列表                | 描述               | 订阅                                             | 取消订阅                                               | 发送邮件                               | 活动                                                                       |
+| ----------------------- | ------------------ | ------------------------------------------------ | ------------------------------------------------------ | -------------------------------------- | -------------------------------------------------------------------------- |
+| dev@fory.apache.org     | 开发相关讨论       | [订阅](mailto:dev-subscribe@fory.apache.org)     | [取消订阅](mailto:dev-unsubscribe@fory.apache.org)     | [发送邮件](mailto:dev@fory.apache.org) | [邮件列表活动](https://lists.apache.org/list.html?dev@fory.apache.org)     |
+| commits@fory.apache.org | 仓库的所有 commits | [订阅](mailto:commits-subscribe@fory.apache.org) | [取消订阅](mailto:commits-unsubscribe@fory.apache.org) | 只读的邮件列表                         | [邮件列表活动](https://lists.apache.org/list.html?commits@fory.apache.org) |
+
+在尝试发送邮件之前,请确保订阅上述的邮件列表。
+
+**如果您没有订阅邮件列表,您的邮件将被拒绝或不会收到回复。**
+
+### 如何订阅邮件列表
+
+要发送邮件至邮件列表,请先通过以下方式订阅:
+
+1. 发送电子邮件至 listname-subscribe@fory.apache.org,并相应替换 `listname`;
+2. 回复您将收到的确认电子邮件,保持邮件主题行完整;
+3. 然后您将收到一封欢迎的电子邮件,订阅成功。
+
+在讨论电子邮件中的代码片段时,请确保:
+
+- 您不要链接到外部服务中的文件,因为此类文件可能会更改、被删除或链接可能会中断,从而使存档的电子邮件线程变得无用;
+- 您粘贴文本而不是文本屏幕截图;
+- 粘贴代码时保持格式,以保持代码可读;
+- 有足够的导入语句以避免产生代码歧义。
+
+## Slack
+
+您可以加入[Slack 上的 Apache Fory™ 社区](https://join.slack.com/t/fory-project/shared_invite/zt-1u8soj4qc-ieYEu7ciHOqA2mo47llS8A)。
+
+这里有一些社区规则:
+
+- 保持尊重和友善;
+- 所有重要的决定和结论都必须反映到邮件列表中。 “如果这没有在邮件列表中有相关的讨论记录,则代表它不生效” ;
+- [The Apache Way](https://theapacheway.com/on-list/);
+- 使用 Slack 线程来防止并行对话淹没当前的对话频道;
+- 请不要直接向邮件列表发送 Bug fix、Issue 分配和 Code Review 消息。这些内容应该被社区贡献者自愿处理并分配。
+
+## Issue 跟踪
+
+我们使用 GitHub Issues 来跟踪所有 Issues:
+
+- 代码相关问题:https://github.com/apache/fory/issues
+- 网站相关问题:https://github.com/apache/fory-site/issues
+
+您需要有一个 [GitHub 帐号](https://github.com/signup) 才能创建问题。
+如果您没有 [GitHub 帐号](https://github.com/signup),您可以发送电子邮件至 dev@fory.apache.org。
+
+### 报告 Bug
+
+您在报告 Bug 之前,应该:
+
+- 验证该 Bug 确实存在;
+- 搜索 [Issue List](https://github.com/apache/fory/issues) 以确保不存在相关 Bug。
+- 在 Issue List 中创建 [bug 报告](https://github.com/apache/fory/issues/new?assignees=&labels=bug&projects=&template=bug_report.yml)。
+- 如果可能的话,深入研究 Apache Fory™ 的源代码,并针对您报告的 Bug 提交补丁,这有助于快速修复 Bug。
+
+### 报告安全漏洞
+
+Apache Fory™ 是 [Apache 软件基金会](https://apache.org/) 的一个项目,遵循 [ASF 漏洞处理流程](https://apache.org/security/#vulnerability-handling)。
+
+要报告您发现的新的安全漏洞,请遵循 [ASF 漏洞报告流程](https://apache.org/security/#reporting-a-vulnerability),该流程解释了如何私下向社区维护者发送详细的漏洞信息。
+
+### New Feature
+
+欢迎您增强功能或新功能建议。提案越具体、越合理,您在 Apache Fory™ 社区的影响力就越大。它有可能在之后版本发布。
+
+### 项目源代码
+
+- Apache Fory™ Core 存储库:https://github.com/apache/fory
+- Apache Fory™ 网站存储库:https://github.com/apache/fory-site
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/community/how_to_join_community.md b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/community/how_to_join_community.md
new file mode 100644
index 0000000000..e24a366734
--- /dev/null
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/community/how_to_join_community.md
@@ -0,0 +1,108 @@
+---
+title: 如何加入 Apache Fory™ 社区
+sidebar_position: 0
+id: how_to_join_community
+---
+
+首先为你选择加入开源贡献行列的行为点赞 👍🏻。再者,十分感谢你选择参与到 Apache Fory™ 社区,为这个开源项目做出贡献。
+
+## Apache Fory™ 贡献指南
+
+Apache Fory™ 团队通常在 github 上进行开发和 issue 维护,请打开 [Github 网站](https://github.com/),点击右上角 `Sign up` 按钮,注册一个自己的账号,开启你开源之旅的第一步。
+
+在 [Apache Fory™ 仓库](https://github.com/apache/fory)中,我们有一份面向所有开源贡献者的[指南](https://fory.apache.org/zh-CN/docs/community/),介绍了有关版本管理、分支管理等内容,**请花几分钟时间阅读了解一下**。
+
+## 你的第一个 Pull Request
+
+### Step0:安装 Git
+
+Git 是一种版本控制系统,用于跟踪和管理软件开发项目中的代码变更。它帮助开发者记录和管理代码的历史记录,方便团队协作、代码版本控制、合并代码等操作。通过 Git,您可以追踪每个文件的每个版本,并轻松地在不同版本之间进行切换和比较。Git 还提供了分支管理功能,使得可以同时进行多个并行开发任务。
+
+- 访问 Git 官方网站:[https://git-scm.com](https://git-scm.com)
+- 下载最新版本的 Git 安装程序。
+- 运行下载的安装程序,按照安装向导的提示进行安装。
+- 安装完成后,你可以通过命令行使用 `git version` 命令确认安装成功。
+
+### Step1:Fork 项目
+
+- 首先需要 fork 这个项目,进入[Apache Fory™ 项目页面](https://github.com/apache/fory),点击右上角的 Fork 按钮
+- 你的 github 帐号中会出现 xxxx(你的 github 用户名)/fory 这个项目
+- 在本地电脑上使用以下命令: 得到一个 fory 文件夹
+
+```
+// ssh
+git clone git@github.com:xxxx(你的github用户名)/fory.git
+// https
+git clone https://github.com/xxxx(你的github用户名)/fory.git
+```
+
+### Step2:获取项目代码
+
+- 进入 fory 文件夹,添加 fory 的远程地址
+
+```
+git remote add upstream https://github.com/apache/fory.git
+```
+
+### Step3:创建分支
+
+- 好了,现在可以开始贡献我们的代码了。fory 默认分支为 main 分支。无论是功能开发、bug 修复、文档编写,都请新建立一个分支,再合并到 main 分支上。使用以下代码创建分支:
+
+```shell
+// 创建功能开发分支
+git checkout -b feat/xxxx
+
+// 创建问题修复开发分支
+git checkout -b fix/xxxx
+
+// 创建文档、demo分支
+git checkout -b docs/add-java-demo
+```
+
+假设我们创建了文档修改分支 `docs/add-java-demo`
+
+- 假设我们已经添加了一些代码,提交到代码库
+
+- git add .
+
+- git commit -a -m "docs: add java demo and related docs" 。
+
+### Step4:合并修改
+
+- 切换回自己的开发分支:
+
+```
+git checkout docs/add-java-demo
+```
+
+- 把更新代码提交到自己的分支中:
+
+```
+git push origin docs/add-java-demo
+```
+
+### Step5:提交 Pull Request
+
+你可以在你的 github 代码仓库页面点击 `Compare & pull request` 按钮。或通过 `contribute` 按钮创建。
+
+- 填写这是什么类型的修改
+- 填写关联的 issue
+- 若有复杂变更,请说明背景和解决方案
+
+相关信息填写完成后,点击 Create pull request 提交。
+
+## **轻松步入 Apache Fory™ 开源贡献之旅**
+
+"**good first issue**" 是一个在开源社区常见的标签,这个标签的目的是帮助新贡献者找到适合入门的问题。
+
+Apache Fory™ 的入门问题,你可以通过 [issue 列表](https://github.com/apache/fory/issues)查看。
+
+如果你当前**有时间和意愿**参与到社区贡献,可以在 issue 里看一看 **good first issue**,选择一个感兴趣、适合自己的认领。
+
+## 拥抱 Apache Fory™ 社区
+
+在你为 Apache Fory™ 贡献代码之余,我们鼓励你参与其他让社区更加繁荣的事情,比如:
+
+- 为项目的发展、功能规划 等提建议。
+- 创作文章、视频,开办讲座来宣传 Apache Fory™
+- 撰写推广计划,同团队一同执行。
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/community/how_to_release.md b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/community/how_to_release.md
new file mode 100644
index 0000000000..0f0f2cd6b7
--- /dev/null
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/community/how_to_release.md
@@ -0,0 +1,449 @@
+---
+title: 如何发布
+sidebar_position: 0
+id: how_to_release
+---
+
+本文主要介绍如何发布新版本的 Apache Fory™。
+
+## 介绍
+
+源代码发布是 Apache 最重视以及最重要的部分。
+
+请注意许可证和发布的软件签名问题。发布软件是一件严肃的事情,并会产生相应的法律后果。
+
+## release manager 第一次发布
+
+### 环境要求
+
+此发布过程在 Ubuntu 系统中运行,需要以下几个环境依赖:
+
+- OpenJDK 25+
+- Apache Maven 3.6.3+
+- Python 3.8+
+- GnuPG 2.x
+- Git
+- SVN(Apache 基金会使用 svn 来托管项目发布)
+- 可选的包发布和验证工具:Node.js LTS 和 npm、Rust via rustup、Go 1.24+、Dart、.NET SDK 8.0+、sbt
+- **设置环境变量**:如果您在不同的目录下配置了 gpg 密钥,请执行 `export GNUPGHOME=$(xxx)` 导出环境变量。
+
+### 准备 GPG 密钥
+
+如果您是第一次作为软件发布者,您需要准备一个 GPG 密钥。
+
+您可以参考这里的[快速开始](https://infra.apache.org/openpgp.html)获取一个 GPG 密钥或者获取更多相关信息。
+
+#### 安装 GPG
+
+```bash
+sudo apt install gnupg2
+```
+
+#### 生成 GPG 密钥
+
+请使用您的 Apache 名字和电子邮件地址生成 GPG 密钥:
+
+```bash
+$ gpg --full-gen-key
+gpg (GnuPG) 2.2.20; Copyright (C) 2020 Free Software Foundation, Inc.
+This is free software: you are free to change and redistribute it.
+There is NO WARRANTY, to the extent permitted by law.
+
+Please select what kind of key you want:
+   (1) RSA and RSA (default)
+   (2) DSA and Elgamal
+   (3) DSA (sign only)
+   (4) RSA (sign only)
+  (14) Existing key from card
+Your selection? 1 # input 1
+RSA keys may be between 1024 and 4096 bits long.
+What keysize do you want? (2048) 4096 # input 4096
+Requested keysize is 4096 bits
+Please specify how long the key should be valid.
+         0 = key does not expire
+      <n>  = key expires in n days
+      <n>w = key expires in n weeks
+      <n>m = key expires in n months
+      <n>y = key expires in n years
+Key is valid for? (0) 0 # input 0
+Key does not expire at all
+Is this correct? (y/N) y # input y
+
+GnuPG needs to construct a user ID to identify your key.
+
+Real name: Chaokun Yang                   # input your name
+Email address: chaokunyang@apache.org     # input your email
+Comment: CODE SIGNING KEY                 # input some annotations, optional
+You selected this USER-ID:
+    "Chaokun <ch...@apache.org>"
+
+Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O # input O
+We need to generate a lot of random bytes. It is a good idea to perform
+some other action (type on the keyboard, move the mouse, utilize the
+disks) during the prime generation; this gives the random number
+generator a better chance to gain enough entropy.
+We need to generate a lot of random bytes. It is a good idea to perform
+some other action (type on the keyboard, move the mouse, utilize the
+disks) during the prime generation; this gives the random number
+generator a better chance to gain enough entropy.
+
+# Input the security key
+┌──────────────────────────────────────────────────────┐
+│ Please enter this passphrase                         │
+│                                                      │
+│ Passphrase: _______________________________          │
+│                                                      │
+│       <OK>                              <Cancel>     │
+└──────────────────────────────────────────────────────┘
+# key generation will be done after your inputting the key with the following output
+gpg: key E49B00F626B marked as ultimately trusted
+gpg: revocation certificate stored as '/Users/chaokunyang/.gnupg/openpgp-revocs.d/1E2CDAE4C08AD7D694D1CB139D7BE8E45E580BA4.rev'
+public and secret key created and signed.
+
+pub   rsa4096 2022-07-12 [SC]
+      1E2CDAE4C08AD7D694D1CB139D7BE8E45E580BA4
+uid           [ultimate] Chaokun <ch...@apache.org>
+sub   rsa4096 2022-07-12 [E]
+```
+
+#### 上传公钥至 GPG 密钥服务器
+
+首先,列出您所创建的 GPG 密钥:
+
+```bash
+gpg --list-keys
+```
+
+执行相关命令之后,您将看到如下输出:
+
+```bash
+--------------------------------------------------
+pub   rsa4096 2024-03-27 [SC]
+      1E2CDAE4C08AD7D694D1CB139D7BE8E45E580BA4
+uid           [ultimate] chaokunyang (CODE SIGNING KEY) <ch...@apache.org>
+sub   rsa4096 2024-03-27 [E]
+```
+
+然后,将您的密钥 ID 发送到密钥服务器:
+
+```bash
+gpg --keyserver keys.openpgp.org --send-key <key-id> # e.g., 1E2CDAE4C08AD7D694D1CB139D7BE8E45E580BA4
+```
+
+其中,`keys.openpgp.org` 是一个随机选择的密钥服务器,可以使用 keyserver.ubuntu.com 或任何其他功能完备的密钥服务器。
+
+#### 检查密钥是否创建成功
+
+上传大约需要一分钟;之后,您可以通过电子邮件在相应的密钥服务器上检查。
+
+将密钥上传到密钥服务器的主要目的是为了加入一个可信的[信任网络](https://infra.apache.org/release-signing.html#web-of-trust)。
+
+#### 将 GPG 公钥添加到项目 KEYS 文件中
+
+发布分支的 svn 仓库是:https://dist.apache.org/repos/dist/release/fory
+
+请在发布分支的 KEYS 中添加公钥:
+
+```bash
+svn co https://dist.apache.org/repos/dist/release/fory fory-dist
+# As this step will copy all the versions, it will take some time. If the network is broken, please use svn cleanup to delete the lock before re-execute it.
+cd fory-dist
+(gpg --list-sigs YOUR_NAME@apache.org && gpg --export --armor YOUR_NAME@apache.org) >> KEYS # Append your key to the KEYS file
+svn add .   # It is not needed if the KEYS document exists before.
+svn ci -m "add gpg key for YOUR_NAME" # Later on, if you are asked to enter a username and password, just use your apache username and password.
+```
+
+#### 将 GPG 公钥上传到您的 GitHub 帐户
+
+- 输入 `https://github.com/settings/keys` 以添加您的 GPG 密钥。
+- 如果添加后发现“未验证”字样,请将 GPG 密钥中使用的电子邮件地址绑定到您的 GitHub 帐户(https://github.com/settings/emails)。
+
+### 延伸阅读
+
+建议您在发布之前阅读以下文档,了解有关 Apache 基金会发布软件的更多详细信息,但这不是必须的:
+
+- 发布政策:https://www.apache.org/legal/release-policy.html
+- TLP 版本:https://infra.apache.org/release-distribution
+- 发布标志:https://infra.apache.org/release-signing.html
+- 发布发布:https://infra.apache.org/release-publishing.html
+- 发布下载页面:https://infra.apache.org/release-download-pages.html
+- 发布 maven artifacts:https://infra.apache.org/publishing-maven-artifacts.html
+
+## 开始有关发布的讨论
+
+通过发送电子邮件至以下地址发起有关下一个版本的讨论:dev@fory.apache.org:
+
+标题:
+
+```
+[DISCUSS] Release Apache Fory ${release_version}
+```
+
+内容:
+
+```
+Hello, Apache Fory Community,
+
+This is a call for a discussion to release Apache Fory version ${release_version}.
+
+The planned change list for this release:
+
+https://github.com/apache/fory/compare/v${previous_release_version}...main
+
+Please leave your comments here about this release plan. We will bump the version in repo and start the release process after the discussion.
+
+Thanks,
+
+${name}
+```
+
+## 准备发布
+
+如果讨论结果中没有出现反对声音,您需要做一些发布版本的准备工作。
+
+### GitHub 分支和标签
+
+- 创建一个名为 `releases-${release_version}` 的分支。也可以运行 `python ci/release.py prepare -v ${release_version}`,让脚本创建分支、更新所有版本并创建准备提交。
+- 如果没有使用 `prepare`,通过执行命令 `python ci/release.py bump_version -l all -version ${release_version}` 将版本升级到 `${release_version}`
+- 执行 git commit 并将分支推送到 `git@github.com:apache/fory.git`
+- 通过 `git tag v${release_version}-${rc_version}` 创建一个 release candidate 标签,然后将其推送到 `git@github.com:apache/fory.git`
+- 如果本次发布包含 `go/fory` 这个 Go 子模块,请在投票通过后额外创建并推送 Go 子模块标签。例如,对于最终版 `${release_version}`,执行:
+
+```bash
+git tag go/fory/v${release_version}
+git push apache go/fory/v${release_version}
+```
+
+### 构建 artifacts 并上传到 SVN dist/dev 仓库
+
+首先,您需要通过 `python ci/release.py build -v ${release_version}` 构建预发布 artifacts。
+
+然后您需要把它上传到 svn dist repo。dev 分支的 dist 仓库地址是:https://dist.apache.org/repos/dist/dev/fory
+
+```bash
+# As this step will copy all the versions, it will take some time. If the network is broken, please use svn cleanup to delete the lock before re-execute it.
+svn co https://dist.apache.org/repos/dist/dev/fory fory-dist-dev
+```
+
+然后,上传项目:
+
+```bash
+cd fory-dist-dev
+# create a directory named by version
+mkdir ${release_version}-${rc_version}
+# copy source code and signature package to the versioned directory
+cp ${repo_dir}/dist/* ${release_version}-${rc_version}
+# check svn status
+svn status
+# add to svn
+svn add ${release_version}-${rc_version}
+# check svn status
+svn status
+# commit to SVN remote server
+svn commit -m "Prepare for fory ${release_version}-${rc_version}"
+```
+
+访问 https://dist.apache.org/repos/dist/dev/fory/ 以检查 artifacts 是否正确上传。
+
+### 如果出现问题该怎么办
+
+如果某些文件是意外出现或者发生某些错误,则需要删除相关内容并执行 `svn delete`,然后重复上述上传过程。
+
+## 投票
+
+新版本发布需要 Apache Fory 社区的投票。
+
+- release_version:Fory 的版本,如 1.0.0。
+- release_candidate_version:投票的版本,如 1.0.0-rc1。
+- maven_artifact_number:Maven 暂存 artifacts 的数量。如 1001. 具体来说,可以通过搜索 “fory” 来找到 maven_artifact_number https://repository.apache.org/#stagingRepositories.
+
+### Fory 社区投票
+
+发送电子邮件至 Fory Community:dev@fory.apache.org:
+
+标题:
+
+```
+[VOTE] Release Apache Fory v${release_version}-${rc_version}
+```
+
+内容:
+
+```
+Hello, Apache Fory Community:
+
+This is a call for vote to release Apache Fory
+v${release_version}-${rc_version}.
+
+Apache Fory is a blazingly fast multi-language serialization framework
+for idiomatic domain objects, schema IDL, and cross-language data
+exchange.
+
+The change lists about this release:
+
+https://github.com/apache/fory/compare/v${previous_release_version}...v${release_version}-${rc_version}
+
+The release candidates:
+https://dist.apache.org/repos/dist/dev/fory/${release_version}-${rc_version}/
+
+The maven staging for this release:
+https://repository.apache.org/content/repositories/orgapachefory-${maven_artifact_number}
+
+Git tag for the release:
+https://github.com/apache/fory/releases/tag/v${release_version}-${rc_version}
+
+如果本次发布还包含 Go 模块,请同时附上 Go 子模块标签:
+https://github.com/apache/fory/releases/tag/go/fory/v${release_version}
+
+Git commit for the release:
+https://github.com/apache/fory/commit/${release_commit}
+
+The artifacts signed with PGP key [${gpg_key_id}], corresponding to
+[${apache_email}], that can be found in keys file:
+https://downloads.apache.org/fory/KEYS
+
+The vote will be open for at least 72 hours until the necessary number of votes are reached.
+
+Please vote accordingly:
+
+[ ] +1 approve
+[ ] +0 no opinion
+[ ] -1 disapprove with the reason
+
+To learn more about Fory, please see https://fory.apache.org/
+
+*Valid check is a requirement for a vote. *Checklist for reference:
+
+[ ] Download Fory is valid.
+[ ] Checksums and PGP signatures are valid.
+[ ] Source code distributions have correct names matching the current release.
+[ ] LICENSE and NOTICE files are correct.
+[ ] All files have license headers if necessary.
+[ ] No compiled archives bundled in source archive.
+[ ] Can compile from source.
+
+How to Build and Test, please refer to: https://github.com/apache/fory/blob/main/docs/DEVELOPMENT.md
+
+Thanks,
+Chaokun Yang
+```
+
+在至少获得 3 个来自 Apache Fory PMC member 的 binding +1,并且没有收到否决票之后,发布投票结果:
+
+标题:
+
+```
+[RESULT][VOTE] Release Apache Fory v${release_version}-${rc_version}
+```
+
+内容:
+
+```
+Hello, Apache Fory Community,
+
+The vote to release Apache Fory v${release_version}-${rc_version} has passed.
+
+The vote PASSED with 3 binding +1 votes and 0 -1 votes:
+
+Binding votes:
+
+- xxx
+- yyy
+- zzz
+
+Vote thread: ${vote_thread_url}
+
+Thanks,
+
+${name}
+```
+
+### 如果投票失败怎么办
+
+如果投票失败,请单击“删除”以删除暂存的 Maven artifacts。
+
+解决提出的问题,然后再次提出 `rc_version` 的新投票。
+
+## 官方发布
+
+### 将 artifacts 发布到 SVN 发布目录
+
+- release_version:Fory 的发布版本,如 1.0.0
+- release_candidate_version:投票版本,如 1.0.0-rc1
+
+```bash
+svn mv https://dist.apache.org/repos/dist/dev/fory/${release_version}-${rc_version} https://dist.apache.org/repos/dist/release/fory/${release_version} -m "Release fory ${release_version}"
+```
+
+### 更改 Fory 网站下载链接
+
+提交 PR 到 https://github.com/apache/fory-site 仓库更新 Fory 版本,[下载页面](https://fory.apache.org/download)
+
+同时更新 release blog、download page、checksum/signature 示例、release notes 链接、current docs、zh-CN 翻译、`${release_version}` 的 versioned docs snapshot、`versions.json` 以及 `docusaurus.config.ts` 默认 docs 版本。
+
+### GitHub 正式发布
+
+投票通过后,从通过投票的 commit 创建并推送最终 tag `v${release_version}`。该 tag 会触发 Python、compiler、JavaScript、Rust、Dart 和 C# 的最终包发布 workflows。发送公告前,请监控所有 workflows 直到完成。
+
+### 发布 Maven artifacts
+
+- maven_artifact_number:Maven 暂存 artifacts 的数量。如 1001。
+- 打开https://repository.apache.org/#stagingRepositories.
+- 找到 artifacts `orgapachefory-${maven_artifact_number}`,点击“发布”。
+
+### 发送公告
+
+将发布公告发送给 dev@fory.apache.org 并且抄送给 announce@apache.org。
+
+标题:
+
+```
+[ANNOUNCE] Apache Fory ${release_version} released
+```
+
+内容:
+
+```
+Hi all,
+
+The Apache Fory community is pleased to announce
+that Apache Fory ${release_version} is now available.
+
+Apache Fory is a blazingly fast multi-language serialization framework
+for idiomatic domain objects, schema IDL, and cross-language data
+exchange.
+
+This release includes ${pr_count} PRs from ${contributor_count} contributors.
+
+Highlights in ${release_version} include:
+
+- ...
+
+Release blog, with details and examples:
+https://fory.apache.org/blog/fory_${release_version_with_underscores}_release
+
+The release notes are available here:
+https://github.com/apache/fory/releases/tag/v${release_version}
+
+For the complete list of changes:
+https://github.com/apache/fory/compare/v${previous_release_version}...v${release_version}
+
+Apache Fory website: https://fory.apache.org/
+
+Download Links: https://fory.apache.org/download
+
+Fory Resources:
+- Fory github repo: https://github.com/apache/fory
+- Issue: https://github.com/apache/fory/issues
+- Mailing list: dev@fory.apache.org
+
+We are looking to grow our community and welcome new contributors. If
+you are interested in contributing to Fory, please contact us on the
+mailing list or on GitHub. We will be happy to help you get started.
+
+------------------
+Best Regards,
+${your_name}
+```
+
+至此,整个发布流程结束。
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/community/how_to_verify.md b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/community/how_to_verify.md
new file mode 100644
index 0000000000..150fb90cf6
--- /dev/null
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/community/how_to_verify.md
@@ -0,0 +1,119 @@
+---
+title: 如何验证 Apache Fory™
+sidebar_position: 0
+id: how_to_verify
+---
+
+## 下载 Apache Fory™
+
+```bash
+# If there is svn locally, you can clone to the local
+svn co https://dist.apache.org/repos/dist/dev/incubator/fory/${release_version}-${rc_version}/
+# You can download the material file directly
+wget https://dist.apache.org/repos/dist/dev/incubator/fory/${release_version}-${rc_version}/xxx.xxx
+```
+
+## 验证 checksums 和 signatures
+
+首先,您需要安装 gpg:
+
+```bash
+apt-get install gnupg
+# or
+yum install gnupg
+# or
+brew install gnupg
+```
+
+之后,导入 Apache Fory release manager 的公钥:
+
+```bash
+curl https://downloads.apache.org/incubator/fory/KEYS > KEYS # Download KEYS
+gpg --import KEYS # Import KEYS to local
+# Then, trust the public key:
+gpg --edit-key <KEY-used-in-this-version> # Edit the key(mentioned in vote email)
+# It will enter the interactive mode, use the following command to trust the key:
+gpg (GnuPG) 2.0.22; Copyright (C) 2013 Free Software Foundation, Inc.
+This is free software: you are free to change and redistribute it.
+There is NO WARRANTY, to the extent permitted by law.
+
+
+pub  4096R/5E580BA4  created: 2024-03-27  expires: never       usage: SC
+                     trust: unknown       validity: unknown
+sub  4096R/A31EF728  created: 2024-03-27  expires: never       usage: E
+[ unknown] (1). chaokunyang (CODE SIGNING KEY) <ch...@apache.org>
+
+gpg> trust
+pub  4096R/5E580BA4  created: 2024-03-27  expires: never       usage: SC
+                     trust: unknown       validity: unknown
+sub  4096R/A31EF728  created: 2024-03-27  expires: never       usage: E
+[ unknown] (1). chaokunyang (CODE SIGNING KEY) <ch...@apache.org>
+
+Please decide how far you trust this user to correctly verify other users' keys
+(by looking at passports, checking fingerprints from different sources, etc.)
+
+  1 = I don't know or won't say
+  2 = I do NOT trust
+  3 = I trust marginally
+  4 = I trust fully
+  5 = I trust ultimately
+  m = back to the main menu
+
+Your decision? 5
+Do you really want to set this key to ultimate trust? (y/N) y
+
+pub  4096R/5E580BA4  created: 2024-03-27  expires: never       usage: SC
+                     trust: ultimate      validity: unknown
+sub  4096R/A31EF728  created: 2024-03-27  expires: never       usage: E
+[ unknown] (1). chaokunyang (CODE SIGNING KEY) <ch...@apache.org>
+Please note that the shown key validity is not necessarily correct
+unless you restart the program.
+```
+
+接下来验证签名:
+
+```bash
+for i in *.tar.gz; do echo $i; gpg --verify $i.asc $i; done
+```
+
+如果出现如下内容,则表示签名正确:
+
+```bash
+apache-fory-0.5.0-src.tar.gz
+gpg: Signature made Wed 17 Apr 2024 11:49:45 PM CST using RSA key ID 5E580BA4
+gpg: checking the trustdb
+gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
+gpg: depth: 0  valid:   1  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 1u
+gpg: Good signature from "chaokunyang (CODE SIGNING KEY) <ch...@apache.org>"
+```
+
+然后验证 checksum:
+
+```bash
+for i in *.tar.gz; do echo $i; sha512sum --check  $i.sha512; done
+```
+
+它应该输出如下内容:
+
+```bash
+apache-fory-0.12.0-src.tar.gz
+apache-fory-0.12.0-src.tar.gz: OK
+```
+
+## 检查源码包中的文件
+
+解压缩 `apache-fory-${release_version}-${rc_version}-src.tar.gz` 并检查以下内容:
+
+- 此存储库 LICENSE 和 NOTICE 文件是正确的;
+- 如有必要,所有文件都有 ASF 许可证标头;
+- 项目构建通过。
+
+## 检查 fory-java 的 Maven artifacts
+
+下载 Apache Fory™:https://repository.apache.org/content/repositories/orgapachefory-${maven_artifact_number}/.
+
+您可以检查以下内容:
+
+- JAR 的 Checksum 与项目绑定的 checksum 文件一致。
+- JAR 的 signature 与项目绑定的 signature 文件一致。
+- JAR 在本地是可重复的。这意味着您可以在计算机上构建 JAR,并验证 checksum 和与项目绑定的相同。
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/compiler/_category_.json b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/compiler/_category_.json
new file mode 100644
index 0000000000..abf19e9fcb
--- /dev/null
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/compiler/_category_.json
@@ -0,0 +1,6 @@
+{
+  "position": 3,
+  "label": "Schema IDL 与编译器",
+  "collapsible": true,
+  "collapsed": true
+}
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/current/compiler/compiler-guide.md b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/compiler/compiler-guide.md
similarity index 99%
copy from i18n/zh-CN/docusaurus-plugin-content-docs/current/compiler/compiler-guide.md
copy to i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/compiler/compiler-guide.md
index a9e14644e7..16a2d40b27 100644
--- a/i18n/zh-CN/docusaurus-plugin-content-docs/current/compiler/compiler-guide.md
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/compiler/compiler-guide.md
@@ -667,7 +667,7 @@ cc_library(
 
 ```yaml
 dependencies:
-  fory: ^1.1.0
+  fory: ^1.2.0
 
 dev_dependencies:
   build_runner: ^2.4.0
@@ -859,5 +859,5 @@ fory = "x.y.z"
 
 ```yaml
 dependencies:
-  fory: ^1.1.0
+  fory: ^1.2.0
 ```
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/compiler/flatbuffers-idl.md b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/compiler/flatbuffers-idl.md
new file mode 100644
index 0000000000..f250081313
--- /dev/null
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/compiler/flatbuffers-idl.md
@@ -0,0 +1,185 @@
+---
+title: FlatBuffers IDL 支持
+sidebar_position: 7
+id: flatbuffers_idl
+license: |
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+---
+
+本页说明 Apache Fory 如何读取 FlatBuffers schema(`.fbs`)并将其转换为 Fory IR 以生成代码。
+
+## 本页内容
+
+- 何时应在 Fory 中使用 FlatBuffers 输入
+- FlatBuffers 到 Fory 的精确映射行为
+- `.fbs` 中支持的 Fory 扩展属性
+- 迁移注意事项与生成代码差异
+
+## 为什么使用 Apache Fory
+
+- **生成代码更符合语言习惯**:Fory 会生成各语言常用风格的类/结构体,可直接作为领域对象使用。
+- **Java 性能更优**:在 Fory 的 Java 对象序列化基准中,Fory 通常快于 FlatBuffers。
+- **其他语言性能相近**:序列化性能通常处于同一量级。
+- **实际反序列化链路更高效**:FlatBuffers 默认并不做原生对象反序列化,因此看起来更快;但当业务需要原生对象时,还需额外转换,这一步往往成为主要开销。在这种场景下,Fory 端到端反序列化通常更快。
+- **API 更简单**:Fory 直接操作原生对象,无需反向构建 table 或手动管理 offset。
+- **对象图建模能力更强**:Fory 原生支持共享引用和循环引用。
+
+## 快速决策指南
+
+| 场景                                            | 建议路径                |
+| ----------------------------------------------- | ----------------------- |
+| 已有 `.fbs` schema,想接入 Fory 运行时/代码生成 | 使用 FlatBuffers 输入   |
+| 新建 schema,希望完整使用 Fory 语法能力         | 使用原生 Fory IDL       |
+| 运行时必须保持 FlatBuffers 线格式兼容           | 继续使用 FlatBuffers 栈 |
+| 需要 Fory 对象图语义(`ref`、弱引用等)         | 使用 Fory               |
+
+## FlatBuffers 到 Fory 的映射
+
+### Schema 级规则
+
+- `namespace` 映射为 Fory package 命名空间。
+- `include` 映射为 Fory import。
+- `table` 会被翻译为 `evolving=true`。
+- `struct` 会被翻译为 `evolving=false`。
+- `root_type` 会被解析,但 Fory 运行时/代码生成不会使用。
+- `file_identifier` 与 `file_extension` 会被解析,但 Fory 代码生成不会使用。
+
+### 字段编号
+
+FlatBuffers 字段没有显式 field ID。Fory 会按源码声明顺序分配字段号,从 `1` 开始。
+
+### 标量类型映射
+
+| FlatBuffers | Fory Type |
+| ----------- | --------- |
+| `byte`      | `int8`    |
+| `ubyte`     | `uint8`   |
+| `short`     | `int16`   |
+| `ushort`    | `uint16`  |
+| `int`       | `int32`   |
+| `uint`      | `uint32`  |
+| `long`      | `int64`   |
+| `ulong`     | `uint64`  |
+| `float`     | `float32` |
+| `double`    | `float64` |
+| `bool`      | `bool`    |
+| `string`    | `string`  |
+
+向量(`[T]`)映射为 Fory 列表类型。
+
+### 联合类型
+
+FlatBuffers union 映射为 Fory union。
+
+- case ID 按声明顺序分配,从 `1` 开始。
+- case 名称由类型名转换为 snake_case 字段名。
+
+**FlatBuffers**
+
+```fbs
+union Payload {
+  Note,
+  Metric
+}
+
+table Container {
+  payload: Payload;
+}
+```
+
+**转换后的 Fory 结构**
+
+```protobuf
+union Payload {
+    Note note = 1;
+    Metric metric = 2;
+}
+
+message Container {
+    Payload payload = 1;
+}
+```
+
+### 默认值与元数据
+
+- FlatBuffers 默认值会被解析,但不会作为 Fory 运行时默认值生效。
+- 非 Fory 的 metadata 属性会作为通用 option 保留在 IR 中,供下游工具按需消费。
+
+## FlatBuffers 中的 Fory 扩展属性
+
+FlatBuffers metadata 属性写法为 `key:value`。对于 Fory 扩展选项,在 `.fbs` 中使用 `fory_`(或 `fory.`)前缀;解析时会去掉该前缀。
+
+### 支持的字段属性
+
+| FlatBuffers Attribute           | 在 Fory 中的效果                                                         |
+| ------------------------------- | ------------------------------------------------------------------------ |
+| `fory_ref:true`                 | 为字段启用引用跟踪                                                       |
+| `fory_nullable:true`            | 将字段标记为 optional/nullable                                           |
+| `fory_weak_ref:true`            | 启用弱引用语义,并隐含开启 `ref`                                         |
+| `fory_thread_safe_pointer:true` | 对 ref 字段使用 Rust `Arc`/`ArcWeak`,而不是默认的 `Rc`/`RcWeak`         |
+
+语义说明:
+
+- `fory_weak_ref:true` 隐含 `ref`。
+- `fory_thread_safe_pointer` 默认为 `false`,仅在字段启用 ref 跟踪时生效,且不会改变编码格式。
+- 在 Rust 代码生成中,`fory_weak_ref:true` 默认使用 `RcWeak`;只有同时设置
+  `fory_thread_safe_pointer:true` 时才会切换为 `ArcWeak`。
+- 对列表字段,`fory_ref:true` 作用于列表元素。
+
+示例:
+
+```fbs
+table Node {
+  parent: Node (fory_weak_ref: true);
+  children: [Node] (fory_ref: true);
+  cached: Node (fory_ref: true, fory_thread_safe_pointer: true);
+}
+```
+
+## 生成代码差异
+
+即使用 `.fbs` 作为 Fory 输入,生成的依然是标准 Fory 代码,而不是 FlatBuffers 的 `ByteBuffer` 风格 API。
+
+- Java:带 Fory 元数据的 POJO/record
+- Python:dataclass 与注册辅助代码
+- Go/Rust/C++:原生结构体与 Fory 元数据
+
+最终序列化格式是 Fory 二进制协议,而不是 FlatBuffers 线格式。
+
+## 用法
+
+直接编译 FlatBuffers schema:
+
+```bash
+foryc schema.fbs --lang java,python --output ./generated
+```
+
+输出转换后的 Fory schema 语法以便调试:
+
+```bash
+foryc schema.fbs --emit-fdl --emit-fdl-path ./translated
+```
+
+## 迁移注意事项
+
+1. 保持现有 `namespace` 稳定,以保证类型注册稳定。
+2. 检查依赖 FlatBuffers 字面量默认值的字段,并在业务代码中补充显式默认值。
+3. 在需要对象图语义的字段上添加 `fory_ref`/`fory_weak_ref`。
+4. 替换现有序列化路径前,先用 roundtrip 测试验证生成模型行为。
+
+## 总结
+
+FlatBuffers 输入模式可让你复用现有 `.fbs` schema,同时迁移到 Fory 运行时与代码生成模型。它适合渐进式迁移场景:既保留既有 schema 投入,又能采用 Fory 原生对象 API。
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/compiler/generated-code.md b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/compiler/generated-code.md
new file mode 100644
index 0000000000..024eb203ca
--- /dev/null
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/compiler/generated-code.md
@@ -0,0 +1,1037 @@
+---
+title: 生成代码
+sidebar_position: 5
+id: generated_code
+license: |
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+---
+
+本文档说明各目标语言的代码生成结果与结构。
+
+Fory IDL 生成的类型遵循宿主语言习惯,可直接作为领域对象使用。生成代码同时包含 `to/from bytes` 辅助方法和类型注册辅助逻辑。
+
+## 参考 Schema
+
+下面示例基于两个真实 schema:
+
+1. `addressbook.fdl`(显式类型 ID)
+2. `auto_id.fdl`(未显式声明类型 ID)
+
+### `addressbook.fdl`(节选)
+
+```protobuf
+package addressbook;
+
+option go_package = "github.com/myorg/myrepo/gen/addressbook;addressbook";
+
+message Person [id=100] {
+    string name = 1;
+    int32 id = 2;
+
+    enum PhoneType [id=101] {
+        PHONE_TYPE_MOBILE = 0;
+        PHONE_TYPE_HOME = 1;
+        PHONE_TYPE_WORK = 2;
+    }
+
+    message PhoneNumber [id=102] {
+        string number = 1;
+        PhoneType phone_type = 2;
+    }
+
+    list<PhoneNumber> phones = 7;
+    Animal pet = 8;
+}
+
+message Dog [id=104] {
+    string name = 1;
+    int32 bark_volume = 2;
+}
+
+message Cat [id=105] {
+    string name = 1;
+    int32 lives = 2;
+}
+
+union Animal [id=106] {
+    Dog dog = 1;
+    Cat cat = 2;
+}
+
+message AddressBook [id=103] {
+    list<Person> people = 1;
+    map<string, Person> people_by_name = 2;
+}
+```
+
+### `auto_id.fdl`(节选)
+
+```protobuf
+package auto_id;
+
+enum Status {
+    UNKNOWN = 0;
+    OK = 1;
+}
+
+message Envelope {
+    string id = 1;
+
+    message Payload {
+        int32 value = 1;
+    }
+
+    union Detail {
+        Payload payload = 1;
+        string note = 2;
+    }
+
+    Payload payload = 2;
+    Detail detail = 3;
+    Status status = 4;
+}
+
+union Wrapper {
+    Envelope envelope = 1;
+    string raw = 2;
+}
+```
+
+## Java
+
+### 输出布局
+
+对于 `package addressbook`,Java 输出通常位于:
+
+- `<java_out>/addressbook/`
+- 类型文件:`AddressBook.java`、`Person.java`、`Dog.java`、`Cat.java`、`Animal.java`
+- 注册辅助类:`AddressbookForyRegistration.java`
+
+### 类型生成
+
+message 会生成带 `@ForyField`、默认构造器、getter/setter 以及字节辅助方法的 Java 类:
+
+```java
+public class Person {
+    public static enum PhoneType {
+        MOBILE,
+        HOME,
+        WORK;
+    }
+
+    public static class PhoneNumber {
+        @ForyField(id = 1)
+        private String number;
+
+        @ForyField(id = 2)
+        private PhoneType phoneType;
+
+        public byte[] toBytes() { ... }
+        public static PhoneNumber fromBytes(byte[] bytes) { ... }
+    }
+
+    @ForyField(id = 1)
+    private String name;
+
+    @ForyField(id = 8)
+    private Animal pet;
+
+    public byte[] toBytes() { ... }
+    public static Person fromBytes(byte[] bytes) { ... }
+}
+```
+
+union 会生成继承 `org.apache.fory.type.union.Union` 的类:
+
+```java
+public final class Animal extends Union {
+    public enum AnimalCase {
+        DOG(1),
+        CAT(2);
+        public final int id;
+        AnimalCase(int id) { this.id = id; }
+    }
+
+    public static Animal ofDog(Dog v) { ... }
+    public AnimalCase getAnimalCase() { ... }
+    public int getAnimalCaseId() { ... }
+
+    public boolean hasDog() { ... }
+    public Dog getDog() { ... }
+    public void setDog(Dog v) { ... }
+}
+```
+
+### 注册
+
+生成的注册辅助方法:
+
+```java
+public static void register(Fory fory) {
+    org.apache.fory.resolver.TypeResolver resolver = fory.getTypeResolver();
+    resolver.registerUnion(Animal.class, 106L, new org.apache.fory.serializer.UnionSerializer(fory, Animal.class));
+    resolver.register(Person.class, 100L);
+    resolver.register(Person.PhoneType.class, 101L);
+    resolver.register(Person.PhoneNumber.class, 102L);
+    resolver.register(Dog.class, 104L);
+    resolver.register(Cat.class, 105L);
+    resolver.register(AddressBook.class, 103L);
+}
+```
+
+对于未显式 `[id=...]` 的 schema,注册代码会使用计算得到的数值 ID(例如 `auto_id.fdl`):
+
+```java
+resolver.register(Status.class, 1124725126L);
+resolver.registerUnion(Wrapper.class, 1471345060L, new org.apache.fory.serializer.UnionSerializer(fory, Wrapper.class));
+resolver.register(Envelope.class, 3022445236L);
+resolver.registerUnion(Envelope.Detail.class, 1609214087L, new org.apache.fory.serializer.UnionSerializer(fory, Envelope.Detail.class));
+resolver.register(Envelope.Payload.class, 2862577837L);
+```
+
+若设置 `option enable_auto_type_id = false;`,则按命名空间与类型名注册:
+
+```java
+resolver.register(Config.class, "myapp.models", "Config");
+resolver.registerUnion(
+    Holder.class,
+    "myapp.models",
+    "Holder",
+    new org.apache.fory.serializer.UnionSerializer(fory, Holder.class));
+```
+
+### 使用示例
+
+```java
+Person person = new Person();
+person.setName("Alice");
+person.setPet(Animal.ofDog(new Dog()));
+
+byte[] data = person.toBytes();
+Person restored = Person.fromBytes(data);
+```
+
+## Python
+
+### 输出布局
+
+Python 每个 schema 文件生成一个模块,例如:
+
+- `<python_out>/addressbook.py`
+
+### 类型生成
+
+union 生成 case 枚举与 `Union` 子类,并提供类型化辅助方法:
+
+```python
+class AnimalCase(Enum):
+    DOG = 1
+    CAT = 2
+
+class Animal(Union):
+    @classmethod
+    def dog(cls, v: Dog) -> "Animal": ...
+
+    def case(self) -> AnimalCase: ...
+    def case_id(self) -> int: ...
+
+    def is_dog(self) -> bool: ...
+    def dog_value(self) -> Dog: ...
+    def set_dog(self, v: Dog) -> None: ...
+```
+
+message 生成 `@pyfory.dataclass` 类型,嵌套类型保持嵌套:
+
+```python
+@pyfory.dataclass
+class Person:
+    class PhoneType(IntEnum):
+        MOBILE = 0
+        HOME = 1
+        WORK = 2
+
+    @pyfory.dataclass
+    class PhoneNumber:
+        number: str = pyfory.field(id=1, default="")
+        phone_type: Person.PhoneType = pyfory.field(id=2, default=None)
+
+    name: str = pyfory.field(id=1, default="")
+    phones: List[Person.PhoneNumber] = pyfory.field(id=7, default_factory=list)
+    pet: Animal = pyfory.field(id=8, default=None)
+
+    def to_bytes(self) -> bytes: ...
+    @classmethod
+    def from_bytes(cls, data: bytes) -> "Person": ...
+```
+
+### 注册
+
+生成注册函数:
+
+```python
+def register_addressbook_types(fory: pyfory.Fory):
+    fory.register_union(Animal, type_id=106, serializer=AnimalSerializer(fory))
+    fory.register_type(Person, type_id=100)
+    fory.register_type(Person.PhoneType, type_id=101)
+    fory.register_type(Person.PhoneNumber, type_id=102)
+    fory.register_type(Dog, type_id=104)
+    fory.register_type(Cat, type_id=105)
+    fory.register_type(AddressBook, type_id=103)
+```
+
+未显式 `[id=...]` 时,注册代码使用计算得到的数值 ID:
+
+```python
+fory.register_type(Status, type_id=1124725126)
+fory.register_union(Wrapper, type_id=1471345060, serializer=WrapperSerializer(fory))
+fory.register_type(Envelope, type_id=3022445236)
+fory.register_union(Envelope.Detail, type_id=1609214087, serializer=Envelope.DetailSerializer(fory))
+fory.register_type(Envelope.Payload, type_id=2862577837)
+```
+
+若设置 `option enable_auto_type_id = false;`:
+
+```python
+fory.register_type(Config, namespace="myapp.models", typename="Config")
+fory.register_union(
+    Holder,
+    namespace="myapp.models",
+    typename="Holder",
+    serializer=HolderSerializer(fory),
+)
+```
+
+### 使用示例
+
+```python
+person = Person(name="Alice", pet=Animal.dog(Dog(name="Rex", bark_volume=10)))
+
+data = person.to_bytes()
+restored = Person.from_bytes(data)
+```
+
+## Rust
+
+### 输出布局
+
+Rust 每个 schema 生成一个模块文件,例如:
+
+- `<rust_out>/addressbook.rs`
+
+### 类型生成
+
+union 映射为 Rust enum,并用 `#[fory(id = ...)]` 声明 case ID:
+
+```rust
+#[derive(ForyObject, Debug, Clone, PartialEq)]
+pub enum Animal {
+    #[fory(id = 1)]
+    Dog(Dog),
+    #[fory(id = 2)]
+    Cat(Cat),
+}
+```
+
+嵌套类型生成嵌套 module:
+
+```rust
+pub mod person {
+    #[derive(ForyObject, Debug, Clone, PartialEq, Default)]
+    #[repr(i32)]
+    pub enum PhoneType {
+        #[default]
+        Mobile = 0,
+        Home = 1,
+        Work = 2,
+    }
+
+    #[derive(ForyObject, Debug, Clone, PartialEq, Default)]
+    pub struct PhoneNumber {
+        #[fory(id = 1)]
+        pub number: String,
+        #[fory(id = 2)]
+        pub phone_type: PhoneType,
+    }
+}
+```
+
+message 会 `derive(ForyObject)` 并生成 `to_bytes`/`from_bytes`:
+
+```rust
+#[derive(ForyObject, Debug, Clone, PartialEq, Default)]
+pub struct Person {
+    #[fory(id = 1)]
+    pub name: String,
+    #[fory(id = 7)]
+    pub phones: Vec<person::PhoneNumber>,
+    #[fory(id = 8, type_id = "union")]
+    pub pet: Animal,
+}
+```
+
+### 注册
+
+生成注册函数:
+
+```rust
+pub fn register_types(fory: &mut Fory) -> Result<(), fory::Error> {
+    fory.register_union::<Animal>(106)?;
+    fory.register::<person::PhoneType>(101)?;
+    fory.register::<person::PhoneNumber>(102)?;
+    fory.register::<Person>(100)?;
+    fory.register::<Dog>(104)?;
+    fory.register::<Cat>(105)?;
+    fory.register::<AddressBook>(103)?;
+    Ok(())
+}
+```
+
+未显式 `[id=...]` 时,注册代码使用计算得到的数值 ID:
+
+```rust
+fory.register::<Status>(1124725126)?;
+fory.register_union::<Wrapper>(1471345060)?;
+fory.register::<Envelope>(3022445236)?;
+fory.register_union::<envelope::Detail>(1609214087)?;
+fory.register::<envelope::Payload>(2862577837)?;
+```
+
+若设置 `option enable_auto_type_id = false;`:
+
+```rust
+fory.register_by_namespace::<Config>("myapp.models", "Config")?;
+fory.register_union_by_namespace::<Holder>("myapp.models", "Holder")?;
+```
+
+### 使用示例
+
+```rust
+let person = Person {
+    name: "Alice".into(),
+    pet: Animal::Dog(Dog::default()),
+    ..Default::default()
+};
+
+let bytes = person.to_bytes()?;
+let restored = Person::from_bytes(&bytes)?;
+```
+
+## C++
+
+### 输出布局
+
+C++ 每个 schema 文件生成一个头文件,例如:
+
+- `<cpp_out>/addressbook.h`
+
+### 类型生成
+
+message 会生成 `final` 类,并包含类型化访问器与字节辅助方法:
+
+```cpp
+class Person final {
+ public:
+  class PhoneNumber final {
+   public:
+    const std::string& number() const;
+    std::string* mutable_number();
+    template <class Arg, class... Args>
+    void set_number(Arg&& arg, Args&&... args);
+
+    fory::Result<std::vector<uint8_t>, fory::Error> to_bytes() const;
+    static fory::Result<PhoneNumber, fory::Error> from_bytes(const std::vector<uint8_t>& data);
+  };
+
+  const std::string& name() const;
+  std::string* mutable_name();
+  template <class Arg, class... Args>
+  void set_name(Arg&& arg, Args&&... args);
+
+  const Animal& pet() const;
+  Animal* mutable_pet();
+};
+```
+
+可选 message 字段会生成 `has_xxx`、`mutable_xxx`、`clear_xxx` API:
+
+```cpp
+class Envelope final {
+ public:
+  bool has_payload() const { return payload_ != nullptr; }
+  const Envelope::Payload& payload() const { return *payload_; }
+  Envelope::Payload* mutable_payload() {
+    if (!payload_) {
+      payload_ = std::make_unique<Envelope::Payload>();
+    }
+    return payload_.get();
+  }
+  void clear_payload() { payload_.reset(); }
+
+ private:
+  std::unique_ptr<Envelope::Payload> payload_;
+};
+```
+
+union 会生成基于 `std::variant` 的封装:
+
+```cpp
+class Animal final {
+ public:
+  enum class AnimalCase : uint32_t {
+    DOG = 1,
+    CAT = 2,
+  };
+
+  static Animal dog(Dog v);
+  static Animal cat(Cat v);
+
+  AnimalCase animal_case() const noexcept;
+  uint32_t animal_case_id() const noexcept;
+
+  bool is_dog() const noexcept;
+  const Dog* as_dog() const noexcept;
+  Dog* as_dog() noexcept;
+  const Dog& dog() const;
+  Dog& dog();
+
+  template <class Visitor>
+  decltype(auto) visit(Visitor&& vis) const;
+
+ private:
+  std::variant<Dog, Cat> value_;
+};
+```
+
+生成头文件还会包含 `FORY_UNION`、`FORY_FIELD_CONFIG`、`FORY_ENUM`、`FORY_STRUCT` 等序列化元信息宏。
+
+### 注册
+
+生成注册函数:
+
+```cpp
+inline void register_types(fory::serialization::BaseFory& fory) {
+    fory.register_union<Animal>(106);
+    fory.register_enum<Person::PhoneType>(101);
+    fory.register_struct<Person::PhoneNumber>(102);
+    fory.register_struct<Person>(100);
+    fory.register_struct<Dog>(104);
+    fory.register_struct<Cat>(105);
+    fory.register_struct<AddressBook>(103);
+}
+```
+
+未显式 `[id=...]` 时,注册代码使用计算得到的数值 ID:
+
+```cpp
+fory.register_enum<Status>(1124725126);
+fory.register_union<Wrapper>(1471345060);
+fory.register_struct<Envelope>(3022445236);
+fory.register_union<Envelope::Detail>(1609214087);
+fory.register_struct<Envelope::Payload>(2862577837);
+```
+
+若设置 `option enable_auto_type_id = false;`:
+
+```cpp
+fory.register_struct<Config>("myapp.models", "Config");
+fory.register_union<Holder>("myapp.models", "Holder");
+```
+
+### 使用示例
+
+```cpp
+addressbook::Person person;
+person.set_name("Alice");
+*person.mutable_pet() = addressbook::Animal::dog(addressbook::Dog{});
+
+auto bytes = person.to_bytes();
+auto restored = addressbook::Person::from_bytes(bytes.value());
+```
+
+## Go
+
+### 输出布局
+
+Go 输出路径受 schema 选项与 `--go_out` 共同影响。
+
+对于 `addressbook.fdl`,若配置了 `go_package`,生成结果会遵循对应 import path/package(位于 `--go_out` 根目录下)。
+
+若未配置 `go_package`,则使用 `--go_out` 指定目录,并按 package 规则生成文件名与包名。
+
+### 类型生成
+
+嵌套类型默认使用下划线命名(`Person_PhoneType`、`Person_PhoneNumber`):
+
+```go
+type Person_PhoneType int32
+
+const (
+    Person_PhoneTypeMobile Person_PhoneType = 0
+    Person_PhoneTypeHome   Person_PhoneType = 1
+    Person_PhoneTypeWork   Person_PhoneType = 2
+)
+
+type Person_PhoneNumber struct {
+    Number    string           `fory:"id=1"`
+    PhoneType Person_PhoneType `fory:"id=2"`
+}
+```
+
+message 会生成带 `fory` tag 的 struct 与字节辅助方法:
+
+```go
+type Person struct {
+    Name   string               `fory:"id=1"`
+    Id     int32                `fory:"id=2,compress=true"`
+    Phones []Person_PhoneNumber `fory:"id=7"`
+    Pet    Animal               `fory:"id=8"`
+}
+
+func (m *Person) ToBytes() ([]byte, error) { ... }
+func (m *Person) FromBytes(data []byte) error { ... }
+```
+
+union 会生成 case struct,并提供构造器/访问器/visitor API:
+
+```go
+type AnimalCase uint32
+
+type Animal struct {
+    case_ AnimalCase
+    value any
+}
+
+func DogAnimal(v *Dog) Animal { ... }
+func CatAnimal(v *Cat) Animal { ... }
+
+func (u Animal) Case() AnimalCase { ... }
+func (u Animal) AsDog() (*Dog, bool) { ... }
+func (u Animal) Visit(visitor AnimalVisitor) error { ... }
+```
+
+### 注册
+
+生成注册函数:
+
+```go
+func RegisterTypes(f *fory.Fory) error {
+    if err := f.RegisterUnion(Animal{}, 106, fory.NewUnionSerializer(...)); err != nil {
+        return err
+    }
+    if err := f.RegisterEnum(Person_PhoneType(0), 101); err != nil {
+        return err
+    }
+    if err := f.RegisterStruct(Person_PhoneNumber{}, 102); err != nil {
+        return err
+    }
+    if err := f.RegisterStruct(Person{}, 100); err != nil {
+        return err
+    }
+    return nil
+}
+```
+
+未显式 `[id=...]` 时,注册代码使用计算得到的数值 ID:
+
+```go
+if err := f.RegisterEnum(Status(0), 1124725126); err != nil { ... }
+if err := f.RegisterUnion(Wrapper{}, 1471345060, fory.NewUnionSerializer(...)); err != nil { ... }
+if err := f.RegisterStruct(Envelope{}, 3022445236); err != nil { ... }
+if err := f.RegisterUnion(Envelope_Detail{}, 1609214087, fory.NewUnionSerializer(...)); err != nil { ... }
+if err := f.RegisterStruct(Envelope_Payload{}, 2862577837); err != nil { ... }
+```
+
+若设置 `option enable_auto_type_id = false;`:
+
+```go
+if err := f.RegisterNamedStruct(Config{}, "myapp.models.Config"); err != nil { ... }
+if err := f.RegisterNamedUnion(Holder{}, "myapp.models.Holder", fory.NewUnionSerializer(...)); err != nil { ... }
+```
+
+`go_nested_type_style` 可控制嵌套类型命名风格:
+
+```protobuf
+option go_nested_type_style = "camelcase";
+```
+
+### 使用示例
+
+```go
+person := &Person{
+    Name: "Alice",
+    Pet:  DogAnimal(&Dog{Name: "Rex"}),
+}
+
+data, err := person.ToBytes()
+if err != nil {
+    panic(err)
+}
+var restored Person
+if err := restored.FromBytes(data); err != nil {
+    panic(err)
+}
+```
+
+## C\#
+
+### 输出布局
+
+C# 输出通常是每个 schema 对应一个 `.cs` 文件,例如:
+
+- `<csharp_out>/addressbook/addressbook.cs`
+
+### 类型生成
+
+message 会生成带 `[ForyObject]` 的类、C# 属性以及字节辅助方法:
+
+```csharp
+[ForyObject]
+public sealed partial class Person
+{
+    public string Name { get; set; } = string.Empty;
+    public int Id { get; set; }
+    public List<Person.PhoneNumber> Phones { get; set; } = new();
+    public Animal Pet { get; set; } = null!;
+
+    public byte[] ToBytes() { ... }
+    public static Person FromBytes(byte[] data) { ... }
+}
+```
+
+union 会生成带类型化 case 辅助方法的 `Union` 子类:
+
+```csharp
+public sealed class Animal : Union
+{
+    public static Animal Dog(Dog value) { ... }
+    public static Animal Cat(Cat value) { ... }
+    public bool IsDog => ...;
+    public Dog DogValue() { ... }
+}
+```
+
+### 注册
+
+每个 schema 都会生成一个注册辅助类:
+
+```csharp
+public static class AddressbookForyRegistration
+{
+    public static void Register(Fory fory)
+    {
+        fory.Register<addressbook.Animal>((uint)106);
+        fory.Register<addressbook.Person>((uint)100);
+        // ...
+    }
+}
+```
+
+若未显式提供类型 ID,生成的注册代码会像其他目标语言一样使用计算得到的数值 ID。
+
+## JavaScript
+
+### 输出布局
+
+JavaScript 输出通常是每个 schema 对应一个 `.ts` 文件,例如:
+
+- `<javascript_out>/addressbook.ts`
+
+### 类型生成
+
+message 会生成使用 camelCase 字段名的 `export interface` 声明:
+
+```typescript
+export interface Person {
+  name: string;
+  id: number;
+  phones: PhoneNumber[];
+  pet?: Animal | null;
+}
+```
+
+enum 会生成 `export enum` 声明:
+
+```typescript
+export enum PhoneType {
+  MOBILE = 0,
+  HOME = 1,
+  WORK = 2,
+}
+```
+
+union 会生成带 case enum 的判别联合类型:
+
+```typescript
+export enum AnimalCase {
+  DOG = 1,
+  CAT = 2,
+}
+
+export type Animal =
+  | { case: AnimalCase.DOG; value: Dog }
+  | { case: AnimalCase.CAT; value: Cat };
+```
+
+## Swift
+
+### 输出布局
+
+Swift 输出通常是每个 schema 对应一个 `.swift` 文件,例如:
+
+- `<swift_out>/addressbook/addressbook.swift`
+
+### 类型生成
+
+生成器会创建带 `@ForyObject` 和字段 ID 的 Swift 模型。
+
+当 package/namespace 非空时,命名空间形态由 `swift_namespace_style` 控制:
+
+- `enum`(默认):生成嵌套 enum 命名空间包装
+- `flatten`:在顶层类型名上加上由 package 派生的前缀(例如 `Demo_Foo_User`)
+
+当 package/namespace 为空时,不会生成 enum 包装或 flatten 前缀。
+
+对于非空 package 且使用默认 `enum` 风格时:
+
+```swift
+public enum Addressbook {
+    @ForyObject
+    public enum Animal: Equatable {
+        @ForyField(id: 1)
+        case dog(Addressbook.Dog)
+        @ForyField(id: 2)
+        case cat(Addressbook.Cat)
+    }
+
+    @ForyObject
+    public struct Person: Equatable {
+        @ForyField(id: 1)
+        public var name: String = ""
+        @ForyField(id: 8)
+        public var pet: Addressbook.Animal = .foryDefault()
+    }
+}
+```
+
+对于非空 package 且使用 `flatten` 风格时:
+
+```swift
+@ForyObject
+public struct Addressbook_Person: Equatable { ... }
+```
+
+当命令行和 schema 选项同时设置时,CLI 参数 `--swift_namespace_style` 会覆盖 schema 中的 `swift_namespace_style`。
+
+union 会生成带关联值的标记 Swift enum。
+带 `ref`/`weak_ref` 字段的 message 会生成 `final class` 模型,以保留引用语义。
+
+### 注册
+
+每个 schema 都会生成带传递性 import 注册的辅助类:
+
+```swift
+public enum ForyRegistration {
+    public static func register(_ fory: Fory) throws {
+        try ComplexPb.ForyRegistration.register(fory)
+        fory.register(Addressbook.Person.self, id: 100)
+        fory.register(Addressbook.Animal.self, id: 106)
+    }
+}
+```
+
+对于非空 package 且使用 `flatten` 风格时,辅助类名称也会带前缀(例如 `Addressbook_ForyRegistration`)。
+
+若未显式提供 `[id=...]`,注册会使用计算得到的数值 ID。
+若设置 `option enable_auto_type_id = false;`,则生成代码会改用基于名称的注册 API。
+
+## Dart
+
+### 输出布局
+
+Dart 输出通常是每个 schema 对应两个文件:一个带注解类型的主 `.dart` 文件,以及一个包含生成序列化器和注册辅助逻辑的 `.fory.dart` part 文件。
+
+- `<dart_out>/package/package.dart`
+- `<dart_out>/package/package.fory.dart`
+
+### 类型生成
+
+message 会生成带 `@ForyStruct` 注解的 `final class`,并在每个字段上加 `@ForyField`:
+
+```dart
+@ForyStruct()
+final class Person {
+  Person();
+
+  @ForyField(id: 1)
+  String name = '';
+
+  @ForyField(id: 2)
+  Int32 id = Int32(0);
+
+  @ForyField(id: 7)
+  List<Person_PhoneNumber> phones = <Person_PhoneNumber>[];
+
+  @ForyField(id: 8)
+  Animal pet = Animal._empty();
+}
+```
+
+enum 会生成带 `rawValue` getter 和 `fromRawValue` factory 的 Dart `enum`:
+
+```dart
+enum Person_PhoneType {
+  mobile,
+  home,
+  work;
+
+  int get rawValue => switch (this) {
+    Person_PhoneType.mobile => 0,
+    Person_PhoneType.home => 1,
+    Person_PhoneType.work => 2,
+  };
+
+  static Person_PhoneType fromRawValue(int value) => switch (value) {
+    0 => Person_PhoneType.mobile,
+    1 => Person_PhoneType.home,
+    2 => Person_PhoneType.work,
+    _ => throw StateError('Unknown Person_PhoneType raw value $value.'),
+  };
+}
+```
+
+union 会生成带 `@ForyUnion` 注解的类,包含工厂构造器、case enum 以及自定义序列化器:
+
+```dart
+enum AnimalCase {
+  dog,
+  cat;
+
+  int get id => switch (this) {
+    AnimalCase.dog => 1,
+    AnimalCase.cat => 2,
+  };
+}
+
+@ForyUnion()
+final class Animal {
+  final AnimalCase _case;
+  final Object? _value;
+
+  const Animal._(this._case, this._value);
+
+  factory Animal.dog(Dog value) => Animal._(AnimalCase.dog, value);
+  factory Animal.cat(Cat value) => Animal._(AnimalCase.cat, value);
+
+  bool get isDog => _case == AnimalCase.dog;
+  Dog get dogValue => _value as Dog;
+  // ...
+}
+```
+
+嵌套类型使用扁平下划线命名(例如 `Person_PhoneNumber`、`Person_PhoneType`)。
+
+非 optional、非 ref 的原始类型列表会使用 typed array 以获得零拷贝性能(例如 `list<int32>` -> `Int32List`)。
+
+列表元素或 map value 上的引用跟踪通过 `@ListType` / `@MapType` 注解表达:
+
+```dart
+@ListType(element: ValueType.ref())
+@ForyField(id: 3)
+List<Node> children = <Node>[];
+
+@MapType(value: ValueType.ref())
+@ForyField(id: 2)
+Map<String, Node> byName = <String, Node>{};
+```
+
+### 注册
+
+每个 schema 都会生成一个注册辅助类,负责处理该文件中的所有类型,并传递性注册 import 进来的类型:
+
+```dart
+abstract final class ForyRegistration {
+  static void register(
+    Fory fory,
+    Type type, {
+    int? id,
+    String? namespace,
+    String? typeName,
+  }) {
+    if (type == Person) {
+      registerGeneratedStruct(fory, _personForyRegistration, id: id, namespace: namespace, typeName: typeName);
+      return;
+    }
+    // ... other types
+  }
+}
+```
+
+### 使用示例
+
+```dart
+import 'package:fory/fory.dart';
+import 'generated/addressbook/addressbook.dart';
+
+void main() {
+  final fory = Fory();
+  ForyRegistration.register(fory, Person, id: 100);
+  ForyRegistration.register(fory, Dog, id: 104);
+  // ...
+
+  final person = Person()
+    ..name = 'Alice'
+    ..id = Int32(1);
+
+  final bytes = fory.serialize(person);
+  final roundTrip = fory.deserialize<Person>(bytes);
+}
+```
+
+## 跨语言说明
+
+### 类型 ID 行为
+
+- 显式 `[id=...]` 会直接用于生成注册代码。
+- 未声明类型 ID 时,生成代码会使用计算得到的数值 ID(参见 `auto_id.*` 输出)。
+- 若设置 `option enable_auto_type_id = false;`,则生成代码改为使用 namespace/type-name 注册 API,而非数值 ID。
+
+### 嵌套类型形态
+
+| 语言       | 嵌套类型形式                 |
+| ---------- | ---------------------------- |
+| Java       | `Person.PhoneNumber`         |
+| Python     | `Person.PhoneNumber`         |
+| Rust       | `person::PhoneNumber`        |
+| C++        | `Person::PhoneNumber`        |
+| Go         | `Person_PhoneNumber`(默认) |
+| C#         | `Person.PhoneNumber`         |
+| JavaScript | `Person.PhoneNumber`         |
+| Swift      | `Person.PhoneNumber`         |
+| Dart       | `Person_PhoneNumber`         |
+
+### 字节辅助方法命名
+
+| 语言       | 辅助方法名称              |
+| ---------- | ------------------------- |
+| Java       | `toBytes` / `fromBytes`   |
+| Python     | `to_bytes` / `from_bytes` |
+| Rust       | `to_bytes` / `from_bytes` |
+| C++        | `to_bytes` / `from_bytes` |
+| Go         | `ToBytes` / `FromBytes`   |
+| C#         | `ToBytes` / `FromBytes`   |
+| JavaScript | (通过 `fory.serialize()`) |
+| Swift      | `toBytes` / `fromBytes`   |
+| Dart       | (通过 `fory.serialize()`) |
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/compiler/index.md b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/compiler/index.md
new file mode 100644
index 0000000000..73caa1018b
--- /dev/null
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/compiler/index.md
@@ -0,0 +1,216 @@
+---
+title: 概览
+sidebar_position: 1
+id: index
+license: |
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+---
+
+Fory IDL 是 Apache Fory 的 Schema 定义语言,可实现类型安全的跨语言序列化。
+你只需定义一次数据结构,即可为 Java、Python、Go、Rust、C++、C#、Swift、JavaScript 和 Dart 生成原生数据结构代码。
+
+## 示例 Schema
+
+Fory IDL 提供了简单直观的语法来定义跨语言数据结构:
+
+```protobuf
+package example;
+
+enum Status {
+    PENDING = 0;
+    ACTIVE = 1;
+    COMPLETED = 2;
+}
+
+message User {
+    string name = 1;
+    int32 age = 2;
+    optional string email = 3;
+    list<string> tags = 4;
+}
+
+message Item {
+    string sku = 1;
+    int32 quantity = 2;
+}
+
+message Order {
+    ref User customer = 1;
+    list<Item> items = 2;
+    Status status = 3;
+    map<string, int32> metadata = 4;
+}
+
+message Dog [id=104] {
+    string name = 1;
+    int32 bark_volume = 2;
+}
+
+message Cat [id=105] {
+    string name = 1;
+    int32 lives = 2;
+}
+
+union Animal [id=106] {
+    Dog dog = 1;
+    Cat cat = 2;
+}
+```
+
+## 为什么选择 Fory IDL?
+
+### Schema 优先开发
+
+在 Fory IDL 中一次定义数据模型,即可在所有语言中生成一致且类型安全的代码。这样可以确保:
+
+- **类型安全**:在编译期而不是运行期发现类型错误
+- **一致性**:各语言使用相同字段名、类型和结构
+- **文档性**:Schema 本身就是可持续演进的文档
+- **可演进性**:可在所有实现中受控地进行 Schema 变更
+
+### Fory 原生能力
+
+与通用 IDL 不同,Fory IDL 专门为 Fory 序列化设计:
+
+- **引用跟踪**:通过 `ref` 一等支持共享引用和循环引用
+- **可空字段**:通过 `optional` 显式声明可空类型
+- **类型注册**:内置支持数值 ID 与基于命名空间的注册
+- **原生代码生成**:生成带 Fory 注解/宏的语言惯用代码
+
+### 集成开销低
+
+生成代码直接使用各语言原生构造:
+
+- Java:带 `@ForyField` 注解的普通 POJO
+- Python:带类型提示的 dataclass
+- Go:带 struct tag 的结构体
+- Rust:带 `#[derive(ForyObject)]` 的结构体
+- C++:带 `FORY_STRUCT` 宏的结构体
+- C#:带 `[ForyObject]` 的类及注册辅助函数
+- JavaScript:带注册函数的接口
+- Swift:带 `@ForyObject` 模型、`@ForyField` 元数据和注册辅助函数
+- Dart:带 `@ForyStruct` 类、`@ForyField` 注解和注册辅助函数
+
+## 快速开始
+
+### 1. 安装编译器
+
+```bash
+pip install fory-compiler
+```
+
+或从源码安装:
+
+```bash
+cd compiler
+pip install -e .
+```
+
+### 2. 编写 Schema
+
+创建 `example.fdl`:
+
+```protobuf
+package example;
+
+message Person {
+    string name = 1;
+    int32 age = 2;
+    optional string email = 3;
+}
+```
+
+### 3. 生成代码
+
+```bash
+# 为所有语言生成
+foryc example.fdl --output ./generated
+
+# 为指定语言生成
+foryc example.fdl --lang java,python,csharp,javascript,swift,dart --output ./generated
+```
+
+### 4. 使用生成代码
+
+**Java:**
+
+```java
+Person person = new Person();
+person.setName("Alice");
+person.setAge(30);
+byte[] data = person.toBytes();
+```
+
+**Python:**
+
+```python
+import pyfory
+from example import Person
+
+person = Person(name="Alice", age=30)
+data = bytes(person) # 或 `person.to_bytes()`
+```
+
+## 文档导航
+
+| 文档                                         | 说明                               |
+| -------------------------------------------- | ---------------------------------- |
+| [Fory IDL 语法](schema-idl.md)               | 完整语言语法与文法                 |
+| [类型系统](schema-idl.md#type-system)        | 基础类型、集合类型与类型规则       |
+| [编译器指南](compiler-guide.md)              | CLI 选项与构建集成                 |
+| [生成代码](generated-code.md)                | 各目标语言的输出格式               |
+| [Protocol Buffers IDL 支持](protobuf-idl.md) | 与 protobuf 的对比及迁移指南       |
+| [FlatBuffers IDL 支持](flatbuffers-idl.md)   | FlatBuffers 映射规则与代码生成差异 |
+
+## 核心概念
+
+### 字段修饰符
+
+- **`optional`**:字段可为 null/None
+- **`ref`**:为共享/循环引用启用引用跟踪
+- **`list`**:字段为列表/数组(别名:`repeated`)
+
+```protobuf
+message Example {
+    optional string nullable = 1;
+    ref Node parent = 2;
+    list<int32> numbers = 3;
+}
+```
+
+### 跨语言兼容
+
+Fory IDL 类型会映射为各语言原生类型:
+
+| Fory IDL 类型 | Java      | Python         | Go       | Rust     | C++           | C#       | JavaScript | Swift    | Dart     |
+| ------------- | --------- | -------------- | -------- | -------- | ------------- | -------- | ---------- | -------- | -------- |
+| `int32`       | `int`     | `pyfory.int32` | `int32`  | `i32`    | `int32_t`     | `int`    | `number`   | `Int32`  | `Int32`  |
+| `string`      | `String`  | `str`          | `string` | `String` | `std::string` | `string` | `string`   | `String` | `String` |
+| `bool`        | `boolean` | `bool`         | `bool`   | `bool`   | `bool`        | `bool`   | `boolean`  | `Bool`   | `bool`   |
+
+完整映射请参见 [类型系统](schema-idl.md#type-system)。
+
+## 最佳实践
+
+1. **使用有意义的 package 名称**:将相关类型分组管理
+2. **为性能分配类型 ID**:数值 ID 比基于名称的注册更高效
+3. **预留 ID 范围**:为后续扩展保留空隙(例如用户 100-199,订单 200-299)
+4. **显式使用 `optional`**:清晰表达可空语义
+5. **共享对象使用 `ref`**:对象可能被多处引用时开启引用跟踪
+
+## 示例
+
+完整可运行示例见 [examples](https://github.com/apache/fory/tree/main/compiler/examples) 目录。
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/compiler/protobuf-idl.md b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/compiler/protobuf-idl.md
new file mode 100644
index 0000000000..13c0de6995
--- /dev/null
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/compiler/protobuf-idl.md
@@ -0,0 +1,324 @@
+---
+title: Protobuf IDL 支持
+sidebar_position: 10
+id: protobuf_idl_support
+license: |
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+---
+
+本页说明 Apache Fory 如何处理 Protocol Buffers(`.proto`)schema、protobuf 概念如何映射到 Fory,以及 protobuf 专用 Fory 扩展选项的使用方式。
+
+## 本页内容
+
+- 如何在具体场景下选择 protobuf 或 Fory
+- 迁移时需要关注的语法与语义差异
+- `.proto` 文件中支持的 Fory 扩展选项
+- 从 protobuf 迁移到 Fory 的实践路径
+
+## 快速决策指南
+
+| 场景                                                  | 建议格式         |
+| ----------------------------------------------------- | ---------------- |
+| 主要构建 gRPC API,依赖 protobuf 工具链               | Protocol Buffers |
+| 需要极致对象图性能与引用跟踪                          | Fory             |
+| 需要在序列化数据中表达循环/共享引用                   | Fory             |
+| 需要强 unknown-field 语义保证线格式兼容               | Protocol Buffers |
+| 希望直接使用原生 struct/class,而非 protobuf 包装类型 | Fory             |
+
+## Protobuf 与 Fory 对比
+
+| 维度      | Protocol Buffers      | Fory                   |
+| --------- | --------------------- | ---------------------- |
+| 主要目标  | RPC/消息契约          | 高性能对象序列化       |
+| 编码模型  | Tag-Length-Value      | Fory 二进制协议        |
+| 引用跟踪  | 非内建                | 一等支持(`ref`)      |
+| 循环引用  | 不支持                | 支持                   |
+| 未知字段  | 保留                  | 不保留                 |
+| 生成类型  | protobuf 专用模型类型 | 语言原生构造           |
+| gRPC 生态 | 原生成熟              | 持续建设中(活跃开发) |
+
+Fory 的 gRPC 支持仍在持续开发中。当前生产级 gRPC 工作流里,protobuf 仍是更成熟的默认选择。
+
+## 为什么使用 Apache Fory
+
+- **代码更贴近语言习惯**:Fory IDL 生成的类和结构体可直接作为业务领域对象使用。
+- **序列化性能更高**:在 Fory 基准中,Fory 在对象序列化场景中可显著快于 protobuf。
+- **对象图表达更自然**:共享引用和循环引用是内建能力,无需通过业务层 ID 关联绕过。
+
+性能细节请参见 [性能参考](#性能参考)。
+
+## 语法与语义映射
+
+### Package 与文件级选项
+
+**Protocol Buffers**
+
+```protobuf
+syntax = "proto3";
+package example.models;
+option java_package = "com.example.models";
+option go_package = "example.com/models";
+```
+
+**Fory**
+
+```protobuf
+package example.models;
+```
+
+Fory 使用统一 package 命名空间做跨语言注册。语言特定的包路径仍可在代码生成阶段单独配置。
+
+### Message 与 Enum 定义
+
+**Protocol Buffers**
+
+```protobuf
+message User {
+  string id = 1;
+  string name = 2;
+  optional string email = 3;
+  int32 age = 4;
+  repeated string tags = 5;
+  map<string, string> metadata = 6;
+}
+
+enum Status {
+  STATUS_UNSPECIFIED = 0;
+  STATUS_ACTIVE = 1;
+}
+```
+
+**Fory**
+
+```protobuf
+message User [id=101] {
+    string id = 1;
+    string name = 2;
+    optional string email = 3;
+    int32 age = 4;
+    list<string> tags = 5;
+    map<string, string> metadata = 6;
+}
+
+enum Status [id=102] {
+    UNKNOWN = 0;
+    ACTIVE = 1;
+}
+```
+
+关键差异:
+
+- Fory 可直接分配稳定类型 ID(`[id=...]`)。
+- Fory 使用 `list<T>`(`repeated T` 为兼容别名)。
+- 枚举命名更偏向语言习惯,而非 protobuf 前缀风格。
+
+### `oneof` 到 `union`
+
+protobuf 的 `oneof` 会被翻译为嵌套 Fory `union`,并增加一个可选字段指向该 union。
+
+**Protocol Buffers**
+
+```protobuf
+message Event {
+  oneof payload {
+    string text = 1;
+    int32 number = 2;
+  }
+}
+```
+
+**转换后的 Fory 结构**
+
+```protobuf
+message Event {
+    union payload {
+        string text = 1;
+        int32 number = 2;
+    }
+    optional payload payload = 1;
+}
+```
+
+说明:
+
+- union case ID 来自原 `oneof` 字段号。
+- 自动生成的 union 引用字段使用 `oneof` 中最小字段号。
+
+### Import 与 Well-Known Types
+
+支持 protobuf import。常见 well-known types 会直接映射:
+
+- `google.protobuf.Timestamp` -> `timestamp`
+- `google.protobuf.Duration` -> `duration`
+- `google.protobuf.Any` -> `any`
+
+## 类型映射要点
+
+| Protobuf Type                            | Fory 映射                     |
+| ---------------------------------------- | ----------------------------- |
+| `bool`                                   | `bool`                        |
+| `int32`, `uint32`                        | 可变长 32 位整型家族          |
+| `sint32`                                 | zigzag 32 位整型              |
+| `int64`, `uint64`                        | 可变长 64 位整型家族          |
+| `sint64`                                 | zigzag 64 位整型              |
+| `fixed32`, `fixed64`                     | 定长无符号整型家族            |
+| `sfixed32`, `sfixed64`                   | 定长有符号整型家族            |
+| `float`, `double`                        | `float32`, `float64`          |
+| `string`, `bytes`                        | `string`, `bytes`             |
+| `repeated T`                             | `list<T>`                     |
+| `map<K, V>`                              | `map<K, V>`                   |
+| `optional T`                             | `optional T`                  |
+| `oneof`                                  | `union` + 可选 union 引用字段 |
+| `int64 [(fory).type = "tagged_int64"]`   | `tagged_int64` 编码           |
+| `uint64 [(fory).type = "tagged_uint64"]` | `tagged_uint64` 编码          |
+
+## Fory 扩展选项(Protobuf)
+
+`.proto` 文件中的 Fory 专用选项使用 `(fory).` 前缀。
+
+```protobuf
+option (fory).enable_auto_type_id = true;
+
+message TreeNode {
+  TreeNode parent = 1 [(fory).weak_ref = true];
+  repeated TreeNode children = 2 [(fory).ref = true];
+}
+```
+
+### 文件级选项
+
+| 选项                                 | 类型   | 说明                                                |
+| ------------------------------------ | ------ | --------------------------------------------------- |
+| `(fory).use_record_for_java_message` | bool   | 对该文件所有 message 生成 Java record               |
+| `(fory).polymorphism`                | bool   | 默认开启多态序列化元信息                            |
+| `(fory).enable_auto_type_id`         | bool   | 缺失时自动生成类型 ID(编译器默认 true)            |
+| `(fory).evolving`                    | bool   | message 的默认 schema 演进行为                      |
+| `(fory).go_nested_type_style`        | string | Go 嵌套命名风格:`underscore`(默认)或 `camelcase` |
+
+### Message 与 Enum 级选项
+
+| 选项                         | 作用对象      | 类型   | 说明                          |
+| ---------------------------- | ------------- | ------ | ----------------------------- |
+| `(fory).id`                  | message, enum | int    | 显式类型 ID(用于注册)       |
+| `(fory).alias`               | message, enum | string | 自动 ID 哈希使用的别名        |
+| `(fory).evolving`            | message       | bool   | 覆盖文件级演进设置            |
+| `(fory).use_record_for_java` | message       | bool   | 为该 message 生成 Java record |
+| `(fory).deprecated`          | message, enum | bool   | 标记类型为弃用                |
+| `(fory).namespace`           | message       | string | 覆盖默认 package 命名空间     |
+
+### 字段级选项
+
+| 选项                         | 类型   | 说明                                                                  |
+| ---------------------------- | ------ | --------------------------------------------------------------------- |
+| `(fory).ref`                 | bool   | 为该字段启用引用跟踪                                                  |
+| `(fory).nullable`            | bool   | 将字段视为可空(`optional`)                                          |
+| `(fory).weak_ref`            | bool   | 生成弱指针语义(C++/Rust 代码生成)                                   |
+| `(fory).thread_safe_pointer` | bool   | 对 ref 字段使用 Rust `Arc`/`ArcWeak`;默认 `false` 使用 `Rc`/`RcWeak` |
+| `(fory).deprecated`          | bool   | 标记字段为弃用                                                        |
+| `(fory).type`                | string | 基础类型覆盖,目前支持 `tagged_int64`/`tagged_uint64`                 |
+
+引用相关行为:
+
+- `weak_ref = true` 隐含开启 ref 跟踪。
+- 对 `repeated` 字段,`(fory).ref = true` 作用于列表元素。
+- 对 `map<K, V>` 字段,`(fory).ref = true` 作用于 map value。
+- `weak_ref` 与 `thread_safe_pointer` 是 C++/Rust 代码生成提示。
+- `thread_safe_pointer` 默认为 `false`;它只改变生成的 Rust 指针承载类型,不改变编码格式。
+- 在 Rust 代码生成中,`(fory).weak_ref = true` 默认使用 `RcWeak`;只有同时设置
+  `(fory).thread_safe_pointer = true` 时才会切换为 `ArcWeak`。
+
+### 典型选项组合示例
+
+```protobuf
+message Graph {
+  Node root = 1 [(fory).ref = true, (fory).thread_safe_pointer = true];
+  repeated Node nodes = 2 [(fory).ref = true];
+  map<string, Node> cache = 3 [(fory).ref = true];
+  Node parent = 4 [(fory).weak_ref = true];
+}
+```
+
+## 引用跟踪 vs Protobuf ID 关联
+
+protobuf 本身不保留共享/循环对象图。借助 Fory protobuf 扩展,可以显式启用对象图语义。
+
+**不使用 Fory ref 选项(protobuf 风格 ID 关联):**
+
+```protobuf
+message TreeNode {
+  string id = 1;
+  string parent_id = 2;
+  repeated string child_ids = 3;
+}
+```
+
+**使用 Fory ref 选项(对象图语义):**
+
+```protobuf
+message TreeNode {
+  TreeNode parent = 1 [(fory).weak_ref = true];
+  repeated TreeNode children = 2 [(fory).ref = true];
+}
+```
+
+## 迁移指南:Protobuf 到 Fory
+
+### 第 1 步:转换 schema 语法
+
+- 保持 package 名称稳定。
+- 将 `repeated T` 改为 `list<T>`(或保留 `repeated` 别名)。
+- 在需要稳定数值注册的位置添加显式 `[id=...]`。
+
+### 第 2 步:处理 `oneof` 与特殊类型
+
+- `oneof` -> `union` + 可选 union 字段。
+- 将 protobuf well-known types 映射到 Fory 基础类型(`timestamp`、`duration`、`any`)。
+
+### 第 3 步:用 `ref` 替换 protobuf 的对象图绕过方案
+
+若 protobuf 里通过手工 ID 关联表达对象图,迁移到 Fory 后应改用 `ref` 修饰符(必要时使用 `ref(weak=true)`)。
+
+### 第 4 步:更新构建与代码生成
+
+将 protobuf 代码生成步骤替换为 Fory 编译器针对目标语言的生成命令。
+
+### 第 5 步:执行兼容性验证
+
+分阶段迁移时,可并行保留两种格式,并通过集成测试验证 payload 级一致性。
+
+## 共存策略
+
+迁移期间可以并行运行 protobuf 与 Fory:
+
+```java
+public byte[] serialize(Object obj, Format format) {
+    if (format == Format.PROTOBUF) {
+        return ((MessageLite) obj).toByteArray();
+    }
+    return fory.serialize(obj);
+}
+```
+
+可在服务边界设置转换层,并优先迁移内部对象图较重的链路。
+
+## 性能参考
+
+- Benchmarks: https://fory.apache.org/docs/introduction/benchmark
+- Benchmark code: https://github.com/apache/fory/tree/main/benchmarks
+
+## 总结
+
+当主要关注 API 契约与 gRPC 生态时,建议使用 protobuf。若主要关注对象图性能、原生数据模型与引用语义,建议使用 Fory。
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/compiler/schema-idl.md b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/compiler/schema-idl.md
new file mode 100644
index 0000000000..baabf880e7
--- /dev/null
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/compiler/schema-idl.md
@@ -0,0 +1,899 @@
+---
+title: Schema IDL 语法
+sidebar_position: 2
+id: syntax
+license: |
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+---
+
+本文档给出 Fory IDL 的语法与语义参考,覆盖文件结构、类型系统、字段规则、选项与类型注册策略。
+
+编译器使用方式与构建集成请参见 [Compiler Guide](compiler-guide.md)。
+protobuf/FlatBuffers 前端映射请参见 [Protocol Buffers IDL Support](protobuf-idl.md) 与 [FlatBuffers IDL Support](flatbuffers-idl.md)。
+
+## 文件结构
+
+一个 Fory IDL 文件通常包含:
+
+1. 可选 `package` 声明
+2. 可选文件级 `option`
+3. 可选 `import` 语句
+4. 类型定义(`enum`、`message`、`union`)
+
+```protobuf
+// Optional package declaration
+package com.example.models;
+
+// Optional file-level options
+option java_package = "com.example.models";
+
+// Import statements
+import "common/types.fdl";
+
+// Type definitions
+enum Color [id=100] { ... }
+message User [id=101] { ... }
+message Order [id=102] { ... }
+union Event [id=103] { ... }
+```
+
+## 注释
+
+支持单行注释与块注释:
+
+```protobuf
+// This is a single-line comment
+
+/*
+ * This is a block comment
+ * that spans multiple lines
+ */
+
+message Example {
+    string name = 1;  // Inline comment
+}
+```
+
+## Package 声明
+
+`package` 定义文件中所有类型的命名空间。
+
+```protobuf
+package com.example.models;
+```
+
+也可以配置 alias(用于自动类型 ID 计算):
+
+```protobuf
+package com.example.models alias models_v1;
+```
+
+规则:
+
+- 可选但推荐
+- 必须位于任何类型定义之前
+- 每个文件最多一个 `package`
+- 用于命名空间注册
+- `alias` 会参与 auto-ID 哈希
+
+语言映射:
+
+| 语言       | package 用法              |
+| ---------- | ------------------------- |
+| Java       | Java package              |
+| Python     | 模块名(`.` 转 `_`)      |
+| Go         | 包名(通常取最后一段)    |
+| Rust       | 模块名(`.` 转 `_`)      |
+| C++        | 命名空间(`.` 转 `::`)   |
+| C#         | 命名空间                  |
+| JavaScript | 模块名(取最后一段)      |
+| Dart       | 库名(保留 package 各段) |
+
+## 文件级选项
+
+文件级选项用于控制语言定制代码生成。
+
+### 语法
+
+```protobuf
+option option_name = value;
+```
+
+### Java Package 选项
+
+通过 `java_package` 覆盖 Java 输出包名:
+
+```protobuf
+package payment;
+option java_package = "com.mycorp.payment.v1";
+
+message Payment {
+    string id = 1;
+}
+```
+
+效果:
+
+- Java 文件输出到 `com/mycorp/payment/v1/`
+- Java `package` 声明使用该值
+- 跨语言类型注册仍以 Fory package(如 `payment`)为准
+
+### Go Package 选项
+
+通过 `go_package` 指定 Go import path 与包名:
+
+```protobuf
+package payment;
+option go_package = "github.com/mycorp/apis/gen/payment/v1;paymentv1";
+
+message Payment {
+    string id = 1;
+}
+```
+
+格式:`"import/path;package_name"` 或仅 `"import/path"`(包名取最后一段)。
+
+### Java Outer Classname 选项
+
+将多个类型包装到一个外层类:
+
+```protobuf
+package payment;
+option java_outer_classname = "DescriptorProtos";
+
+enum Status {
+    UNKNOWN = 0;
+    ACTIVE = 1;
+}
+
+message Payment {
+    string id = 1;
+    Status status = 2;
+}
+```
+
+默认会生成单文件,枚举与消息作为静态内部类型。
+
+### Java Multiple Files 选项
+
+控制 Java 是否拆分多文件:
+
+```protobuf
+package payment;
+option java_outer_classname = "PaymentProtos";
+option java_multiple_files = true;
+
+message Payment {
+    string id = 1;
+}
+
+message Receipt {
+    string id = 1;
+}
+```
+
+行为:
+
+| `java_outer_classname` | `java_multiple_files` | 结果             |
+| ---------------------- | --------------------- | ---------------- |
+| 未设置                 | 任意                  | 每个类型一个文件 |
+| 已设置                 | `false`(默认)       | 单文件 + 内部类  |
+| 已设置                 | `true`                | 强制拆分为多文件 |
+
+### 多个选项组合
+
+```protobuf
+package payment;
+option java_package = "com.mycorp.payment.v1";
+option go_package = "github.com/mycorp/apis/gen/payment/v1;paymentv1";
+option deprecated = true;
+```
+
+### Protobuf 扩展语法说明
+
+在 `.fdl` 中请使用 Fory 原生语法(如 `[id=100]`、`ref`、`optional`、`nullable=true`)。
+`(fory).xxx` 形式仅用于 `.proto`(protobuf 前端)。
+
+### 选项优先级
+
+语言包路径优先级:
+
+1. 命令行覆盖(最高)
+2. 语言选项(`java_package`、`go_package`)
+3. Fory IDL `package`(兜底)
+
+### 跨语言类型注册
+
+默认情况下,注册名由 `package + type name`(或类型 ID)确定。建议长期保持 `package` 稳定,以避免跨版本注册不一致。
+
+## Import 语句
+
+### 基本语法
+
+```protobuf
+import "common/types.fdl";
+```
+
+### 多个导入
+
+```protobuf
+import "common/types.fdl";
+import "domain/user.fdl";
+import "domain/order.fdl";
+```
+
+### 路径解析
+
+导入解析顺序:
+
+1. 导入者文件所在目录
+2. 命令行 `-I/--proto_path/--import_path` 指定目录(按给定顺序)
+
+### 完整示例
+
+```protobuf
+// src/main.fdl
+package app;
+
+import "common.fdl";
+import "models/user.fdl";
+
+message Main {
+    common.Meta meta = 1;
+    models.User user = 2;
+}
+```
+
+### 不支持的 import 写法
+
+- URL 形式(如 `https://...`)
+- 绝对路径依赖(不推荐,会破坏可移植性)
+
+### import 错误
+
+典型错误:
+
+- 文件不存在
+- 搜索路径未包含依赖目录
+- 同名文件冲突导致解析到错误版本
+
+## Enum 定义
+
+### 基本语法
+
+```protobuf
+enum Status {
+    UNKNOWN = 0;
+    ACTIVE = 1;
+    DISABLED = 2;
+}
+```
+
+### 显式类型 ID
+
+```protobuf
+enum Status [id=101] {
+    UNKNOWN = 0;
+    ACTIVE = 1;
+    DISABLED = 2;
+}
+```
+
+### 预留值
+
+```protobuf
+enum Status {
+    UNKNOWN = 0;
+    ACTIVE = 1;
+    reserved 2, 3;
+    reserved 10 to 20;
+}
+```
+
+### enum 类型选项
+
+常见:`id`、`alias`、`deprecated`。
+
+### 语言映射
+
+| 语言       | 实现形式                               |
+| ---------- | -------------------------------------- |
+| Java       | `enum Status { UNKNOWN, ACTIVE, ... }` |
+| Python     | `class Status(IntEnum): UNKNOWN = 0`   |
+| Go         | `type Status int32` 配合常量           |
+| Rust       | `#[repr(i32)] enum Status { Unknown }` |
+| C++        | `enum class Status : int32_t { ... }`  |
+| JavaScript | `export enum Status { UNKNOWN, ... }`  |
+| Dart       | `enum Status { unknown, active, ... }` |
+
+### 枚举前缀处理
+
+针对 protobuf 风格 `TYPE_NAME_VALUE`,生成器通常会按语言习惯去除冗余前缀,使 API 更自然。
+
+| 语言       | 输出示例                                  | 风格             |
+| ---------- | ----------------------------------------- | ---------------- |
+| Java       | `UNKNOWN, TIER1, TIER2`                   | 作用域枚举       |
+| Rust       | `Unknown, Tier1, Tier2`                   | 作用域枚举       |
+| C++        | `UNKNOWN, TIER1, TIER2`                   | 作用域枚举       |
+| Python     | `UNKNOWN, TIER1, TIER2`                   | 作用域 `IntEnum` |
+| Go         | `DeviceTierUnknown, DeviceTierTier1, ...` | 非作用域常量     |
+| JavaScript | `UNKNOWN, TIER1, TIER2`                   | 作用域枚举       |
+| Dart       | `unknown, tier1, tier2`                   | 作用域枚举       |
+
+## Message 定义
+
+### 基本语法
+
+```protobuf
+message User {
+    string name = 1;
+    int32 age = 2;
+}
+```
+
+### 显式类型 ID
+
+```protobuf
+message User [id=100] {
+    string name = 1;
+    int32 age = 2;
+}
+```
+
+### 无显式类型 ID
+
+未声明 `[id=...]` 时,编译器可按配置自动生成类型 ID,或使用 namespace/name 注册。
+
+### 语言映射
+
+| 语言       | 实现形式                          |
+| ---------- | --------------------------------- |
+| Java       | 带 getter/setter 的 POJO          |
+| Python     | `@dataclass` 类                   |
+| Go         | 导出字段的 struct                 |
+| Rust       | `#[derive(ForyObject)]` 的 struct |
+| C++        | 带 `FORY_STRUCT` 宏的 struct      |
+| JavaScript | `export interface` 声明           |
+| Dart       | `@ForyStruct` `final class`       |
+
+### 预留字段
+
+```protobuf
+message User {
+    string name = 1;
+    reserved 2, 3;
+    reserved 10 to 20;
+}
+```
+
+### message 类型选项
+
+常见选项:`id`、`alias`、`evolving`、`deprecated`、`namespace`、`use_record_for_java`。
+
+## 嵌套类型
+
+### 嵌套 message
+
+```protobuf
+message Person {
+    message PhoneNumber {
+        string number = 1;
+    }
+    PhoneNumber phone = 1;
+}
+```
+
+### 嵌套 enum
+
+```protobuf
+message Person {
+    enum PhoneType {
+        MOBILE = 0;
+        HOME = 1;
+    }
+    PhoneType type = 1;
+}
+```
+
+### 限定类型名
+
+可使用完整限定名引用嵌套类型,例如 `Person.PhoneNumber`。
+
+### 深层嵌套类型
+
+支持多层嵌套,但建议控制层级,避免可读性下降。
+
+### 各语言生成形态
+
+| 语言       | 嵌套类型形态                                    |
+| ---------- | ----------------------------------------------- |
+| Java       | `Outer.Inner`                                   |
+| Python     | `Outer.Inner`                                   |
+| Rust       | `outer::Inner`                                  |
+| C++        | `Outer::Inner`                                  |
+| Go         | `Outer_Inner`(默认,可配置为 camelcase)       |
+| JavaScript | 扁平名称(如 `Result`)                         |
+| Dart       | 带下划线的扁平类名(如 `SearchResponse_Result`) |
+
+### 嵌套规则
+
+- 嵌套类型名在其父作用域内必须唯一
+- 可被同文件后续类型引用
+- 可通过 import + 限定名跨文件引用
+
+## Union 定义
+
+### 基本语法
+
+```protobuf
+union Animal {
+    Dog dog = 1;
+    Cat cat = 2;
+}
+```
+
+### 在 message 中使用 union
+
+```protobuf
+message Person {
+    Animal pet = 1;
+}
+```
+
+### 规则
+
+- case 字段号必须唯一
+- case 类型通常为消息类型或可序列化复合类型
+- 各语言会生成带 case 判别和访问器的 union 表达
+
+## 字段定义
+
+### 基本语法
+
+```protobuf
+string name = 1;
+```
+
+### 带修饰符语法
+
+```protobuf
+optional string nickname = 2;
+ref Node parent = 3;
+list<int32> scores = 4;
+```
+
+### 字段修饰符
+
+#### `optional`
+
+声明字段可为空(null/None):
+
+```protobuf
+message User {
+    optional string email = 1;
+}
+```
+
+建议在跨语言场景显式使用,以避免默认值差异。
+
+**生成代码:**
+
+| 语言       | 非 optional         | optional                                        |
+| ---------- | ------------------- | ----------------------------------------------- |
+| Java       | `String name`       | `String email` 配合 `@ForyField(nullable=true)` |
+| Python     | `name: str`         | `name: Optional[str]`                           |
+| Go         | `Name string`       | `Name *string`                                  |
+| Rust       | `name: String`      | `name: Option<String>`                          |
+| C++        | `std::string name`  | `std::optional<std::string> name`               |
+| JavaScript | `name: string`      | `name?: string \| null`                         |
+| Dart       | `String name`       | `String? email`                                 |
+
+#### `ref`
+
+开启引用跟踪,用于共享对象与循环结构:
+
+```protobuf
+message Node {
+    string name = 1;
+    ref Node parent = 2;
+    list<ref Node> children = 3;
+}
+```
+
+当运行时全局 ref tracking 开启时,字段级 `ref` 才会生效。
+
+**生成代码:**
+
+| 语言       | 不使用 `ref`     | 使用 `ref`                                 |
+| ---------- | ---------------- | ------------------------------------------ |
+| Java       | `Node parent`    | `Node parent` 配合 `@ForyField(ref=true)`  |
+| Python     | `parent: Node`   | `parent: Node = pyfory.field(ref=True)`    |
+| Go         | `Parent Node`    | `Parent *Node` 配合 `fory:"ref"`           |
+| Rust       | `parent: Node`   | `parent: Rc<Node>`                         |
+| C++        | `Node parent`    | `std::shared_ptr<Node> parent`             |
+| JavaScript | `parent: Node`   | `parent: Node`(无额外 `ref` 区分)        |
+| Dart       | `Node parent`    | `Node parent` 配合 `@ForyField(ref: true)` |
+
+Rust 对启用 ref 跟踪的字段默认使用 `Rc` 和 `RcWeak`。当生成的 Rust 类型需要使用
+`Arc` 或 `ArcWeak` 进行跨线程共享所有权时,可以使用 `ref(thread_safe=true)`。这个
+设置只是 Rust 代码生成中的承载类型选择;它不会改变编码格式,也不会让被引用值本身
+变成线程安全。protobuf 选项语法见
+[Protocol Buffers IDL Support](protobuf-idl.md#字段级选项)。
+
+Rust 指针承载类型映射:
+
+| Fory IDL                                       | Rust type       |
+| ---------------------------------------------- | --------------- |
+| `ref Node parent`                              | `Rc<Node>`      |
+| `ref(thread_safe=true) Node parent`            | `Arc<Node>`     |
+| `ref(weak=true) Node parent`                   | `RcWeak<Node>`  |
+| `ref(weak=true, thread_safe=true) Node parent` | `ArcWeak<Node>` |
+
+#### `list`
+
+列表字段(`repeated` 为等价别名):
+
+```protobuf
+message Group {
+    list<string> tags = 1;
+}
+```
+
+**生成代码:**
+
+| 语言       | 类型                       |
+| ---------- | -------------------------- |
+| Java       | `List<String>`             |
+| Python     | `List[str]`                |
+| Go         | `[]string`                 |
+| Rust       | `Vec<String>`              |
+| C++        | `std::vector<std::string>` |
+| JavaScript | `string[]`                 |
+| Dart       | `List<String>`             |
+
+### 组合修饰符
+
+可组合使用:
+
+```protobuf
+message Graph {
+    optional ref Node root = 1;
+    list<ref Node> nodes = 2;
+}
+```
+
+## 字段号
+
+字段号规则:
+
+- 同一 message 内必须唯一
+- 必须为正整数
+- 不应复用已删除字段号(建议使用 `reserved`)
+- 建议预留编号区间以便演进
+
+## Type System {#type-system}
+
+Fory IDL 类型系统包括基础类型、命名类型和集合类型。
+
+### Primitive Types
+
+| 类型族   | 示例                              |
+| -------- | --------------------------------- |
+| 布尔     | `bool`                            |
+| 整数     | `int8/int16/int32/int64`、`uint*` |
+| 浮点     | `float32`、`float64`              |
+| 字符串   | `string`                          |
+| 字节数组 | `bytes`                           |
+| 时间     | `date`、`timestamp`、`duration`   |
+| 动态类型 | `any`                             |
+
+#### Boolean
+
+`bool` 表示布尔值。
+
+| 语言       | 类型      | 说明 |
+| ---------- | --------- | ---- |
+| Java       | `boolean` |      |
+| Python     | `bool`    |      |
+| Go         | `bool`    |      |
+| Rust       | `bool`    |      |
+| C++        | `bool`    |      |
+| JavaScript | `boolean` |      |
+| Dart       | `bool`    |      |
+
+#### Integer Types
+
+支持有符号/无符号与不同位宽。跨语言场景建议明确编码策略并保持字段语义稳定。
+
+**有符号整数映射:**
+
+| Fory IDL | Java    | Python         | Go      | Rust  | C++       | JavaScript         | Dart    |
+| -------- | ------- | -------------- | ------- | ----- | --------- | ------------------ | ------- |
+| `int8`   | `byte`  | `pyfory.int8`  | `int8`  | `i8`  | `int8_t`  | `number`           | `Int8`  |
+| `int16`  | `short` | `pyfory.int16` | `int16` | `i16` | `int16_t` | `number`           | `Int16` |
+| `int32`  | `int`   | `pyfory.int32` | `int32` | `i32` | `int32_t` | `number`           | `Int32` |
+| `int64`  | `long`  | `pyfory.int64` | `int64` | `i64` | `int64_t` | `bigint \| number` | `int`   |
+
+**无符号整数映射:**
+
+| Fory IDL | Java    | Python          | Go       | Rust  | C++        | JavaScript         | Dart     |
+| -------- | ------- | --------------- | -------- | ----- | ---------- | ------------------ | -------- |
+| `uint8`  | `short` | `pyfory.uint8`  | `uint8`  | `u8`  | `uint8_t`  | `number`           | `UInt8`  |
+| `uint16` | `int`   | `pyfory.uint16` | `uint16` | `u16` | `uint16_t` | `number`           | `UInt16` |
+| `uint32` | `long`  | `pyfory.uint32` | `uint32` | `u32` | `uint32_t` | `number`           | `UInt32` |
+| `uint64` | `long`  | `pyfory.uint64` | `uint64` | `u64` | `uint64_t` | `bigint \| number` | `int`    |
+
+#### Integer Encoding Variants
+
+常见编码:
+
+- `varint`:小值更省空间
+- `fixed`:固定长度,性能稳定
+- `tagged`:混合编码(特定类型可用)
+
+#### Floating-Point Types
+
+- `float32`
+- `float64`
+
+| Fory IDL  | Java     | Python           | Go        | Rust  | C++      | JavaScript | Dart      |
+| --------- | -------- | ---------------- | --------- | ----- | -------- | ---------- | --------- |
+| `float32` | `float`  | `pyfory.float32` | `float32` | `f32` | `float`  | `number`   | `Float32` |
+| `float64` | `double` | `pyfory.float64` | `float64` | `f64` | `double` | `number`   | `double`  |
+
+#### String Type
+
+`string` 使用 UTF-8 文本语义。
+
+| 语言       | 类型          | 说明                 |
+| ---------- | ------------- | -------------------- |
+| Java       | `String`      | 不可变               |
+| Python     | `str`         |                      |
+| Go         | `string`      | 不可变               |
+| Rust       | `String`      | 所有权字符串,堆分配 |
+| C++        | `std::string` |                      |
+| JavaScript | `string`      |                      |
+| Dart       | `String`      |                      |
+
+#### Bytes Type
+
+`bytes` 用于原始二进制载荷。
+
+| 语言       | 类型                   | 说明   |
+| ---------- | ---------------------- | ------ |
+| Java       | `byte[]`               |        |
+| Python     | `bytes`                | 不可变 |
+| Go         | `[]byte`               |        |
+| Rust       | `Vec<u8>`              |        |
+| C++        | `std::vector<uint8_t>` |        |
+| JavaScript | `Uint8Array`           |        |
+| Dart       | `Uint8List`            |        |
+
+#### Temporal Types
+
+##### Date
+
+`date` 表示日期(不含时区时间部分)。
+
+| 语言       | 类型                        | 说明                    |
+| ---------- | --------------------------- | ----------------------- |
+| Java       | `java.time.LocalDate`       |                         |
+| Python     | `datetime.date`             |                         |
+| Go         | `time.Time`                 | 会忽略时间部分          |
+| Rust       | `chrono::NaiveDate`         | 需依赖 `chrono` crate   |
+| C++        | `fory::serialization::Date` |                         |
+| JavaScript | `Date`                      |                         |
+| Dart       | `LocalDate`                 | Fory package 提供的类型 |
+
+##### Timestamp
+
+`timestamp` 表示时间点(跨语言应统一时间语义与精度预期)。
+
+| 语言       | 类型                             | 说明                    |
+| ---------- | -------------------------------- | ----------------------- |
+| Java       | `java.time.Instant`              | 基于 UTC                |
+| Python     | `datetime.datetime`              |                         |
+| Go         | `time.Time`                      |                         |
+| Rust       | `chrono::NaiveDateTime`          | 需依赖 `chrono` crate   |
+| C++        | `fory::serialization::Timestamp` |                         |
+| JavaScript | `Date`                           |                         |
+| Dart       | `Timestamp`                      | Fory package 提供的类型 |
+
+#### Any
+
+`any` 允许存储动态类型值。使用 `any` 时建议配合清晰的业务约束,避免滥用导致模型不稳定。
+
+| 语言       | 类型           | 说明           |
+| ---------- | -------------- | -------------- |
+| Java       | `Object`       | 写入运行时类型 |
+| Python     | `Any`          | 写入运行时类型 |
+| Go         | `any`          | 写入运行时类型 |
+| Rust       | `Box<dyn Any>` | 写入运行时类型 |
+| C++        | `std::any`     | 写入运行时类型 |
+| JavaScript | `any`          | 写入运行时类型 |
+| Dart       | `Object?`      | 写入运行时类型 |
+
+### Named Types
+
+命名类型包括:
+
+- `enum`
+- `message`
+- `union`
+
+支持跨文件 import 和限定名引用。
+
+### Collection Types
+
+#### List (`list`)
+
+```protobuf
+list<T>
+```
+
+等价别名:`repeated T`。
+
+#### Map
+
+```protobuf
+map<K, V>
+```
+
+约束:
+
+- `K` 一般应为可稳定比较的标量类型
+- `V` 可为任意支持类型
+
+| Fory IDL             | Java                   | Python            | Go                 | Rust                    | C++                              | JavaScript            | Dart                 |
+| -------------------- | ---------------------- | ----------------- | ------------------ | ----------------------- | -------------------------------- | --------------------- | -------------------- |
+| `map<string, int32>` | `Map<String, Integer>` | `Dict[str, int]`  | `map[string]int32` | `HashMap<String, i32>`  | `std::map<std::string, int32_t>` | `Map<string, number>` | `Map<String, Int32>` |
+| `map<string, User>`  | `Map<String, User>`    | `Dict[str, User]` | `map[string]User`  | `HashMap<String, User>` | `std::map<std::string, User>`    | `Map<string, User>`   | `Map<String, User>`  |
+
+### Type Compatibility Matrix
+
+跨语言建议:
+
+- 使用各语言都稳定支持的公共子集
+- 尽量避免平台相关宽度/语义差异
+- 对整数编码与可空语义显式声明
+
+### Best Practices
+
+1. 优先使用显式字段号与稳定命名
+2. 需要可空就显式 `optional`
+3. 存在共享/循环关系时使用 `ref`
+4. 降低 `any` 使用范围,优先强类型建模
+5. 预留字段号与枚举值区间
+
+## Type IDs
+
+类型 ID 用于跨语言快速注册与解码匹配。
+
+### 显式类型 ID
+
+```protobuf
+message User [id=100] {
+    string name = 1;
+}
+```
+
+### 无显式类型 ID
+
+未显式声明时可:
+
+- 自动生成数值 ID(默认配置)
+- 禁用自动 ID,改用 namespace/type-name 注册
+
+### 实践说明
+
+- 类型 ID 在协议层面应视为稳定标识
+- 一经发布,不建议更改
+- 建议按域规划 ID 段(如 100-199 用户域)
+
+### ID 分配策略
+
+- 核心高频模型优先分配固定 ID
+- 团队统一管理 ID 区间与分配规范
+- 在 CI 中增加 ID 冲突检查
+
+## 完整示例
+
+```protobuf
+package demo.order;
+
+option java_package = "com.example.demo.order";
+option go_package = "github.com/example/demo/gen/order;order";
+
+import "demo/common.fdl";
+
+enum Status [id=200] {
+    UNKNOWN = 0;
+    CREATED = 1;
+    PAID = 2;
+    SHIPPED = 3;
+}
+
+message Item [id=201] {
+    string sku = 1;
+    int32 quantity = 2;
+}
+
+message User [id=202] {
+    string id = 1;
+    string name = 2;
+    optional string email = 3;
+}
+
+union Animal [id=203] {
+    Dog dog = 1;
+    Cat cat = 2;
+}
+
+message Dog [id=204] {
+    string name = 1;
+}
+
+message Cat [id=205] {
+    string name = 1;
+}
+
+message Order [id=206] {
+    string id = 1;
+    ref User buyer = 2;
+    list<Item> items = 3;
+    Status status = 4;
+    map<string, string> metadata = 5;
+    optional Animal pet = 6;
+}
+```
+
+## 语法摘要
+
+以下为简化文法(便于快速查阅,具体以编译器实现为准):
+
+```ebnf
+file            = [packageDecl] {optionDecl} {importDecl} {typeDecl} ;
+
+packageDecl     = "package" qualifiedName ["alias" identifier] ";" ;
+optionDecl      = "option" identifier "=" optionValue ";" ;
+importDecl      = "import" stringLiteral ";" ;
+
+typeDecl        = enumDecl | messageDecl | unionDecl ;
+
+enumDecl        = "enum" identifier [typeOptions] "{" {enumField | reservedDecl} "}" ;
+enumField       = identifier "=" intLiteral ";" ;
+
+messageDecl     = "message" identifier [typeOptions] "{" {fieldDecl | nestedTypeDecl | reservedDecl} "}" ;
+unionDecl       = "union" identifier [typeOptions] "{" {unionCaseDecl} "}" ;
+
+fieldDecl       = [fieldModifier] typeRef identifier "=" intLiteral [fieldOptions] ";" ;
+unionCaseDecl   = typeRef identifier "=" intLiteral [fieldOptions] ";" ;
+
+fieldModifier   = "optional" | "ref" | "list" ;
+
+typeRef         = primitiveType | qualifiedName | listType | mapType ;
+listType        = "list" "<" typeRef ">" ;
+mapType         = "map" "<" typeRef "," typeRef ">" ;
+
+typeOptions     = "[" optionPair {"," optionPair} "]" ;
+fieldOptions    = "[" optionPair {"," optionPair} "]" ;
+optionPair      = identifier "=" optionValue ;
+
+reservedDecl    = "reserved" reservedItem {"," reservedItem} ";" ;
+reservedItem    = intLiteral | intLiteral "to" intLiteral | stringLiteral ;
+```
+
+实现建议:如需严谨验证,请以编译器语法解析器和测试用例为准。
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/guide/_category_.json b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/guide/_category_.json
new file mode 100644
index 0000000000..ab7f160ead
--- /dev/null
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/guide/_category_.json
@@ -0,0 +1 @@
+{"position": 3, "label": "用户指南"}
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/guide/cpp/_category_.json b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/guide/cpp/_category_.json
new file mode 100644
index 0000000000..9660bafa82
--- /dev/null
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/guide/cpp/_category_.json
@@ -0,0 +1,6 @@
+{
+  "label": "C++",
+  "position": 4,
+  "collapsible": true,
+  "collapsed": true
+}
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/guide/cpp/basic-serialization.md b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/guide/cpp/basic-serialization.md
new file mode 100644
index 0000000000..d047b5b991
--- /dev/null
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/guide/cpp/basic-serialization.md
@@ -0,0 +1,238 @@
+---
+title: 基础序列化
+sidebar_position: 2
+id: basic_serialization
+license: |
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+---
+
+本页介绍基础对象图序列化和核心序列化 API。
+
+## 对象图序列化
+
+Apache Fory™ 提供复杂对象图的自动序列化,保留对象之间的结构和关系。`FORY_STRUCT` 宏在编译时生成高效的序列化代码,消除运行时开销。
+
+**核心功能:**
+
+- 支持任意深度的嵌套结构体序列化
+- 集合类型(vector、set、map)
+- 使用 `std::optional<T>` 的可选字段
+- 智能指针(`std::shared_ptr`、`std::unique_ptr`)
+- 自动处理基本类型和字符串
+- 使用变长整数的高效二进制编码
+
+```cpp
+#include "fory/serialization/fory.h"
+#include <vector>
+#include <map>
+
+using namespace fory::serialization;
+
+// 定义结构体
+struct Address {
+  std::string street;
+  std::string city;
+  std::string country;
+
+  bool operator==(const Address &other) const {
+    return street == other.street && city == other.city &&
+           country == other.country;
+  }
+};
+FORY_STRUCT(Address, street, city, country);
+
+struct Person {
+  std::string name;
+  int32_t age;
+  Address address;
+  std::vector<std::string> hobbies;
+  std::map<std::string, std::string> metadata;
+
+  bool operator==(const Person &other) const {
+    return name == other.name && age == other.age &&
+           address == other.address && hobbies == other.hobbies &&
+           metadata == other.metadata;
+  }
+};
+FORY_STRUCT(Person, name, age, address, hobbies, metadata);
+
+int main() {
+  auto fory = Fory::builder().xlang(true).build();
+  fory.register_struct<Address>(100);
+  fory.register_struct<Person>(200);
+
+  Person person{
+      "John Doe",
+      30,
+      {"123 Main St", "New York", "USA"},
+      {"reading", "coding"},
+      {{"role", "developer"}}
+  };
+
+  auto result = fory.serialize(person);
+  auto decoded = fory.deserialize<Person>(result.value());
+  assert(person == decoded.value());
+}
+```
+
+## 序列化 API
+
+### 序列化到新 Vector
+
+```cpp
+auto fory = Fory::builder().xlang(true).build();
+fory.register_struct<MyStruct>(1);
+
+MyStruct obj{/* ... */};
+
+// 序列化 - 返回 Result<std::vector<uint8_t>, Error>
+auto result = fory.serialize(obj);
+if (result.ok()) {
+  std::vector<uint8_t> bytes = std::move(result).value();
+  // 使用 bytes...
+} else {
+  // 处理错误
+  std::cerr << result.error().to_string() << std::endl;
+}
+```
+
+### 序列化到现有缓冲区
+
+```cpp
+// 序列化到现有 Buffer(最快路径)
+Buffer buffer;
+auto result = fory.serialize_to(buffer, obj);
+if (result.ok()) {
+  size_t bytes_written = result.value();
+  // buffer 现在包含序列化数据
+}
+
+// 序列化到现有 vector(零拷贝)
+std::vector<uint8_t> output;
+auto result = fory.serialize_to(output, obj);
+if (result.ok()) {
+  size_t bytes_written = result.value();
+  // output 现在包含序列化数据
+}
+```
+
+### 从字节数组反序列化
+
+```cpp
+// 从原始指针反序列化
+auto result = fory.deserialize<MyStruct>(data_ptr, data_size);
+if (result.ok()) {
+  MyStruct obj = std::move(result).value();
+}
+
+// 从 vector 反序列化
+std::vector<uint8_t> data = /* ... */;
+auto result = fory.deserialize<MyStruct>(data);
+
+// 从 Buffer 反序列化(更新 reader_index)
+Buffer buffer(data);
+auto result = fory.deserialize<MyStruct>(buffer);
+```
+
+## 错误处理
+
+Fory 使用 `Result<T, Error>` 类型进行错误处理:
+
+```cpp
+auto result = fory.serialize(obj);
+
+// 检查操作是否成功
+if (result.ok()) {
+  auto value = std::move(result).value();
+  // 使用 value...
+} else {
+  Error error = result.error();
+  std::cerr << "Error: " << error.to_string() << std::endl;
+}
+
+// 或使用 FORY_TRY 宏进行提前返回
+FORY_TRY(bytes, fory.serialize(obj));
+// 直接使用 bytes...
+```
+
+常见错误类型:
+
+- `Error::type_mismatch` - 反序列化时类型 ID 不匹配
+- `Error::invalid_data` - 无效或损坏的数据
+- `Error::buffer_out_of_bound` - 缓冲区溢出/下溢
+- `Error::type_error` - 类型注册错误
+
+## FORY_STRUCT 宏
+
+`FORY_STRUCT` 宏用于注册结构体以进行序列化:
+
+```cpp
+struct MyStruct {
+  int32_t x;
+  std::string y;
+  std::vector<int32_t> z;
+};
+
+// 必须与结构体在同一命名空间中
+FORY_STRUCT(MyStruct, x, y, z);
+```
+
+该宏:
+
+1. 生成编译时字段元数据
+2. 启用 ADL(参数依赖查找)进行序列化
+3. 通过模板特化创建高效的序列化代码
+
+**要求:**
+
+- 必须放在与结构体相同的命名空间中(用于 ADL)
+- 所有列出的字段必须是可序列化类型
+- 宏中的字段顺序决定序列化顺序
+
+## 嵌套结构体
+
+完全支持嵌套结构体:
+
+```cpp
+struct Inner {
+  int32_t value;
+};
+FORY_STRUCT(Inner, value);
+
+struct Outer {
+  Inner inner;
+  std::string label;
+};
+FORY_STRUCT(Outer, inner, label);
+
+// 两者都必须注册
+fory.register_struct<Inner>(1);
+fory.register_struct<Outer>(2);
+```
+
+## 性能提示
+
+- **缓冲区复用**:使用 `serialize_to(buffer, obj)` 配合预分配的缓冲区
+- **预注册**:在序列化开始前注册所有类型
+- **单线程**:尽可能使用 `build()` 而不是 `build_thread_safe()`
+- **禁用跟踪**:当不需要引用跟踪时使用 `track_ref(false)`
+- **紧凑编码**:使用变长编码提高空间效率
+
+## 相关主题
+
+- [配置](configuration.md) - 构建器选项
+- [类型注册](type-registration.md) - 注册类型
+- [支持的类型](supported-types.md) - 所有支持的类型
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/guide/cpp/configuration.md b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/guide/cpp/configuration.md
new file mode 100644
index 0000000000..62a93572f0
--- /dev/null
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs/version-1.2.0/guide/cpp/configuration.md
@@ -0,0 +1,189 @@
+---
+title: 配置
+sidebar_position: 1
... 74326 lines suppressed ...


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@fory.apache.org
For additional commands, e-mail: commits-help@fory.apache.org