fix(deps): update fory to v1.5.0 - #43
Open
rossdanderson wants to merge 1 commit into
Open
Conversation
rossdanderson
force-pushed
the
renovate/fory
branch
from
June 29, 2026 08:05
c153921 to
a2ef7a9
Compare
rossdanderson
force-pushed
the
renovate/fory
branch
from
July 20, 2026 07:19
a2ef7a9 to
65df8ea
Compare
rossdanderson
force-pushed
the
renovate/fory
branch
from
August 3, 2026 07:23
65df8ea to
c55dd04
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
1.1.0→1.5.01.1.0→1.5.0Release Notes
apache/fory (org.apache.fory:fory-kotlin)
v1.5.0The Apache Fory team is pleased to announce the 1.5.0 release. This release includes 25 PRs. See the Install page to get the libraries for your platform.
Highlights
Faster Fory JSON
Fory 1.5.0 delivers a major performance leap for Fory JSON, with deep optimizations across both serialization and deserialization. It is now up to 5× faster than Jackson and 10× faster than Gson.
External-Type Serialization For Rust/Swift/CSharp/Dart
Fory 1.5.0 adds external-type serialization to Rust, Dart, Swift, and C#. Applications can define a local serializer or schema declaration for a third-party structural type that cannot be modified to carry Fory annotations. Fory then reads and writes the target value directly—without requiring a wrapper or intermediate mirror object.
The generated declaration preserves the runtime's normal registration and wire model. In xlang mode, external structs, enums, and unions use the same applicable identities and encodings as directly supported types. Private, opaque, or invariant-bearing targets can still use a custom serializer when structural generation is not appropriate.
In Rust, the local derive names the target type and is selected explicitly for root values:
Dart generates a serializer from a local
targetdeclaration, then registers the third-party target through the generated module:Swift registers and selects the external serializer while the application continues to pass
ThirdParty.Uservalues:C# source generation uses a local abstract declaration and registers the target type through the normal API:
For construction requirements, nested containers, dynamic values, and advanced mappings, see the dedicated guides for Rust, Dart, Swift, and C#.
Class Inheritance for C# and Dart
Fory 1.5.0 adds class inheritance support to C# and Dart. In both runtimes, inherited and child storage is represented as one flattened schema rather than a nested base object, so ordinary field ordering, schema evolution, reference tracking, and graph-memory checks continue to apply to the concrete type.
In C#, annotate every participating class directly because
[ForyStruct]is not inherited. Abstract annotated bases provide schema fields for their concrete descendants, while only the concrete derived type is registered:Dart generation discovers superclass and applied-mixin storage. Public inherited fields need no annotation on the parent, and a concrete child can intentionally omit inherited private fields:
The generated
TextMessageschema containssequenceandtext, but not the inherited private_cache. The option does not omit inherited public fields or private fields declared by the child itself.See C# class inheritance and Dart inheritance for constructor rules, private-field access across packages, mixins, generics, references, and schema compatibility.
Features
Bug Fix
Other Improvements
Full Changelog: apache/fory@v1.4.0...v1.5.0
v1.4.0Highlights
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:
Add the
fory-jsonartifact to your application:ForyJsonis immutable and thread-safe after construction, so one instance can be reused across threads:See the Fory JSON documentation for the complete type model, annotations and mix-ins, dynamic properties, custom serializers, security controls, and Android or GraalVM setup.
Features
Bug Fix
Other Improvements
New Contributors
Full Changelog: apache/fory@v1.3.0...v1.4.0
v1.3.0Highlights
grpc.aioAsyncIO API, while synchronousgrpciooutput remains available through--grpc-python-mode=sync.foryc --dart_out=... --grpcnow emitspackage:grpcclients, service bases, method descriptors, and Fory-backed payload serialization.Python Async gRPC Mode
Python gRPC generation now targets AsyncIO by default. Generated companions use
grpc.aio: servicer bases exposeasync defmethods, stubs are used withgrpc.aio.Channelinstances, and streaming RPCs use async iterables. This keepsthe generated code aligned with modern Python async services while preserving
the same Fory-backed request and response encoding used by the existing gRPC
support.
Generate the default async companion with:
For a simple unary service, the generated async server shape is:
Clients use a
grpc.aiochannel and await generated stub methods:Existing synchronous applications can still request sync companions explicitly:
In sync mode the generated public names and
<module>_grpc.pyfilename stay thesame, but applications use
grpc.server(...), standardgrpc.Channelinstances, and regular
defservicer methods.Dart gRPC Code Generation
Fory 1.3.0 adds Dart gRPC service generation for schemas with service
definitions. Service definitions can come from Fory IDL, protobuf IDL, or
FlatBuffers
rpc_servicedefinitions. The generated code uses normalgrpc-dart APIs for clients, service bases, method descriptors, call options,
deadlines, cancellations, metadata, and status codes, while each request and
response object is serialized with Fory instead of protobuf message bytes.
Add
grpcandbuild_runneralongside the Fory package in the Dartapplication:
Generate Dart models and the gRPC companion with:
For a
demo.greeterpackage, the generator emits the model file, thebuild_runnerserializer part, and a<stem>_grpc.dartcompanion withGreeterServiceBaseandGreeterClient. The generated client and service baseinstall the schema's Fory module automatically on first use, so service
implementations do not need a separate manual registration step for the
generated message types.
A unary Dart server uses grpc-dart's
Serverand the generated service base:Generated Dart clients use standard
ClientChannelvalues and return thegrpc-dart call types:
Dart generation covers unary, server-streaming, client-streaming, and
bidirectional streaming RPC shapes following grpc-dart conventions.
Features
Bug Fix
Other Improvements
New Contributors
Full Changelog: apache/fory@v1.2.0...v1.3.0
v1.2.0Highlights
sun.misc.Unsafeusage for JDK 25.Java 25+ Without
sun.misc.UnsafeJDK 25 continues the platform shift away from
sun.misc.Unsafe. Fory 1.2.0adds a Java 25 multi-release runtime path so applications can run on JDK 25+
without resolving
sun.misc.Unsafefrom Fory's active class graph.Older JDKs keep the existing fast paths. On JDK 25+, Fory uses replacement
classes backed by supported JVM mechanisms such as
VarHandle,MethodHandle,arrays, and
ByteBuffer. Classes that previously depended on constructorbypassing should provide an accessible no-arg constructor, use records, or
register a custom serializer.
Compatible Scalar Field Reads
Compatible mode already allows readers and writers to add, remove, and reorder
fields. Fory 1.2.0 extends that model to selected scalar type changes: when a
matched top-level field changes between boolean, string, numeric, and decimal
types, the reader can deserialize the value if the conversion is lossless.
Examples include reading
"123"as an integer field, reading1or0as aboolean field, reading booleans as
1/0, reading numbers or decimals ascanonical strings, and widening or narrowing numeric values only when no range
or precision is lost. Invalid strings, out-of-range values, lossy float/integer
conversions, and reference-tracked scalar type changes fail during
deserialization. The conversion applies to matched compatible fields, not to
root values or collection elements.
The examples below show Rust and Java using an
int64writer field and aStringreader field. The same compatible scalar field conversion is supportedacross Fory's compatible-mode runtimes: Java, Python, Rust, C++, Go, C#, Swift,
Dart, JavaScript/TypeScript, Kotlin, and Scala. Compatible mode is enabled by
default in the Java and Python runtimes for both xlang and native serialization.
Rust example:
Java example:
The same rule works in the other direction, for example reading a
Stringfield value such as
"42"asint64, when the string uses Fory's strictfinite decimal grammar and the target range can represent the value exactly.
Generated gRPC Support
Fory 1.2.0 expands compiler-generated gRPC service companions. The generated
services use standard gRPC transports, channels, deadlines, metadata,
interceptors, status codes, and streaming shapes, while request and response
objects are encoded with Fory instead of protobuf message bytes. Use this mode
when both sides of the RPC are generated from the same Fory IDL, protobuf IDL,
or FlatBuffers IDL and you want gRPC operational semantics with Fory payload
encoding.
Generated gRPC support now covers Java, Python, Go, Rust, C#, Scala, Kotlin,
and JavaScript/TypeScript. JavaScript includes Node.js gRPC support and browser
gRPC-Web client generation. Only Rust and Java snippets are shown below; the
other supported languages provide the same Fory-backed service companion model
without duplicating code here.
The examples below use this shared schema:
Rust generation emits tonic-based service API and binding modules:
Java generation emits grpc-java service bases, stubs, and Fory codecs:
The generated gRPC companions intentionally do not make gRPC a hard dependency
of the core Fory language packages. Applications add the transport libraries
they use: grpc-java for Java and Scala,
grpciofor Python, grpc-go for Go,tonic/bytesfor Rust, .NET gRPC packages for C#,@grpc/grpc-jsorgrpc-webfor JavaScript, and grpc-java/grpc-kotlin for Kotlin.Features
Arc<dyn Any + Send + Sync>type by @chaokunyang in #3736Bug Fix
Other Improvements
New Contributors
Full Changelog: apache/fory@v1.1.0...v1.2.0
Configuration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about these updates again.
This PR has been generated by Mend Renovate.