Skip to content

Releases: apache/fory

v0.14.1

29 Dec 11:37

Choose a tag to compare

Highlights

  • feat(rust): add generate_default attr, no longer generate Default by default by @ariesdevil in #3074

Features

  • feat(rust): add generate_default attr, no longer generate Default by default by @ariesdevil in #3074
  • feat(java): mark createSerializer as public by @chaokunyang

Bug Fix

  • fix(java): Fix CopyOnWriteArrayList field serialization by @vybhavjs in #3079
  • fix(java): Better ergonomics for AllowListChecker by @Asuka-star in #3061
  • fix(java): fix read class def when writing classdefs by @chaokunyang in 3ad627c9
  • fix(Rust): Move the calculating of TypeMeta::bytes and TypeMeta::hash ahead of serialization by @urlyy in #3060
  • fix(Rust): prevent obtaining generic type metadata on custom types(struct/enum) by @urlyy in #3057

Full Changelog: v0.14.0...v0.14.1

v0.14.1-rc1

26 Dec 07:48

Choose a tag to compare

v0.14.1-rc1 Pre-release
Pre-release

Highlights

  • feat(rust): add generate_default attr, no longer generate Default by default by @ariesdevil in #3074

Features

  • feat(rust): add generate_default attr, no longer generate Default by default by @ariesdevil in #3074
  • feat(java): mark createSerializer as public by @chaokunyang

Bug Fix

  • fix(java): Fix CopyOnWriteArrayList field serialization by @vybhavjs in #3079
  • fix(java): Better ergonomics for AllowListChecker by @Asuka-star in #3061
  • fix(java): fix read class def when writing classdefs by @chaokunyang in 3ad627c9
  • fix(Rust): Move the calculating of TypeMeta::bytes and TypeMeta::hash ahead of serialization by @urlyy in #3060
  • fix(Rust): prevent obtaining generic type metadata on custom types(struct/enum) by @urlyy in #3057

Full Changelog: v0.14.0...v0.14.1-rc1

v0.14.0

15 Dec 14:21

Choose a tag to compare

Highlights

  • Official C++ Support: Introduced the official Apache Fory C++ implementation, featuring a high-performance object graph serialization framework, xlang support, and comprehensive benchmarks.
  • Row Format & Type System: Implemented a new row-oriented format type system across Java, Python, and C++, enabling row-columnar conversions and removing external Arrow dependencies for schema encoding.
  • Performance Enhancements: Significant optimizations across all languages, including thread-local context management in Rust, fast flat-int maps for C++ type dispatch, and optimized buffer read/write operations.
  • Ecosystem Updates: Added support for JDK 25 (Java), Go 1.23, and Bazel 8. Python support has been officially marked as stable with improved build parallelism.
  • Advanced Java Features: Added GraalVM Native Image support via ForyFeature and new optimized serializers for blocking queues and final fields.

Features

Bug Fix

Other Improvements

Read more

v0.14.0-rc1

11 Dec 16:51

Choose a tag to compare

v0.14.0-rc1 Pre-release
Pre-release

Highlights

  • Official C++ Support: Introduced the official Apache Fory C++ implementation, featuring a high-performance object graph serialization framework, xlang support, and comprehensive benchmarks.
  • Row Format & Type System: Implemented a new row-oriented format type system across Java, Python, and C++, enabling row-columnar conversions and removing external Arrow dependencies for schema encoding.
  • Performance Enhancements: Significant optimizations across all languages, including thread-local context management in Rust, fast flat-int maps for C++ type dispatch, and optimized buffer read/write operations.
  • Ecosystem Updates: Added support for JDK 25 (Java), Go 1.23, and Bazel 8. Python support has been officially marked as stable with improved build parallelism.
  • Advanced Java Features: Added GraalVM Native Image support via ForyFeature and new optimized serializers for blocking queues and final fields.

Features

Bug Fix

Other Improvements

Read more

v0.13.2

04 Dec 16:16

Choose a tag to compare

