1. `ref` encodes shared identity/loops in the schema (weak refs supported) — no manual ID stitching
2. `union`/`any` give reusable polymorphism; same semantics across Java/Python/Go/Rust/C++/C#/Swift
3. Generated types are real domain models (POJOs, dataclasses, structs, enums), not transport wrappers
4. Compatible evolution: field-id matching, defaults, unknown-field skip
5. One `.fdl` → compatible bytes across all supported languages
Try it in 60 seconds:
```bash pip install fory-compiler foryc ecommerce.fdl \
--java_out=./java --python_out=./python --go_out=./go \
--rust_out=./rust --cpp_out=./cpp --csharp_out=./csharp --swift_out=./swift
```Shared-identity round-trip (Java):
```java
OrderBatch restored = OrderBatch.fromBytes(new OrderBatch(first, second).toBytes());
assert restored.getOrders().get(0).getCustomer() == restored.getOrders().get(1).getCustomer();
```
Feedback welcome: where do object graphs bite you today? Try `foryc --emit-fdl` on a `.proto` / `.fbs` and tell me what feels off.
chaokunyang•1h ago
2. GitHub https://github.com/apache/fory
3. Benchmarks https://github.com/apache/fory/tree/main/docs/benchmarks