This is an automated email from the ASF dual-hosted git repository. chaokunyang pushed a commit to branch release_1.4.0 in repository https://gitbox.apache.org/repos/asf/fory-site.git
commit 9816bf04e861a7e90a55c4ef6588de64f14477ac Author: chaokunyang <[email protected]> AuthorDate: Mon Jul 20 12:05:33 2026 +0800 Prepare Fory 1.4.0 English release content --- blog/2026-07-20-fory_1_4_0_released.md | 150 +++++++++++++++++++++++ docs/introduction/features.md | 210 -------------------------------- docs/start/install.md | 32 ++--- src/components/home/HomepageLanding.tsx | 18 +-- src/pages/download/index.md | 10 +- 5 files changed, 180 insertions(+), 240 deletions(-) diff --git a/blog/2026-07-20-fory_1_4_0_released.md b/blog/2026-07-20-fory_1_4_0_released.md new file mode 100644 index 0000000000..350a032da0 --- /dev/null +++ b/blog/2026-07-20-fory_1_4_0_released.md @@ -0,0 +1,150 @@ +--- +slug: fory_1_4_0_release +title: Fory v1.4.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.4.0 release. This release includes [65 PRs](https://github.com/apache/fory/compare/v1.3.0...v1.4.0) from 9 distinct contributors. See the [Install](https://fory.apache.org/docs/start/install) page to get the libraries for your platform. + +## Highlights + +* Introduced Fory JSON for Java, featuring high-performance code generation, rich annotations and mix-ins, dynamic properties, and support for Android and GraalVM native images. +* Improved performance, safety, and compatibility with a configurable container memory budget, more efficient stream deserialization, Python 3.14 support, and numerous cross-runtime fixes. + +## Fory JSON for Java + +Fory 1.4.0 introduces Fory JSON, a high-performance, thread-safe JSON serialization framework for Java applications. It provides direct mapping between standard JSON and idiomatic Java domain objects, making it suitable for HTTP APIs, browser traffic, logs, configuration, and other interoperable text payloads. + +Its main capabilities include: + +* **High-performance serialization:** optimized readers and writers work with interpreted and runtime-generated serializers to accelerate both JSON encoding and decoding. +* **Rich Java object mapping:** ordinary classes, Java records, immutable creator-based classes, common JDK types, and generic containers are supported. +* **Flexible customization:** annotations, mix-ins, and custom codecs adapt application types to JSON, covering property names, order, inclusion, creators, polymorphism, unwrapped values, dynamic properties, and specialized representations. +* **Broad platform support:** supports JDK 8 and later, Android, and GraalVM native images. + +Add the `fory-json` artifact to your application: + +```xml +<dependency> + <groupId>org.apache.fory</groupId> + <artifactId>fory-json</artifactId> + <version>1.4.0</version> +</dependency> +``` + +`ForyJson` is immutable and thread-safe after construction, so one instance can be reused across threads: + +```java +import org.apache.fory.json.ForyJson; + +public final class JsonExample { + private static final ForyJson JSON = ForyJson.builder().build(); + + public static final class User { + public long id; + public String name; + + public User() {} + } + + public static void main(String[] args) { + User user = new User(); + user.id = 7; + user.name = "Alice"; + + // Serialize to JSON text and deserialize from text. + String text = JSON.toJson(user); + User fromText = JSON.fromJson(text, User.class); + + // Serialize directly to UTF-8 bytes and deserialize without an intermediate String. + byte[] utf8 = JSON.toJsonBytes(user); + User fromUtf8 = JSON.fromJson(utf8, User.class); + } +} +``` + +See the [Fory JSON documentation](/docs/guide/java/json-support) for the complete type model, annotations and mix-ins, dynamic properties, custom serializers, security controls, and Android or GraalVM setup. + +## Features + +* feat(java): direct static varhandle field accessors by @chaokunyang in https://github.com/apache/fory/pull/3778 +* feat(python): add Python 3.14 CI and wheels by @chaokunyang in https://github.com/apache/fory/pull/3781 +* feat(java): add fory json serialization by @chaokunyang in https://github.com/apache/fory/pull/3784 +* feat(java): optimize java serialization perf by @chaokunyang in https://github.com/apache/fory/pull/3794 +* feat(format): support custom codecs keyed on Optional by @stevenschlansker in https://github.com/apache/fory/pull/3800 +* feat(java): refine java json serde by @chaokunyang in https://github.com/apache/fory/pull/3806 +* perf(java): avoid quadratic buffer growth in stream deserialization by @temni in https://github.com/apache/fory/pull/3809 +* ci(swift): enforce swift-format by @chaokunyang in https://github.com/apache/fory/pull/3812 +* ci: reuse cached Swift build artifacts by @chaokunyang in https://github.com/apache/fory/pull/3811 +* refactor(go): remove static codegen by @chaokunyang in https://github.com/apache/fory/pull/3815 +* feat: add container memory budget by @chaokunyang in https://github.com/apache/fory/pull/3795 +* feat(java): add once logging APIs by @chaokunyang in https://github.com/apache/fory/pull/3821 +* perf(java): optimize java json serde performance by @chaokunyang in https://github.com/apache/fory/pull/3808 +* feat(java): add async codegen for Fory JSON by @chaokunyang in https://github.com/apache/fory/pull/3825 +* feat(java): add json type checker by @chaokunyang in https://github.com/apache/fory/pull/3829 +* feat(java): refactor json codec api by @chaokunyang in https://github.com/apache/fory/pull/3830 +* perf(java): optimize json serialize perf by @chaokunyang in https://github.com/apache/fory/pull/3834 +* feat(java): add fory json annotations by @chaokunyang in https://github.com/apache/fory/pull/3835 +* feat(compiler): handle C++ identifier escaping and name collisions by @BaldDemian in https://github.com/apache/fory/pull/3839 +* feat(java): enhance class check by @chaokunyang in https://github.com/apache/fory/pull/3837 +* feat(java): add json property order annotation by @chaokunyang in https://github.com/apache/fory/pull/3840 +* feat(json): support dynamic object properties by @chaokunyang in https://github.com/apache/fory/pull/3841 +* refactor(java): simplify JSON subtype member writing by @chaokunyang in https://github.com/apache/fory/pull/3842 +* feat(java): add JSON codec annotation by @chaokunyang in https://github.com/apache/fory/pull/3844 +* refactor(java): embed GraalVM feature in core by @chaokunyang in https://github.com/apache/fory/pull/3845 +* feat(java): support Fory JSON in GraalVM native image by @chaokunyang in https://github.com/apache/fory/pull/3846 +* feat(java): make DefaultJdkClassAllowList public by @eryanwcp in https://github.com/apache/fory/pull/3849 +* feat(java): update AllowListChecker to include checks against disallowed and allowed class lists by @eryanwcp in https://github.com/apache/fory/pull/3850 +* feat(java): support Fory JSON on Android by @chaokunyang in https://github.com/apache/fory/pull/3852 +* refactor(java): simplify json codec annotations by @chaokunyang in https://github.com/apache/fory/pull/3854 +* feat(java): add json value annotations by @chaokunyang in https://github.com/apache/fory/pull/3855 +* feat(java): generate JSON object/record codecs helper for android by @chaokunyang in https://github.com/apache/fory/pull/3857 +* feat(java): support JSON unwrapped properties by @chaokunyang in https://github.com/apache/fory/pull/3856 +* feat(java): add Json object field cache by @chaokunyang in https://github.com/apache/fory/pull/3862 +* feat(java): add json mixin support by @chaokunyang in https://github.com/apache/fory/pull/3863 +* feat(java): add abstract json value codec by @chaokunyang in https://github.com/apache/fory/pull/3865 +* perf(java): fix json perf regression by @chaokunyang in https://github.com/apache/fory/pull/3866 + +## Bug Fix + +* fix(java): log ForyBuilder advisories at info level by @chaokunyang in https://github.com/apache/fory/pull/3777 +* fix(java): fix unbounded LinkedBlockingQueue deserialization by @00sense in https://github.com/apache/fory/pull/3786 +* fix(ci): checkstyle CI error output by @stevenschlansker in https://github.com/apache/fory/pull/3796 +* fix(c++): replace deprecated std::aligned_storage by @RisinT96 in https://github.com/apache/fory/pull/3793 +* fix(c++): make temporal types hashable by @BaldDemian in https://github.com/apache/fory/pull/3789 +* fix(java): add JDK25 trusted lookup Unsafe fallback by @chaokunyang in https://github.com/apache/fory/pull/3802 +* fix(compiler): reject any, message and union as map key types by @BaldDemian in https://github.com/apache/fory/pull/3804 +* fix(java): fix collection get element type bug by @Pigsy-Monk in https://github.com/apache/fory/pull/3803 +* fix(compiler): reject optional any in IDL validation by @BaldDemian in https://github.com/apache/fory/pull/3807 +* fix(compiler): never generate C++ equality methods for message and union containing any by @BaldDemian in https://github.com/apache/fory/pull/3810 +* fix(Java): prevent StackOverflow in normalizeIterableTypeArguments for self-referential collections by @Pigsy-Monk in https://github.com/apache/fory/pull/3817 +* fix(compiler): alias C++ union case types in metadata macros by @BaldDemian in https://github.com/apache/fory/pull/3814 +* fix(compiler): use protobuf syntax highlighter in docs by @ayush00git in https://github.com/apache/fory/pull/3819 +* fix(C++): add unordered_map type info hooks by @BaldDemian in https://github.com/apache/fory/pull/3820 +* fix(rust): stabilize meta string dynamic cache by @chaokunyang in https://github.com/apache/fory/pull/3822 +* fix: keep skip reference ids aligned by @chaokunyang in https://github.com/apache/fory/pull/3823 +* fix(rust): fix mulmurhash compute by @chaokunyang in https://github.com/apache/fory/pull/3824 +* fix(java): preserve collection TypeDef serializer family by @chaokunyang in https://github.com/apache/fory/pull/3827 +* fix(java): stabilize readResolve type metadata by @chaokunyang in https://github.com/apache/fory/pull/3831 +* fix(java): skip missing compatible struct fields by @chaokunyang in https://github.com/apache/fory/pull/3833 +* fix(java): support inherited fields in xlang by @chaokunyang in https://github.com/apache/fory/pull/3838 +* fix(java): support guava android collections by @chaokunyang in https://github.com/apache/fory/pull/3851 +* fix(java): stabilize GraalVM field offsets by @chaokunyang in https://github.com/apache/fory/pull/3853 +* fix(java): restore inherited container field types by @chaokunyang in https://github.com/apache/fory/pull/3864 + +## Other Improvements + +* chore: fold Fory review skill into agent guidance by @chaokunyang in https://github.com/apache/fory/pull/3779 +* chore(release): bump versions to 1.3.0 by @chaokunyang in https://github.com/apache/fory/pull/3792 +* chore(javascript): add javascript code format by @chaokunyang in https://github.com/apache/fory/pull/3813 +* docs(compiler): documented grpc service stubs by @ayush00git in https://github.com/apache/fory/pull/3818 + +## New Contributors + +* @00sense made their first contribution in https://github.com/apache/fory/pull/3786 +* @RisinT96 made their first contribution in https://github.com/apache/fory/pull/3793 +* @temni made their first contribution in https://github.com/apache/fory/pull/3809 +* @eryanwcp made their first contribution in https://github.com/apache/fory/pull/3849 + +**Full Changelog**: https://github.com/apache/fory/compare/v1.3.0...v1.4.0 diff --git a/docs/introduction/features.md b/docs/introduction/features.md deleted file mode 100644 index 1651d47036..0000000000 --- a/docs/introduction/features.md +++ /dev/null @@ -1,210 +0,0 @@ ---- -id: features -title: Features -sidebar_position: 2 ---- - -## Core Capabilities - -### High-Performance Serialization - -Apache Fory™ delivers exceptional performance through advanced optimization techniques: - -- **JIT Compilation**: Runtime code generation for Java eliminates virtual method calls and inlines hot paths -- **Static Code Generation**: Compile-time code generation for Rust, C++, and Go delivers peak performance without runtime overhead -- **Zero-Copy Operations**: Direct memory access without intermediate buffer copies; row format enables random access and partial serialization -- **Intelligent Encoding**: Variable-length compression for integers and strings; SIMD acceleration for arrays (Java 16+) -- **Meta Sharing**: Class metadata packing reduces redundant type information across serializations - -### Cross-Language Serialization - -The **[xlang serialization format](../specification/xlang_serialization_spec.md)** enables seamless data exchange across programming languages: - -- **Automatic Type Mapping**: Intelligent conversion between language-specific types ([type mapping](../specification/xlang_type_mapping.md)) -- **Reference Preservation**: Shared and circular references work correctly across languages -- **Polymorphism**: Objects serialize/deserialize with their actual runtime types -- **Schema Evolution**: Optional forward/backward compatibility for evolving schemas -- **Automatic Serialization**: No IDL or schema definitions required; serialize any object directly without code generation - -### Row Format - -A cache-friendly **[row format](../specification/row_format_spec.md)** optimized for analytics workloads: - -- **Zero-Copy Random Access**: Read individual fields without deserializing entire objects -- **Partial Operations**: Selective field serialization and deserialization for efficiency -- **Apache Arrow Integration**: Seamless conversion to columnar format for analytics pipelines -- **Multi-Language**: Available in Java, Python, Rust and C++ - -### Security & Production-Readiness - -Enterprise-grade security and compatibility: - -- **Class Registration**: Whitelist-based deserialization control (enabled by default) -- **Depth Limiting**: Protection against recursive object graph attacks -- **Configurable Policies**: Custom class checkers and deserialization policies -- **Platform Support**: Java 8-24, GraalVM native image, multiple OS platforms - -## Java Features - -### High Performance - -- **JIT Code Generation**: Highly-extensible JIT framework generates serializer code at runtime using async multi-threaded compilation, delivering 20-170x speedup through: - - Inlining variables to reduce memory access - - Inlining method calls to eliminate virtual dispatch overhead - - Minimizing conditional branching - - Eliminating hash lookups -- **Zero-Copy**: Direct memory access without intermediate buffer copies; row format supports random access and partial serialization -- **Variable-Length Encoding**: Optimized compression for integers, longs -- **Meta Sharing**: Cached class metadata reduces redundant type information -- **SIMD Acceleration**: Java Vector API support for array operations (Java 16+) - -### Drop-in Replacement - -- **100% JDK Serialization Compatible**: Supports `writeObject`/`readObject`/`writeReplace`/`readResolve`/`readObjectNoData`/`Externalizable` -- **Java 8-24 Support**: Works across all modern Java versions including Java 17+ records -- **GraalVM Native Image**: AOT compilation support without reflection configuration - -### Advanced Features - -- **Reference Tracking**: Automatic handling of shared and circular references -- **Schema Evolution**: Forward/backward compatibility for class schema changes -- **Polymorphism**: Full support for inheritance hierarchies and interfaces -- **Deep Copy**: Efficient deep cloning of complex object graphs with reference preservation -- **Security**: Class registration and configurable deserialization policies - -## Python Features - -### **Flexible Serialization Modes** - -- **Python native Mode**: Full Python compatibility, drop-in replacement for pickle/cloudpickle -- **Cross-Language Mode**: Optimized for multi-language data exchange -- **Row Format**: Zero-copy row format for analytics workloads - -### Versatile Serialization Features - -- **Shared/circular reference support** for complex object graphs in both Python-native and cross-language modes -- **Polymorphism support** for customized types with automatic type dispatching -- **Schema evolution** support for backward/forward compatibility when using dataclasses in cross-language mode -- **Out-of-band buffer support** for zero-copy serialization of large data structures like NumPy arrays and Pandas DataFrames, compatible with pickle protocol 5 - -### **Blazing Fast Performance** - -- **Extremely fast performance** compared to other serialization frameworks -- **Runtime code generation** and **Cython-accelerated** core implementation for optimal performance - -### Compact Data Size - -- **Compact object graph protocol** with minimal space overhead—up to 3× size reduction compared to pickle/cloudpickle -- **Meta packing and sharing** to minimize type forward/backward compatibility space overhead - -### **Security & Safety** - -- **Strict mode** prevents deserialization of untrusted types by type registration and checks. -- **Reference tracking** for handling circular references safely - -## Rust Features - -### Why Apache Fory™ Rust? - -- **Blazingly Fast**: Zero-copy deserialization and optimized binary protocols -- **Cross-Language**: Seamlessly serialize/deserialize data across Java, Python, C++, Go, JavaScript, and Rust -- **Type-Safe**: Compile-time type checking with derive macros -- **Circular References**: Automatic tracking of shared and circular references with `Rc`/`Arc` and weak pointers -- **Polymorphic**: Serialize trait objects with `Box<dyn Trait>`, `Rc<dyn Trait>`, and `Arc<dyn Trait>` -- **Schema Evolution**: Compatible mode for independent schema changes -- **Two Modes**: Object graph serialization and zero-copy row-based format - -### Object Graph Serialization - -Automatic serialization of complex object graphs, preserving the structure and relationships between objects. The `#[derive(ForyObject)]` macro generates efficient serialization code at compile time, eliminating runtime overhead: - -- Nested struct serialization with arbitrary depth -- Collection types (Vec, HashMap, HashSet, BTreeMap) -- Enum type support -- Optional fields with `Option<T>` -- Automatic handling of primitive types and strings -- Efficient binary encoding with variable-length integers - -### Shared and Circular References - -Automatically tracks and preserves reference identity for shared objects using `Rc<T>` and `Arc<T>`. When the same object is referenced multiple times, Fory serializes it only once and uses reference IDs for subsequent occurrences. This ensures: - -- **Space efficiency**: No data duplication in serialized output -- **Reference identity preservation**: Deserialized objects maintain the same sharing relationships -- **Circular reference support**: Use `RcWeak<T>` and `ArcWeak<T>` to break cycles - -### Trait Object Serialization - -Polymorphic serialization through trait objects, enabling dynamic dispatch and type flexibility. This is essential for plugin systems, heterogeneous collections, and extensible architectures. Supported trait object types: - -- `Box<dyn Trait>` - Owned trait objects -- `Rc<dyn Trait>` - Reference-counted trait objects -- `Arc<dyn Trait>` - Thread-safe reference-counted trait objects -- `Vec<Box<dyn Trait>>`, `HashMap<K, Box<dyn Trait>>` - Collections of trait objects - -### Schema Evolution - -Schema evolution in **Compatible mode**, allowing serialization and deserialization peers to have different type definitions. This enables independent evolution of services in distributed systems without breaking compatibility: - -- Add new fields with default values -- Remove obsolete fields (skipped during deserialization) -- Change field nullability (`T` ↔ `Option<T>`) -- Reorder fields (matched by name, not position) -- Type-safe fallback to default values for missing fields - -### Custom Serializers - -For types that don't support `#[derive(ForyObject)]`, implement the `Serializer` trait manually. This is useful for: - -- External types from other crates -- Types with special serialization requirements -- Legacy data format compatibility -- Performance-critical custom encoding - -### Row-Based Serialization - -High-performance **row format** for zero-copy deserialization. Unlike traditional object serialization that reconstructs entire objects in memory, row format enables **random access** to fields directly from binary data without full deserialization. - -- **Zero-copy access**: Read fields without allocating or copying data -- **Partial deserialization**: Access only the fields you need -- **Memory-mapped files**: Work with data larger than RAM -- **Cache-friendly**: Sequential memory layout for better CPU cache utilization -- **Lazy evaluation**: Defer expensive operations until field access - -## Scala Features - -### Supported Types - -Apache Fory™ supports all scala object serialization: - -- `case` class serialization supported -- `pojo/bean` class serialization supported -- `object` singleton serialization supported -- `collection` serialization supported -- other types such as `tuple/either` and basic types are all supported too. - -Scala 2 and 3 are both supported. - -### Scala Class Default Values Support - -Fory supports Scala class default values during deserialization when using compatible mode. This feature enables forward/backward compatibility when case classes or regular Scala classes have default parameters. - -When a Scala class has default parameters, the Scala compiler generates methods in the companion object (for case classes) or in the class itself (for regular Scala classes) like `apply$default$1`, `apply$default$2`, etc. that return the default values. Fory can detect these methods and use them when deserializing objects where certain fields are missing from the serialized data. - -## Kotlin Features - -Kotlin support builds on the default Fory Java implementation and adds handling for Kotlin-specific types and schema evolution. - -### Supported Types - -- Primitive types: `Byte`, `Boolean`, `Int`, `Short`, `Long`, `Char`, `Float`, `Double` -- Unsigned types: `UByte`, `UShort`, `UInt`, `ULong` -- Strings, standard arrays, and standard collections through the default Java implementation -- Kotlin collections and arrays such as `ArrayDeque`, `Array`, `BooleanArray`, `ByteArray`, `IntArray`, `LongArray`, `UByteArray`, `UIntArray`, and `ULongArray` -- Common stdlib types including `Pair`, `Triple`, `Result`, `Regex`, `Random`, `Duration`, and `Uuid` -- Kotlin ranges and progressions such as `CharRange`, `IntRange`, `LongRange`, `UIntRange`, `ULongRange`, and related progression types -- Empty collections such as `emptyList`, `emptyMap`, and `emptySet` - -### Data Class Default Value Support - -In compatible mode, Fory can detect Kotlin data class default values and apply them during deserialization when fields are missing. This allows schemas to evolve more safely, for example when adding new fields with defaults. diff --git a/docs/start/install.md b/docs/start/install.md index 76f33dad99..040b0ad9b5 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.3.0</version> + <version>1.4.0</version> </dependency> <!-- Optional row format support --> <!-- <dependency> <groupId>org.apache.fory</groupId> <artifactId>fory-format</artifactId> - <version>1.3.0</version> + <version>1.4.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.3.0</version> + <version>1.4.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.3.0</version> + <version>1.4.0</version> </dependency> ``` @@ -54,20 +54,20 @@ Scala 3 with Maven: <dependency> <groupId>org.apache.fory</groupId> <artifactId>fory-scala_3</artifactId> - <version>1.3.0</version> + <version>1.4.0</version> </dependency> ``` Scala 2.13 with sbt: ```sbt -libraryDependencies += "org.apache.fory" % "fory-scala_2.13" % "1.3.0" +libraryDependencies += "org.apache.fory" % "fory-scala_2.13" % "1.4.0" ``` Scala 3 with sbt: ```sbt -libraryDependencies += "org.apache.fory" % "fory-scala_3" % "1.3.0" +libraryDependencies += "org.apache.fory" % "fory-scala_3" % "1.4.0" ``` ## Kotlin @@ -78,7 +78,7 @@ Add Apache Fory™ Kotlin with Maven: <dependency> <groupId>org.apache.fory</groupId> <artifactId>fory-kotlin</artifactId> - <version>1.3.0</version> + <version>1.4.0</version> </dependency> ``` @@ -86,7 +86,7 @@ Add Apache Fory™ Kotlin with Maven: ```bash python -m pip install --upgrade pip -pip install pyfory==1.3.0 +pip install pyfory==1.4.0 ``` ## Go @@ -94,7 +94,7 @@ pip install pyfory==1.3.0 Use the full Go module path `github.com/apache/fory/go/fory`: ```bash -go get github.com/apache/fory/go/[email protected] +go get github.com/apache/fory/go/[email protected] ``` 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.3.0" +fory = "1.4.0" ``` Or use `cargo add`: ```bash -cargo add [email protected] +cargo add [email protected] ``` ## JavaScript / TypeScript @@ -132,7 +132,7 @@ Add Apache Fory™ Dart to `pubspec.yaml`: ```yaml dependencies: - fory: ^1.3.0 + fory: ^1.4.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.3.0 +dotnet add package Apache.Fory --version 1.4.0 ``` ```xml <ItemGroup> - <PackageReference Include="Apache.Fory" Version="1.3.0" /> + <PackageReference Include="Apache.Fory" Version="1.4.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.3.0") + .package(url: "https://github.com/apache/fory.git", exact: "1.4.0") ], targets: [ .target( diff --git a/src/components/home/HomepageLanding.tsx b/src/components/home/HomepageLanding.tsx index 887b30722c..74012eb197 100644 --- a/src/components/home/HomepageLanding.tsx +++ b/src/components/home/HomepageLanding.tsx @@ -138,7 +138,7 @@ const runtimeExamples: RuntimeExample[] = [ install: `<dependency> <groupId>org.apache.fory</groupId> <artifactId>fory-core</artifactId> - <version>1.3.0</version> + <version>1.4.0</version> </dependency>`, codeLanguage: "java", guide: "/docs/guide/java/", @@ -181,7 +181,7 @@ out = fory.deserialize(data)`, id: "rust", label: "Rust", installLanguage: "bash", - install: `cargo add [email protected]`, + install: `cargo add [email protected]`, codeLanguage: "rust", guide: "/docs/guide/rust/", summary: "Rust uses derive macros for type-safe structs and supports both xlang and native payloads.", @@ -229,7 +229,7 @@ _ = f.Deserialize(payload, &out)`, install: `FetchContent_Declare( fory GIT_REPOSITORY https://github.com/apache/fory.git - GIT_TAG v1.3.0 + GIT_TAG v1.4.0 SOURCE_SUBDIR cpp )`, codeLanguage: "cpp", @@ -276,7 +276,7 @@ const out = deserialize(payload);`, id: "csharp", label: "C#", installLanguage: "bash", - install: `dotnet add package Apache.Fory --version 1.3.0`, + install: `dotnet add package Apache.Fory --version 1.4.0`, codeLanguage: "csharp", guide: "/docs/guide/csharp/", summary: ".NET support uses source-generated serializers for Fory structs, enums, and unions.", @@ -299,7 +299,7 @@ Person out = fory.Deserialize<Person>(payload);`, id: "swift", label: "Swift", installLanguage: "swift", - install: `.package(url: "https://github.com/apache/fory.git", exact: "1.3.0")`, + install: `.package(url: "https://github.com/apache/fory.git", exact: "1.4.0")`, codeLanguage: "swift", guide: "/docs/guide/swift/", summary: "Swift uses @ForyStruct, @ForyEnum, and @ForyUnion macros for xlang-compatible models.", @@ -322,7 +322,7 @@ let out: Person = try fory.deserialize(payload)`, label: "Dart", installLanguage: "yaml", install: `dependencies: - fory: ^1.3.0 + fory: ^1.4.0 dev_dependencies: build_runner: ^2.4.13`, @@ -357,7 +357,7 @@ final out = fory.deserialize<Person>(payload);`, id: "scala", label: "Scala", installLanguage: "sbt", - install: `libraryDependencies += "org.apache.fory" %% "fory-scala" % "1.3.0"`, + install: `libraryDependencies += "org.apache.fory" %% "fory-scala" % "1.4.0"`, codeLanguage: "scala", guide: "/docs/guide/scala/", summary: "Scala builds on Fory Java with optimized serializers for case classes, collections, tuples, and Option.", @@ -377,8 +377,8 @@ val out = fory.deserialize(payload).asInstanceOf[Person]`, id: "kotlin", label: "Kotlin", installLanguage: "kotlin", - install: `implementation("org.apache.fory:fory-kotlin:1.3.0") -ksp("org.apache.fory:fory-kotlin-ksp:1.3.0")`, + install: `implementation("org.apache.fory:fory-kotlin:1.4.0") +ksp("org.apache.fory:fory-kotlin-ksp:1.4.0")`, codeLanguage: "kotlin", guide: "/docs/guide/kotlin/", summary: "Kotlin adds data-class support, Android guidance, and KSP static serializers for xlang/schema mode.", diff --git a/src/pages/download/index.md b/src/pages/download/index.md index 0de8daf357..682389a684 100644 --- a/src/pages/download/index.md +++ b/src/pages/download/index.md @@ -9,11 +9,11 @@ For binary install, please see Apache Fory™ [install](/docs/start/install/) do ## The latest release -The latest source release is 1.3.0: +The latest source release is 1.4.0: | Version | Date | Source | Release Notes | | ------- | ---------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------- | -| 1.3.0 | 2026-06-25 | [source](https://www.apache.org/dyn/closer.lua/fory/1.3.0/apache-fory-1.3.0-src.tar.gz?action=download) [asc](https://downloads.apache.org/fory/1.3.0/apache-fory-1.3.0-src.tar.gz.asc) [sha512](https://downloads.apache.org/fory/1.3.0/apache-fory-1.3.0-src.tar.gz.sha512) | [release notes](https://github.com/apache/fory/releases/tag/v1.3.0) | +| 1.4.0 | 2026-07-20 | [source](https://www.apache.org/dyn/closer.lua/fory/1.4.0/apache-fory-1.4.0-src.tar.gz?action=download) [asc](https://downloads.apache.org/fory/1.4.0/apache-fory-1.4.0-src.tar.gz.asc) [sha512](https://downloads.apache.org/fory/1.4.0/apache-fory-1.4.0-src.tar.gz.sha512) | [release notes](https://github.com/apache/fory/releases/tag/v1.4.0) | ## All archived releases @@ -31,13 +31,13 @@ These files are named after the files they relate to but have `.sha512/.asc` ext To verify the SHA digests, you need the `.tar.gz` file and its associated `.tar.gz.sha512` file. An example command: ```bash -sha512sum --check apache-fory-1.3.0-src.tar.gz.sha512 +sha512sum --check apache-fory-1.4.0-src.tar.gz.sha512 ``` It should output something like: ```bash -apache-fory-1.3.0-src.tar.gz: OK +apache-fory-1.4.0-src.tar.gz: OK ``` ### Verifying Signatures @@ -54,7 +54,7 @@ gpg --import KEYS Then you can verify signature: ```bash -gpg --verify apache-fory-1.3.0-src.tar.gz.asc apache-fory-1.3.0-src.tar.gz +gpg --verify apache-fory-1.4.0-src.tar.gz.asc apache-fory-1.4.0-src.tar.gz ``` If something like the following appears, it means the signature is correct: --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