Highlights

  • perf(rust): use thread local to manage fory rust WriteContext/ReadContext by @chaokunyang in
    #2946
  • feat(rust): add typename to unregistered error message by @chaokunyang in #2881

Features

Bug Fix

Other Improvements

  • docs(java): add logging section by @mosinnik in #2905
  • docs: fix cargo benchmark comand in doc by @chaokunyang in #2897
  • chore: move benchmarks to separate dir to speed up ci build by @chaokunyang in
    #2894
  • chore(CI): Fix cache with symlinks by @PrakashRaj-GK in #2893
  • chore(CI): Add caching for bazel in github workflows by @PrakashRaj-GK in #2888
  • chore(Java): Update java quickstart doc, for note register order-sensitive by @monk in
    #2837
  • docs(rust): remove redundant doc for shared reference by @chaokunyang in #2879
  • chore(rust): fix tuple test comment by @chaokunyang in #2877
  • docs: fix broken table in in java_serialization_guide.md by @mosinnik in #2876

Full Changelog: v0.13.1...v0.13.2

v0.13.2-rc1

30 Nov 15:23

Choose a tag to compare

v0.13.2-rc1 Pre-release
Pre-release

Highlights

  • perf(rust): use thread local to manage fory rust WriteContext/ReadContext by @chaokunyang in
    #2946
  • feat(rust): add typename to unregistered error message by @chaokunyang in #2881

Features

Bug Fix

Other Improvements

  • docs(java): add logging section by @mosinnik in #2905
  • docs: fix cargo benchmark comand in doc by @chaokunyang in #2897
  • chore: move benchmarks to separate dir to speed up ci build by @chaokunyang in
    #2894
  • chore(CI): Fix cache with symlinks by @PrakashRaj-GK in #2893
  • chore(CI): Add caching for bazel in github workflows by @PrakashRaj-GK in #2888
  • chore(Java): Update java quickstart doc, for note register order-sensitive by @monk in
    #2837
  • docs(rust): remove redundant doc for shared reference by @chaokunyang in #2879
  • chore(rust): fix tuple test comment by @chaokunyang in #2877
  • docs: fix broken table in in java_serialization_guide.md by @mosinnik in #2876

Full Changelog: v0.13.1...v0.13.2-rc1

v0.13.1

06 Nov 03:49

Choose a tag to compare

Highlights

  • Support rust enum variant and schema evolution for tuple/struct style enum
  • Support rust tuple serialization and schema evolution
  • Support rust skip macro attributes

Enum Schema Evolution

Fory v0.13.1 adds comprehensive enum schema evolution in Compatible mode, supporting all three variant types (Unit, Unnamed, Named):

  • Add/remove variants: Unknown variants fall back to #[fory(default)]
  • Add/remove fields: Named variants support field evolution with automatic defaults
  • Modify elements: Unnamed variants handle element count changes (extras skipped, missing use defaults)
  • Variant type changes: Convert between Unit/Unnamed/Named with automatic default values
// Version 1
#[derive(ForyObject)]
enum Command {
    #[fory(default)]
    Noop,
    Execute { name: String, args: i32 },
}

// Version 2 - Added field and new variant
// both `fory(default)` and standard `default` are supported
#[derive(Default, ForyObject)]
enum Command {
    #[default]
    Noop,
    Execute { name: String, args: i32, env: String },  // Added 'env'
    Cancel { reason: String },  // New variant
}

// V1→V2: Missing 'env' gets default ""; Cancel→Noop fallback in V1
// V2→V1: Extra 'env' skipped; Cancel→Noop fallback

Tuple Schema Evolution

Tuples (1-22 elements) now support length evolution in Compatible mode:

  • Length changes: Grow or shrink tuple size (missing elements get defaults, extras discarded)
  • Collections: Vec, HashMap, HashSet elements fully supported
  • Nested tuples: Multi-level nesting with independent evolution per level
  • Smart pointers: Option, Arc, Rc wrapped elements handle evolution correctly
  • Struct fields: Tuple fields in structs evolve independently
