News for hackers. Stuff that matters.

chaokunyang

Apache Fory achieved 2.78×–12.12× the throughput of kotlinx.serialization, Moshi with generated adapters, and Jackson Kotlin across the measured serialization and deserialization operations
Apache Fory JSON is a high-performance JSON serialization framework for Java. It maps Java objects to and from standard JSON text and UTF-8 bytes.

In the published benchmarks, it reaches up to 10.91× Jackson’s throughput and 10.89× Gson’s in java-json-benchmark, and up to 5.55× and 10.00× respectively in the jvm-serializers MediaContent benchmark.

It supports JDK 8+, Android, and GraalVM Native Image. JDK17+ Record is also supported.

Feedback is welcome.

Apache Fory 1.2.0 is out.

The main Java change is JDK 25 support without using sun.misc.Unsafe in the active runtime path. Older JDKs keep the existing fast path, while JDK 25+ uses replacement implementations based on supported JVM APIs.

Other notable changes:

- Java 9/16 module-info generation

- JDK 26+ final field deserialization support even when --illegal-final-field-mutation=deny

- compatible scalar field reads for schema evolution, e.g. int64 <-> String when the conversion is lossless

- generated gRPC service companions across Java, Rust, Go, Kotlin, Scala, C#, Python, and JavaScript/TypeScript - compatible-mode and row-format performance work

Feedback from people testing serialization libraries on newer JDKs or dealing with Unsafe removal would be useful.

Re:Apache Fory C++: 10x faster serialization than protobuf on Wednesday March 18, 2026 @02:11AM (#47422096)
1. 10X faster serialization than protobuf c++ 2. Shared/Circular reference tracking Support 3. Polymorphism and tagged union support 4. Schema evolution support 5. idiomatic domain object API
Flatbuffer Example:

namespace demo;

table Node {

  parent: Node (fory_weak_ref: true);

  children: [Node] (fory_ref: true);

  cached: Node (fory_ref: true, fory_thread_safe_pointer: false);

}
Protobuf Example:

syntax = "proto3";

message TreeNode {

  TreeNode parent = 1 [(fory).weak_ref = true];

  repeated TreeNode children = 2 [(fory).ref = true];

}
If you already have .proto or .fbs schemas and you want shared/circular reference support, with the Fory compiler you can keep those schemas, add a small set of Fory options, then foryc generates idiomatic native models across Fory-supported languages

With fory first-class object graph serialziation support, you can serialize object graphs without manual *_id link reconstruction or rewriting your entire schema into Fory Schema.

1. GitHub: https://github.com/apache/fory

2. Compiler docs: https://fory.apache.org/docs/compiler

Tiny Schema demo

message Customer { string id = 1; string name = 2; }

message Order {

  string order_id = 1;

  ref Customer customer = 2;

  list<string> items = 3;

}

Show HN: First IDL for Object-Graph Serialization (Apache Fory IDL)

https://fory.apache.org/blog/fory_schema_idl_for_object_graph/

Apache Fory Schema IDL is the first cross-language schema that treats object graphs (shared refs, cycles, polymorphism) as a first-class contract and still generates idiomatic domain models.1. `ref` encodes shared identity/loops in the schema (weak refs supported) — no manual ID stitching2. `union`/`any` give reusable polymorphism; same semantics across Java/Python/Go/Rust/C++/C#/Swift3....

( Read More... | 2 comments | on HN )

Show HN: Fory C++ Serialization – Polymorphism, Circular Refs, 12x vs. Protobuf

https://fory.apache.org/blog/fory_cpp_blazing_fast_serialization_framework/

Apache Fory's C++ serialization is our latest support for c++Highlights:1. Automatic idiomatic cross-language serializaton, no adapter layer, serialize in C++, deserialize in Python.2. Polymorphism via smart pointers. Fory detects std::is_polymorphic&lt;T&gt; automatically. Serialize through a shared_ptr&lt;Animal&gt;, get a Dog* back — zero boilerplate.3. Circular/shared reference tracking....

( Read More... | 1 comment | 3 points | on HN )
This project is for running local CLI/agent loops on macOS/Linux/Windows while executing commands inside browser-hosted terminals for cloud servers. The key goal is output/exit-code parity so local automation can trust remote runs.

Show HN: Browser Terminal Use – run local CLI/agent loops in browser terminals

https://github.com/chaokunyang/browser-terminal-use

I built Browser Terminal Use: a Chrome extension + local daemon + CLI that lets you run commands in a browser-hosted terminal from your local shell on macOS,Why I built it: setups). - I wanted a bridge that keeps local automation while executing remotely in the browser terminal context.How it works:- browterm CLI sends exec requests to browterm-daemon on localhost. - Daemon serializes requests...

( Read More... | 1 comment | 2 points | on HN )

Show HN: Browser Terminal Use – A Local-to-Cloud Execution Bridge for LLM Agents

https://github.com/chaokunyang/browser-terminal-use

I built Browser Terminal Use for AI Agents.Project: https://github.com/chaokunyang/browser-terminal-useThe goal is simple: let an Agent run iterative loops from local code, but execute commands inside a browser-hosted cloud terminal.With this tool, an Agent can:- send commands from local CLI - execute inside a bound browser terminal tab - stream output in real time - get the exact remote exit...

( Read More... | no comments | on HN )
Awex is a weight synchronization framework between training and inference engines designed for ultimate performance, solving the core challenge of synchronizing training weight parameters to inference models in the RL workflow. It can exchange TB-scale large-scale parameter within seconds, significantly reducing RL model training latency. Main features include: Blazing synchronization performance: Full synchronization of trillion-parameter models across thousand-GPU clusters within 6 seconds, industry-leading performance; Unified model adaptation layer: Automatically handles differences in parallelism strategies between training and inference engines and tensor format/layout differences, compatible with multiple model architectures; Zero-redundancy Resharding transmission and in-place updates: Only transfers necessary shards, updates inference-side memory in place, avoiding reallocation and copy overhead; Multi-mode transmission support: Supports multiple transmission modes including NCCL, RDMA, and shared memory, fully leveraging NVLink/NVSwitch/RDMA bandwidth and reducing long-tail latency; Heterogeneous deployment compatibility: Adapts to co-located/separated modes, supports both synchronous and asynchronous RL algorithm training scenarios, with RDMA transmission mode supporting dynamic scaling of inference instances; Flexible pluggable architecture: Supports customized weight sharing and layout behavior for different models, while supporting integration of new training and inference engines. GitHub Repo: https://github.com/inclusionAI/asystem-awex
I also did a benchmark with dill, it shows that: fory is 20~40X faster and up to 7x higher compression ratio compared to dill. I don't dive into dill to see how it works. Here is my benchmark code:

https://github.com/chaokunyang/python_benchmarks

Yes, you are right. I missed this when I wrote the benchmark code. I will update the benchmark code and share the results here
I understand your concern. Personally, I’m open to using AI as part of the development process, but the majority of the code in this repository has been written manually and carefully reviewed.

The AGENTS.md file was added only recently. Its original purpose wasn’t to hand code generation entirely to an AI, but rather to use AI as a pair‑programming debugger — for example, having it walk through tricky binary parsing issues byte‑by‑byte. Serialization in a compact binary format can be hard to debug, and AI can sometimes save hours by quickly pinpointing structural mismatches.

That said, serialization is a fundamental piece of infrastructure, so we remain conservative: any AI‑assisted changes go through the same rigorous review and test process as everything else. As technology evolves, I think it’s worth exploring new tools — but with care.

I liked the name “Fury” too — I actually named it myself and was really fond of it, but unfortunately we had to change it.

Older »