Releases: apache/fory
v0.13.0
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>, plusdyn Any - Shared and circular reference tracking:
Rc/ArcandRcWeak/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: "alice@example.com".into() };
let bytes = fory.serialize(&user)?;
let decoded: User = fory.deserialize(&bytes)?;
assert_eq!(user, decoded);
Ok(())
}- Guide: Rust Serialization – https://fory.apache.org/docs/docs/guide/rust_serialization
- Crate: fory on crates.io – https://crates.io/crates/fory
- API docs: docs.rs – https://docs.rs/fory/latest/fory
Rust Benchmarks
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=Truefor registration‑based safety andDeserializationPolicyfor fine‑grained control - Threading:
ThreadSafeForyfor safe multi‑thread use - Familiar API:
dumps/loadsare aliases ofserialize/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) == 30Read 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
@Ignoreby @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...
v0.13.0-rc2
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
@Ignoreby @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...
v0.13.0-rc1
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
@Ignoreby @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...
v0.12.3
Features
- feat(java): support concurent map serialization when being updated by @chaokunyang in #2617
- feat(python): support limit pyfory depth by @chaokunyang in #2625
- feat(python): drop-in replacement for pickle serialization by @chaokunyang in #2629
Bug Fixes
- fix(java): fix get nested genericType for codegen by @chaokunyang in #2632
Full Changelog: v0.12.2...v0.12.3
v0.12.2
Features
- feat(java): bean encoder implemented interfaces honor
@Ignoreby @stevenschlansker in #2576 - feat(java): support limit deserialization depth by @chaokunyang in #2578
Bug Fixes
- fix(ci): Install pyfory for golang xlang tests by @esafak in #2561
- fix(ci): Exit with subprocess return code in run_ci.py by @esafak in #2560
- fix(java): fix codegen name conflict by @chaokunyang in #2565
- fix(java): Skip calculation of classVersionHash if checkClassVersion by @theigl in #2573
- fix(java): skip hash compute for abstract field type by @chaokunyang in #2575
- fix(java): row format buffer recycling leaves offset and size for null by @stevenschlansker in #2540
Improvements
- refactor(java): refactor fory java exception hierarchical structure by @chaokunyang in #2577
Full Changelog: v0.12.1...v0.12.2
v0.12.2-rc1
Features
- feat(java): bean encoder implemented interfaces honor
@Ignoreby @stevenschlansker in #2576 - feat(java): support limit deserialization depth by @chaokunyang in #2578
Bug Fixes
- fix(ci): Install pyfory for golang xlang tests by @esafak in #2561
- fix(ci): Exit with subprocess return code in run_ci.py by @esafak in #2560
- fix(java): fix codegen name conflict by @chaokunyang in #2565
- fix(java): Skip calculation of classVersionHash if checkClassVersion by @theigl in #2573
- fix(java): skip hash compute for abstract field type by @chaokunyang in #2575
- fix(java): row format buffer recycling leaves offset and size for null by @stevenschlansker in #2540
Improvements
- refactor(java): refactor fory java exception hierarchical structure by @chaokunyang in #2577
Full Changelog: v0.12.1...v0.12.2-rc1
v0.12.1
Features
- feat(python): set default languge to python for pyfory by @chaokunyang in #2490
- feat(python): add register api to python by @chaokunyang in #2491
Bug Fixes
- Ensure
Encoders.mapEncoderloads bean classes correctly by @stevenschlansker in #2494 - fix(java): row format generated bean types handling Optional by @stevenschlansker in #2497
- fix(java): fix addListener not releasing the lock by @open-snail in #2500
Improvements
- Improve PyPI landing page and add row-format documentation (#2498, #2499)
- Refactor python release workflow by @esafak in #2483 #2532
- chore: translate Chinese comments into English by @Asnowww in #2503
New Contributors
- @Asnowww made their first contribution in #2503
- @open-snail made their first contribution in #2500
Full Changelog: v0.12.0...v0.12.1
v0.12.1-rc1
Features
- feat(python): set default languge to python for pyfory by @chaokunyang in #2490
- feat(python): add register api to python by @chaokunyang in #2491
Bug Fixes
- Ensure
Encoders.mapEncoderloads bean classes correctly by @stevenschlansker in #2494 - fix(java): row format generated bean types handling Optional by @stevenschlansker in #2497
- fix(java): fix addListener not releasing the lock by @open-snail in #2500
Improvements
- Improve PyPI landing page and add row-format documentation (#2498, #2499)
- Refactor python release workflow by @esafak in #2483 #2532
- chore: translate Chinese comments into English by @Asnowww in #2503
New Contributors
- @Asnowww made their first contribution in #2503
- @open-snail made their first contribution in #2500
Full Changelog: v0.12.0...v0.12.1-rc1
v0.12.0
Highlights
- [Python] Support Python
__getstate__/__setstate__/__reduce__serialization protocol - [Python] Support serialize python function
- [Java] Use JDK11 for fory-format module
- [Scala] Support default value for scala case/pojo classes when deseralizing
- [Kotlin] Support default value for kotlin data classes when deserializing
Features
- refactor(python): replace Black and Flake8 with Ruff by @esafak in #2388
- refactor(python): Unify DataClassSerializer and ComplexObjectSerializer by @esafak in #2389
- refactor(python): Simplify require_pyarrow, remove undefined pytest.mark by @esafak in #2396
- feat(python): Replace usage of ComplexObjectSerializer with DataClassSerializer by @esafak in #2395
- feat(python): Add StatefulSerializer using getstate, setstate by @esafak in #2400
- feat(python): Implement ReduceSerializer for reduce support by @esafak in #2401
- feat(python): Support codegen with XLANG in DataClassSerializer by @esafak in #2405
- perf(Go/python): Type system compatibility upgrade by @pandalee99 in #2339
- feat(python): Add FunctionSerializer for function serialization by @esafak in #2404
- feat: Implement ObjectSerializer for custom objects by @esafak in #2413
- feat(scala): support scala object with default values by @chaokunyang in #2412
- refactor(java): refactor java default value support for scala/kotlin by @chaokunyang in #2415
- feat(kotlin): support default value for kotlin data class by @chaokunyang in #2416
- feat(kotlin): add cache to kotlin default value support by @chaokunyang in #2419
- refactor(ci): Migrate CI runner to Python scripts by @esafak in #2406
- feat(java): use java11 for fory-format module by @chaokunyang in #2448
- feat(python): add register api for python by @chaokunyang in #2451
- feat(java): add graalvm 23 ci by @chaokunyang in #2463
Bug Fix
- fix: tidy up issues in scala_guide.md by @pjfanning in #2374
- fix(java): ClassDef header calculation error by @LiangliangSui in #2382
- ci(python): Build manylinux_2_28 wheels using auditwheel by @esafak in #2381
- fix: Correct pyarrow installation check and add bazel troubleshooting by @esafak in #2418
- fix(go): fix type writing and reading logic in slice by @lzaeh in #2427
- fix(rust): fix rust lint error by @chaokunyang in #2447
- fix(java): crash when map only contains null value by @LouisLou2 in #2444
- fix(java): MemoryBuffer::readChars by @LouisLou2 in #2438
- fix(java): fix java deploy with different java versions by @chaokunyang in #2449
- fix(java): fix install jdks by @chaokunyang in #2450
- fix(java): fix maven deploy by @chaokunyang in #2452
- fix(java): fix shade janino duplciate entry by @chaokunyang in #2453
- fix(java): fix extension java module conflict by @chaokunyang in #2455
- fix(java): fix extension java module conflict by @chaokunyang in #2456
- fix(java): fix decode classdef for abstract classes by @chaokunyang in #2462
- fix(python): fix pyfory pypi release (#2473) by @chaokunyang in #2474
- fix(python): fix py releases macos13 by @chaokunyang in #2479
Other Improvements
- chore(Scala): upgrade sbt and plugins by @pjfanning in #2379
- chore(python): add more comprehensive test parameters by @pandalee99 in #2377
- chore(Scala): remove var that can be mutated by @pjfanning in #2385
- chore(Scala): add test for Scala 3 enum by @pjfanning in #2386
- chore(Scala): use setup-sbt CI action by @pjfanning in #2387
- chore(Scala): refactor scala test so it asserts something by @pjfanning in #2390
- chore(Scala): Create DurationTest.scala by @pjfanning in #2394
- chore(Java): handle deserialization scenario that currently throws an IndexOutOfBoundsException by @pjfanning in #2399
- chore: bump release version to 0.11.2 by @pandalee99 in #2403
- chore(deps): bump org.apache.commons:commons-lang3 from 3.12.0 to 3.18.0 in /java/fory-test-core by @dependabot[bot] in #2408
- chore(docs): Fix the names of some documents by @pandalee99 in #2411
- chore(cpp): fix duplicate copyright by @co63oc in #2426
- docs: fix ruff command by @co63oc in #2425
- chore: fix typos by @co63oc in #2424
- chore(dart): fix typos by @co63oc in #2428
- chore: fix typos by @co63oc in #2429
- chore: remove incubating by @chaokunyang in #2431
- chore: fix typos by @co63oc in #2433
- chore: fix typos by @co63oc in #2436
- chore: translate comments by @co63oc in #2442
- chore(python): add execute doc for cross langauge tests in python by @chaokunyang in #2420
- chore(java): arrow 18.3.0 by @stevenschlansker in #2458
- chore: prepare commits for releases-0.12 by @chaokunyang in #2470
- chore(python): disable import format warning by @chaokunyang in #2477
New Contributors
Full Changelog: v0.11.2...v0.12.0
v0.12.0-rc1
Highlights
- [Python] Support Python
__getstate__/__setstate__/__reduce__serialization protocol - [Python] Support serialize python function
- [Java] Use JDK11 for fory-format module
- [Scala]Support default value for scala case/pojo classes when deseralizing
- [Kotlin] Support default value for kotlin data classes when deserializing
Features
- refactor(python): replace Black and Flake8 with Ruff by @esafak in #2388
- refactor(python): Unify DataClassSerializer and ComplexObjectSerializer by @esafak in #2389
- refactor(python): Simplify require_pyarrow, remove undefined pytest.mark by @esafak in #2396
- feat(python): Replace usage of ComplexObjectSerializer with DataClassSerializer by @esafak in #2395
- feat(python): Add StatefulSerializer using getstate, setstate by @esafak in #2400
- feat(python): Implement ReduceSerializer for reduce support by @esafak in #2401
- feat(python): Support codegen with XLANG in DataClassSerializer by @esafak in #2405
- perf(Go/python): Type system compatibility upgrade by @pandalee99 in #2339
- feat(python): Add FunctionSerializer for function serialization by @esafak in #2404
- feat: Implement ObjectSerializer for custom objects by @esafak in #2413
- feat(scala): support scala object with default values by @chaokunyang in #2412
- refactor(java): refactor java default value support for scala/kotlin by @chaokunyang in #2415
- feat(kotlin): support default value for kotlin data class by @chaokunyang in #2416
- feat(kotlin): add cache to kotlin default value support by @chaokunyang in #2419
- refactor(ci): Migrate CI runner to Python scripts by @esafak in #2406
- feat(java): use java11 for fory-format module by @chaokunyang in #2448
- feat(python): add register api for python by @chaokunyang in #2451
- feat(java): add graalvm 23 ci by @chaokunyang in #2463
Bug Fix
- fix: tidy up issues in scala_guide.md by @pjfanning in #2374
- fix(java): ClassDef header calculation error by @LiangliangSui in #2382
- ci(python): Build manylinux_2_28 wheels using auditwheel by @esafak in #2381
- fix: Correct pyarrow installation check and add bazel troubleshooting by @esafak in #2418
- fix(go): fix type writing and reading logic in slice by @lzaeh in #2427
- fix(rust): fix rust lint error by @chaokunyang in #2447
- fix(java): crash when map only contains null value by @LouisLou2 in #2444
- fix(java): MemoryBuffer::readChars by @LouisLou2 in #2438
- fix(java): fix java deploy with different java versions by @chaokunyang in #2449
- fix(java): fix install jdks by @chaokunyang in #2450
- fix(java): fix maven deploy by @chaokunyang in #2452
- fix(java): fix shade janino duplciate entry by @chaokunyang in #2453
- fix(java): fix extension java module conflict by @chaokunyang in #2455
- fix(java): fix extension java module conflict by @chaokunyang in #2456
- fix(java): fix decode classdef for abstract classes by @chaokunyang in #2462
- fix(python): fix pyfory pypi release (#2473) by @chaokunyang in #2474
- fix(python): fix py releases macos13 by @chaokunyang in #2479
Other Improvements
- chore(Scala): upgrade sbt and plugins by @pjfanning in #2379
- chore(python): add more comprehensive test parameters by @pandalee99 in #2377
- chore(Scala): remove var that can be mutated by @pjfanning in #2385
- chore(Scala): add test for Scala 3 enum by @pjfanning in #2386
- chore(Scala): use setup-sbt CI action by @pjfanning in #2387
- chore(Scala): refactor scala test so it asserts something by @pjfanning in #2390
- chore(Scala): Create DurationTest.scala by @pjfanning in #2394
- chore(Java): handle deserialization scenario that currently throws an IndexOutOfBoundsException by @pjfanning in #2399
- chore: bump release version to 0.11.2 by @pandalee99 in #2403
- chore(deps): bump org.apache.commons:commons-lang3 from 3.12.0 to 3.18.0 in /java/fory-test-core by @dependabot[bot] in #2408
- chore(docs): Fix the names of some documents by @pandalee99 in #2411
- chore(cpp): fix duplicate copyright by @co63oc in #2426
- docs: fix ruff command by @co63oc in #2425
- chore: fix typos by @co63oc in #2424
- chore(dart): fix typos by @co63oc in #2428
- chore: fix typos by @co63oc in #2429
- chore: remove incubating by @chaokunyang in #2431
- chore: fix typos by @co63oc in #2433
- chore: fix typos by @co63oc in #2436
- chore: translate comments by @co63oc in #2442
- chore(python): add execute doc for cross langauge tests in python by @chaokunyang in #2420
- chore(java): arrow 18.3.0 by @stevenschlansker in #2458
- chore: prepare commits for releases-0.12 by @chaokunyang in #2470
- chore(python): disable import format warning by @chaokunyang in #2477
New Contributors
Full Changelog: v0.11.2...v0.12.0-rc1