let fory = Fory::default().compatible(true);

// Serialize 2-element tuple
let short = (42i32, "hello".to_string());
let bin = fory.serialize(&short).unwrap();

// Deserialize as 4-element tuple - extras get defaults
let long: (i32, String, f64, bool) = fory.deserialize(&bin).unwrap();
assert_eq!(long, (42, "hello".to_string(), 0.0, false));

// Reverse: 4→2 elements, extras discarded
let long = (100i32, "world".to_string(), 3.14, true);
let bin = fory.serialize(&long).unwrap();
let short: (i32, String) = fory.deserialize(&bin).unwrap();
assert_eq!(short, (100, "world".to_string()));

Features

Bug Fix

Other Improvements

New Contributors

Full Changelog: v0.13.0...v0.13.1

v0.13.0

27 Oct 13:54

Choose a tag to compare

Highlights

  • Dynamic Trait Object Serialization for Rust
  • Shared/Circular ownership serialization for Rust
  • Schema Forward/Backward compatibilify for Rust
  • Drop-in Replacement for Python pickle: support local function/classes/__reduce__/__getstate__ serialization
  • Schema Forward/Backward compatibilify for Python dataclass
  • Support codegen for xlang mode in java
  • Primitive array compression using SIMD
  • Compact Row Codec for Row Format
  • Schema Forward/Backward compatibilify for Go
  • Ahead-of-time codegen for golang struct serialization

Rust: First Release Highlights

This is the first Apache Fory Rust release, delivering a complete, high‑performance serialization stack. If you build Rust services or libraries, you can now use Fory natively with strong typing, performance, and schema evolution.

  • Derive-based object graph serialization via #[derive(ForyObject)]
  • Polymorphism for trait objects: Box<dyn Trait>, Rc<dyn Trait>, Arc<dyn Trait>, plus dyn Any
  • Shared and circular reference tracking: Rc/Arc and RcWeak/ArcWeak
  • Forward/backward compatible schema evolution (Compatible mode)
  • Zero-copy Row format via #[derive(ForyRow)] with selective field access
  • Thread-safe and multi-thread capable serialization (context pool)
  • Broad collection support (e.g., VecDeque, LinkedList, BTreeMap, BTreeSet, BinaryHeap)

Quick start (minimal example):

use fory::{Fory, Error};
use fory::ForyObject;

#[derive(ForyObject, Debug, PartialEq)]
struct User {
	name: String,
	age: i32,
	email: String,
}

fn main() -> Result<(), Error> {
	let mut fory = Fory::default();
	fory.register::<User>(1)?;

	let user = User { name: "Alice".into(), age: 30, email: "[email protected]".into() };
	let bytes = fory.serialize(&user)?;
	let decoded: User = fory.deserialize(&bytes)?;
	assert_eq!(user, decoded);
	Ok(())
}

Rust Benchmarks

ecommerce_data system_data

Below are serialize throughput results (TPS; higher is better) comparing Fory with JSON and Protobuf across multiple datasets and sizes.

Datatype Size Operation Fory TPS JSON TPS Protobuf TPS Fastest
company small serialize 10,063,906 761,673 896,620 fory
company medium serialize 412,507 33,835 37,590 fory
company large serialize 9,183 793 880 fory
ecommerce_data small serialize 2,350,729 206,262 256,970 fory
ecommerce_data medium serialize 59,977 4,699 5,242 fory
ecommerce_data large serialize 3,727 266 295 fory
person small serialize 13,632,522 1,345,189 1,475,035 fory
person medium serialize 3,839,656 337,610 369,031 fory
person large serialize 907,853 79,631 91,408 fory
simple_list small serialize 27,726,945 4,874,957 4,643,172 fory
simple_list medium serialize 4,770,765 401,558 397,551 fory
simple_list large serialize 606,061 41,061 44,565 fory
simple_map small serialize 22,862,369 3,888,025 2,695,999 fory
simple_map medium serialize 2,128,973 204,319 193,132 fory
simple_map large serialize 177,847 18,419 18,668 fory
simple_struct small serialize 35,729,598 10,167,045 8,633,342 fory
simple_struct medium serialize 34,988,279 9,737,098 6,433,350 fory
simple_struct large serialize 31,801,558 4,545,041 7,420,049 fory
system_data small serialize 5,382,131 468,033 569,930 fory
system_data medium serialize 174,240 11,896 14,753 fory
system_data large serialize 10,671 876 1,040 fory

