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<T> automatically. Serialize through a shared_ptr<Animal>, get a Dog* back — zero boilerplate.
3. Circular/shared reference tracking. Shared objects are serialized once and encoded as back-references. Cycles don't overflow the stack.
4. Schema evolution. Compatible mode matches fields by name/id, not position. Add fields on one side without coordinating deployments.
5. IDL compiler (optional). `foryc ecommerce.fdl --cpp_out ./gen` generates idiomatic code for every language from one schema. Supports union → std::variant, optional, ref → std::shared_ptr, weak refs, lists, maps.
6. Row format. O(1) random field access by index — useful for analytics workloads where you only read a few fields per record.
Throughput vs. Protobuf: up to 12x depending on workload.
GitHub: https://github.com/apache/fory
C++ docs: https://fory.apache.org/docs/guide/cpp
I’d really like critical feedback on API ergonomics, and production fit.