Note: Results depend on hardware, dataset, and implementation versions. See the Rust guide for how to run benchmarks yourself: https://github.com/apache/fory/blob/main/rust/benches/README.md

Python: Drop‑in Replacement for pickle

pyfory now acts as a high‑performance drop‑in replacement for pickle/cloudpickle, while keeping the same simple API and adding security and performance features.

  • Serialize any Python object in Python‑native mode (xlang=False): global/local functions, lambdas, global/local classes, instance/class/static methods
  • Honors Python hooks: __getstate__, __setstate__, __reduce__, __reduce_ex__
  • Reference tracking for shared/circular graphs with ref=True
  • Pickle protocol 5 out‑of‑band buffers for zero‑copy via pickle.PickleBuffer (NumPy, Pandas, etc.)
  • Security: strict=True for registration‑based safety and DeserializationPolicy for fine‑grained control
  • Threading: ThreadSafeFory for safe multi‑thread use
  • Familiar API: dumps/loads are aliases of serialize/deserialize

Quick start:

import pyfory

# Drop-in replacement for pickle/cloudpickle
fory = pyfory.Fory(xlang=False, ref=True, strict=False)

def make_multiplier(k):
	def mul(x):
		return k * x
	return mul

binary = fory.dumps(make_multiplier(10))
assert fory.loads(binary)(3) == 30

Read more: Python Guide – https://fory.apache.org/docs/latest/python_serialization/

Features

  • feat(java): support object stream serialization for graalvm by @chaokunyang in #2464
  • refactor(java): rename abstract collection/map serializers to Map/ListLikeSerializer by @chaokunyang in #2466
  • feat(memory): add customizable MemoryAllocator interface by @adriacabeza in #2467
  • feat: Chain wheel test/build and release workflows by @esafak in #2483
  • feat(python): set default languge to python for pyfory by @chaokunyang in #2490
  • feat(python): add register api to python by @chaokunyang in #2491
  • feat(python): meta compression for python by @chaokunyang in #2504
  • feat(python): type meta encoding for python by @chaokunyang in #2509
  • feat(CI): Cache npm, add node 24, lock file by @esafak in #2523
  • feat(Rust): Implementing Type Compatible by @urlyy in #2492
  • feat(Rust): support Option in MetaFieldType se/de by @urlyy in #2528
  • feat(rust): support skipping fields bytes when deserializing in compatible mode by @urlyy in #2545
  • feat(go): add type meta encoding for meta share by @junjiexh in #2554
  • feat(Rust): Support automatic conversion between T and Option<T> when deserialize by @urlyy in #2563
  • feat(java): bean encoder implemented interfaces honor @Ignore by @stevenschlansker in #2576
  • refactor(java): refactor fory java exception hierarchical structure by @chaokunyang in #2577
  • feat(Go): Implement ahead of time codegen for fory-go serialization by @ThisingL in #2553
  • feat(java): support limit deserialization depth by @chaokunyang in #2578
  • feat(rust): add fory rust benchmark by @chaokunyang in #2583
  • perf(rust): optimize rust deserialize perf by @chaokunyang in #2584
  • feat(rust): add rust profiler for serialization by @chaokunyang in #2588
  • refactor(go): rename FieldInfo to FieldDef to avoide name collision by @junjiexh in #2594
  • feat(python): meta share mode for pyfory compatible serialization by @chaokunyang in #2593
  • feat(java/python): align java and python compatible mode serialization by @chaokunyang in #2602
  • feat(java/python): support enum xlang serialization by @chaokunyang in #2603
  • feat(Rust): support basic type se/de aligned with java by @urlyy in #2585
  • perf(python/java): Fix & optimize cross-language meta-share mode by @pandalee99 in #2601
  • feat(go): align cross-language type serialization for primitive arrays by @pandalee99 in #2610
  • feat(java): support codegen for xlang mode in java by @chaokunyang in #2613
  • feat(java): primitive array compression using SIMD by @adriacabeza in #2485
  • refactor(go): Replace globalTypeResolver with factory-based serializer registration by @ThisingL in #2615
  • feat(go): Implement compatible mode with metashare mode by @junjiexh in #2607
  • feat(java): suppo...
Read more

v0.13.0-rc2

27 Oct 13:50

Choose a tag to compare

v0.13.0-rc2 Pre-release
Pre-release

Highlights

  • Dynamic Trait Object Serialization for Rust
  • Shared/Circular ownership serialization for Rust
  • Schema Forward/Backward compatibilify for Rust
  • Drop-in Replacement for Python pickle: support local function/classes/__reduce__/__getstate__ serialization
  • Schema Forward/Backward compatibilify for Python dataclass
  • Support codegen for xlang mode in java
  • Primitive array compression using SIMD
  • Compact Row Codec for Row Format
  • Schema Forward/Backward compatibilify for Go
  • Ahead-of-time codegen for golang struct serialization

Features

  • feat(java): support object stream serialization for graalvm by @chaokunyang in #2464
  • refactor(java): rename abstract collection/map serializers to Map/ListLikeSerializer by @chaokunyang in #2466
  • feat(memory): add customizable MemoryAllocator interface by @adriacabeza in #2467
  • feat: Chain wheel test/build and release workflows by @esafak in #2483
  • feat(python): set default languge to python for pyfory by @chaokunyang in #2490
  • feat(python): add register api to python by @chaokunyang in #2491
  • feat(python): meta compression for python by @chaokunyang in #2504
  • feat(python): type meta encoding for python by @chaokunyang in #2509
  • feat(CI): Cache npm, add node 24, lock file by @esafak in #2523
  • feat(Rust): Implementing Type Compatible by @urlyy in #2492
  • feat(Rust): support Option in MetaFieldType se/de by @urlyy in #2528
  • feat(rust): support skipping fields bytes when deserializing in compatible mode by @urlyy in #2545
  • feat(go): add type meta encoding for meta share by @junjiexh in #2554
  • feat(Rust): Support automatic conversion between T and Option when deserialize by @urlyy in #2563
  • feat(java): bean encoder implemented interfaces honor @Ignore by @stevenschlansker in #2576
  • refactor(java): refactor fory java exception hierarchical structure by @chaokunyang in #2577
  • feat(Go): Implement ahead of time codegen for fory-go serialization by @ThisingL in #2553
  • feat(java): support limit deserialization depth by @chaokunyang in #2578
  • feat(rust): add fory rust benchmark by @chaokunyang in #2583
  • perf(rust): optimize rust deserialize perf by @chaokunyang in #2584
  • feat(rust): add rust profiler for serialization by @chaokunyang in #2588
  • refactor(go): rename FieldInfo to FieldDef to avoide name collision by @junjiexh in #2594
  • feat(python): meta share mode for pyfory compatible serialization by @chaokunyang in #2593
  • feat(java/python): align java and python compatible mode serialization by @chaokunyang in #2602
  • feat(java/python): support enum xlang serialization by @chaokunyang in #2603
  • feat(Rust): support basic type se/de aligned with java by @urlyy in #2585
  • perf(python/java): Fix & optimize cross-language meta-share mode by @pandalee99 in #2601
  • feat(go): align cross-language type serialization for primitive arrays by @pandalee99 in #2610
  • feat(java): support codegen for xlang mode in java by @chaokunyang in #2613
  • feat(java): primitive array compression using SIMD by @adriacabeza in #2485
  • refactor(go): Replace globalTypeResolver with factory-based serializer registration by @ThisingL in #2615
  • feat(go): Implement compatible mode with metashare mode by @junjiexh in #2607
  • feat(java): support concurent map serialization when being updated by @chaokunyang in #2617
  • feat(java): support concurrent updates when serializing collections by @chaokunyang in #2623
  • feat(python): support limit pyfory depth by @chaokunyang in #2625
  • feat(Rust): sort fields && feat Enum && fix read/write type_info && fix type_meta en/decode by @urlyy in #2630
  • feat(python): drop-in replacement for pickle serialization by @chaokunyang in #2629
  • refactor(java): refactor type resolver by @chaokunyang in #2640
  • feat(java): support type converters for comaptible mode by @chaokunyang in #2641
  • refactor(java/python): refine collection header bitmap by @chaokunyang in #2642
  • feat(go): metashare mode support collection and map and nested object by @junjiexh in #2643
  • feat(go): Add slice and map support to fory-go codegen serialization by @ThisingL in #2638
  • refactor(go): Change codegen annotation from //fory:gen to //fory:generate by @ThisingL in #2648
  • feat(rust): support Map and register_by_name by @urlyy in #2649
  • feat(java): support graalvm 25 by @chaokunyang in #2652
  • feat(java): support deserialize not registered/exsited class/fields for xlang compatible mode by @chaokunyang in #2655
  • refactor(Rust): Refactor compile-time code & fix named_enum & fix skip enum by @urlyy in #2657
  • feat(python): support local py class serialization by @chaokunyang in #2665
  • refactor(go): refine collection header bitmap by @junjiexh in #2656
  • feat(python): support class methods serialization by @chaokunyang in #2670
  • refactor(go): refine collection header bitmap in codegen by @ThisingL in #2676
  • feat(rust): support box serde for rust by @chaokunyang in #2677
  • feat(rust): support reference tracking for rust Rc/Arc by @chaokunyang in #2678
  • feat(python): refine python serialization api by @chaokunyang in #2673
  • refactor(Rust): Refine api name by @urlyy in #2671
  • feat(rust): support rust dyn trait object serialization by @chaokunyang in #2691
  • feat(rust): support dyn any trait object serialization for box/arc/rc by @chaokunyang in #2704
  • feat(rust): support shared reference tracking for arc/rc by @chaokunyang in #2707
  • feat(rust): avoid downcast method of multiple trait objects in same module conflict by @chaokunyang in #2708
  • feat(rust): add deref to arc/rc wrapper by @chaokunyang in #2709
  • refactor(rust): unify rc/arc wrapper macro arms into one function by @chaokunyang in #2711
  • perf(Rust): Use SIMD to se/de string by @urlyy in #2716
  • feat(Rust): named_xx se/de && ext se/de && add unittest by @urlyy in #2712
  • feat(rust): support RcWeak/ArcWeak for circular reference tracking by @chaokunyang in #2714
  • feat(rust): support limit max dyn depth by @chaokunyang in #2730
  • feat(Rust): Unroll fields loop & Add a feature for this by @urlyy in #2724
  • feat(python): make fory out-of-band serialization compatible with pickle5 by @chaokunyang in #2732
  • refactor(go): Replace legacy RegisterTagType api call by @junjiexh in #2696
  • feat(python): add thread safe fory by @chaokunyang in #2735
  • feat(rust): support VecDeque/LinkedList serialization by @chaokunyang in #2741
  • feat(rust): support btreemap serialization by @chaokunyang in #2743
  • feat(rust): support btree set and binary heap serialization by @chaokunyang in #2744
  • feat(Rust): support context_pool to reduce context allocation && support se/de in multi-thread by @urlyy in #2737
  • feat(ci): cache Bazel binary in Python CI workflow by @SanyamSuyal in #2745
  • feat(rust): rewrite fory derive macro for smaller and faster generated code using compile-time fields sort algorithm by @chaokunyang in #2749
  • feat(ci): add maven cache to ci for faster build by @chaokunyang in #2751
  • feat(rust): fast fory_read_compatible macro to use match by assigned field id by @chaokunyang in #2758
  • refactor(rust): use compatible bool instead of enum to simplify API by @chaokunyang in #2763
  • feat(rust): query type meta from parsed cach...
Read more

v0.13.0-rc1

21 Oct 10:56

Choose a tag to compare

v0.13.0-rc1 Pre-release
Pre-release

Highlights

  • Dynamic Trait Object Serialization for Rust
  • Shared/Circular ownership serialization for Rust
  • Schema Forward/Backward compatibilify for Rust
  • Drop-in Replacement for Python pickle: support local function/classes/__reduce__/__getstate__ serialization
  • Schema Forward/Backward compatibilify for Python dataclass
  • Support codegen for xlang mode in java
  • Primitive array compression using SIMD
  • Compact Row Codec for Row Format
  • Schema Forward/Backward compatibilify for Go
  • Ahead-of-time codegen for golang struct serialization

Features

  • feat(java): support object stream serialization for graalvm by @chaokunyang in #2464
  • refactor(java): rename abstract collection/map serializers to Map/ListLikeSerializer by @chaokunyang in #2466
  • feat(memory): add customizable MemoryAllocator interface by @adriacabeza in #2467
  • feat: Chain wheel test/build and release workflows by @esafak in #2483
  • feat(python): set default languge to python for pyfory by @chaokunyang in #2490
  • feat(python): add register api to python by @chaokunyang in #2491
  • feat(python): meta compression for python by @chaokunyang in #2504
  • feat(python): type meta encoding for python by @chaokunyang in #2509
  • feat(CI): Cache npm, add node 24, lock file by @esafak in #2523
  • feat(Rust): Implementing Type Compatible by @urlyy in #2492
  • feat(Rust): support Option in MetaFieldType se/de by @urlyy in #2528
  • feat(rust): support skipping fields bytes when deserializing in compatible mode by @urlyy in #2545
  • feat(go): add type meta encoding for meta share by @junjiexh in #2554
  • feat(Rust): Support automatic conversion between T and Option when deserialize by @urlyy in #2563
  • feat(java): bean encoder implemented interfaces honor @Ignore by @stevenschlansker in #2576
  • refactor(java): refactor fory java exception hierarchical structure by @chaokunyang in #2577
  • feat(Go): Implement ahead of time codegen for fory-go serialization by @ThisingL in #2553
  • feat(java): support limit deserialization depth by @chaokunyang in #2578
  • feat(rust): add fory rust benchmark by @chaokunyang in #2583
  • perf(rust): optimize rust deserialize perf by @chaokunyang in #2584
  • feat(rust): add rust profiler for serialization by @chaokunyang in #2588
  • refactor(go): rename FieldInfo to FieldDef to avoide name collision by @junjiexh in #2594
  • feat(python): meta share mode for pyfory compatible serialization by @chaokunyang in #2593
  • feat(java/python): align java and python compatible mode serialization by @chaokunyang in #2602
  • feat(java/python): support enum xlang serialization by @chaokunyang in #2603
  • feat(Rust): support basic type se/de aligned with java by @urlyy in #2585
  • perf(python/java): Fix & optimize cross-language meta-share mode by @pandalee99 in #2601
  • feat(go): align cross-language type serialization for primitive arrays by @pandalee99 in #2610
  • feat(java): support codegen for xlang mode in java by @chaokunyang in #2613
  • feat(java): primitive array compression using SIMD by @adriacabeza in #2485
  • refactor(go): Replace globalTypeResolver with factory-based serializer registration by @ThisingL in #2615
  • feat(go): Implement compatible mode with metashare mode by @junjiexh in #2607
  • feat(java): support concurent map serialization when being updated by @chaokunyang in #2617
  • feat(java): support concurrent updates when serializing collections by @chaokunyang in #2623
  • feat(python): support limit pyfory depth by @chaokunyang in #2625
  • feat(Rust): sort fields && feat Enum && fix read/write type_info && fix type_meta en/decode by @urlyy in #2630
  • feat(python): drop-in replacement for pickle serialization by @chaokunyang in #2629
  • refactor(java): refactor type resolver by @chaokunyang in #2640
  • feat(java): support type converters for comaptible mode by @chaokunyang in #2641
  • refactor(java/python): refine collection header bitmap by @chaokunyang in #2642
  • feat(go): metashare mode support collection and map and nested object by @junjiexh in #2643
  • feat(go): Add slice and map support to fory-go codegen serialization by @ThisingL in #2638
  • refactor(go): Change codegen annotation from //fory:gen to //fory:generate by @ThisingL in #2648
  • feat(rust): support Map and register_by_name by @urlyy in #2649
  • feat(java): support graalvm 25 by @chaokunyang in #2652
  • feat(java): support deserialize not registered/exsited class/fields for xlang compatible mode by @chaokunyang in #2655
  • refactor(Rust): Refactor compile-time code & fix named_enum & fix skip enum by @urlyy in #2657
  • feat(python): support local py class serialization by @chaokunyang in #2665
  • refactor(go): refine collection header bitmap by @junjiexh in #2656
  • feat(python): support class methods serialization by @chaokunyang in #2670
  • refactor(go): refine collection header bitmap in codegen by @ThisingL in #2676
  • feat(rust): support box serde for rust by @chaokunyang in #2677
  • feat(rust): support reference tracking for rust Rc/Arc by @chaokunyang in #2678
  • feat(python): refine python serialization api by @chaokunyang in #2673
  • refactor(Rust): Refine api name by @urlyy in #2671
  • feat(rust): support rust dyn trait object serialization by @chaokunyang in #2691
  • feat(rust): support dyn any trait object serialization for box/arc/rc by @chaokunyang in #2704
  • feat(rust): support shared reference tracking for arc/rc by @chaokunyang in #2707
  • feat(rust): avoid downcast method of multiple trait objects in same module conflict by @chaokunyang in #2708
  • feat(rust): add deref to arc/rc wrapper by @chaokunyang in #2709
  • refactor(rust): unify rc/arc wrapper macro arms into one function by @chaokunyang in #2711
  • perf(Rust): Use SIMD to se/de string by @urlyy in #2716
  • feat(Rust): named_xx se/de && ext se/de && add unittest by @urlyy in #2712
  • feat(rust): support RcWeak/ArcWeak for circular reference tracking by @chaokunyang in #2714
  • feat(rust): support limit max dyn depth by @chaokunyang in #2730
  • feat(Rust): Unroll fields loop & Add a feature for this by @urlyy in #2724
  • feat(python): make fory out-of-band serialization compatible with pickle5 by @chaokunyang in #2732
  • refactor(go): Replace legacy RegisterTagType api call by @junjiexh in #2696
  • feat(python): add thread safe fory by @chaokunyang in #2735
  • feat(rust): support VecDeque/LinkedList serialization by @chaokunyang in #2741
  • feat(rust): support btreemap serialization by @chaokunyang in #2743
  • feat(rust): support btree set and binary heap serialization by @chaokunyang in #2744
  • feat(Rust): support context_pool to reduce context allocation && support se/de in multi-thread by @urlyy in #2737
  • feat(ci): cache Bazel binary in Python CI workflow by @SanyamSuyal in #2745
  • feat(rust): rewrite fory derive macro for smaller and faster generated code using compile-time fields sort algorithm by @chaokunyang in #2749
  • feat(ci): add maven cache to ci for faster build by @chaokunyang in #2751
  • feat(rust): fast fory_read_compatible macro to use match by assigned field id by @chaokunyang in #2758
  • refactor(rust): use compatible bool instead of enum to simplify API by @chaokunyang in #2763
  • feat(rust): query type meta from parsed cach...
Read more