Skip to content

Replace FlatBuffers with serde/postcard for host-guest messages - #2044

Open
ludfjig wants to merge 1 commit into
hyperlight-dev:mainfrom
ludfjig:ll/postcard-only
Open

ludfjig wants to merge 1 commit into
hyperlight-dev:mainfrom
ludfjig:ll/postcard-only

Conversation

@ludfjig

@ludfjig ludfjig commented Nov 10, 2026 •

Copy link
Copy Markdown
Contributor

Implements HIP 0008 (#1999).

Details not covered by the HIP:

  • FunctionCall, ParameterValue and ReturnValue map to private wire types, because their byte payloads travel separately. GuestLogData, GuestEvent and ReturnType derive serde and are encoded directly.
  • abi_tests.rs pins the encoded bytes of every message type. A failure explains that the change breaks snapshots and points to docs/snapshot-versioning.md.
  • Snapshot ABI 10 and goldens v10.0.
  • Floats keep their exact bits, including -0.0.
  • New fuzz target fuzz_control_decode. fuzz_guest_trace_decode replaces the trace size estimator target.
  • Removes estimate_flatbuffer_capacity and the FlatBuffers HyperlightError variants.

Follow-ups: borrow decoded strings, reuse encode buffers (maayybe, need to be careful about security) (#671), remove the chunked flag (#1987), and rename flatbuffer_wrappers.

Fixes #1607

@ludfjig ludfjig added C-refactor For PRs that restructure or remove code without adding new functionality. S-needs-goldens Regenerate snapshot golden fixtures labels Nov 10, 2026
@hyperlight-gh-bot

This comment has been minimized.

@hyperlight-gh-bot

This comment has been minimized.

@hyperlight-gh-bot

This comment has been minimized.

@andreiltd

Copy link
Copy Markdown
Member

Nice! I believe all the: TryFrom<ParameterValue> and  TryFrom<ReturnValue> can be also removed?

@ludfjig
ludfjig marked this pull request as ready for review November 12, 2026 19:45
Copilot AI balanced review requested due to automatic review settings November 12, 2026 19:45
@ludfjig

ludfjig commented Nov 12, 2026 •

Copy link
Copy Markdown
Contributor Author

Nice! I believe all the: TryFrom<ParameterValue> and  TryFrom<ReturnValue> can be also removed?

Thanks nice catch. They should go, but i'd prefer do it in a follow up pr, it brings a lot of unrelated code changes if you don't mind and would be a breaking change (they're in public api call_host_function )

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

The security documentation overstates allocation guarantees because decoded parameters and trace fields lack per-collection count limits despite transport-size bounds.

1 open issue
What changed in this PR

This PR implements HIP 0008 by using serde/postcard for Hyperlight’s host-guest messages while keeping byte payloads separate from control data.

Changes:

  • Adds postcard wire types and explicit control-data lengths, and removes FlatBuffers schemas, generated code, and dependencies.
  • Updates snapshot compatibility to ABI 10 and goldens v10.0, with exact-bit float assertions.
  • Adds decoder fuzzing and updates communication, security, and development documentation.
File Description
src/​tests/​rust_guests/​Cargo.lock Updates guest serialization dependencies.
src/​schema/​host_function_details.fbs Removes the host-function collection schema.
src/​schema/​host_function_definition.fbs Removes the host-function definition schema.
src/​schema/​guest_trace_data.fbs Removes the trace schema.
src/​schema/​guest_log_data.fbs Removes the log schema.
src/​schema/​guest_error.fbs Removes the guest-error schema.
src/​schema/​function_types.fbs Removes the value and type schemas.
src/​schema/​function_call.fbs Removes the call schema.
src/​schema/​function_call_result.fbs Removes the result schema.
src/​schema/​all.fbs Removes the schema entry point.
src/​hyperlight_host/​tests/​snapshot_goldens/​goldens_version.rs Selects goldens v10.0.
src/​hyperlight_host/​tests/​sandbox_host_tests.rs Checks exact float bits after round trips.
src/​hyperlight_host/​src/​sandbox/​snapshot/​tripwires.rs Pins ABI 10 and references wire-format tests.
src/​hyperlight_host/​src/​sandbox/​snapshot/​file/​media_types.rs Sets snapshot ABI 10.
src/​hyperlight_host/​src/​sandbox/​snapshot/​file_tests.rs Updates snapshot ABI expectations.
src/​hyperlight_host/​src/​sandbox/​outb.rs Passes headers into message decoders.
src/​hyperlight_host/​src/​mem/​virtq/​codec.rs Reads header-sized control data and uses vector encoding.
src/​hyperlight_host/​src/​mem/​shared_mem.rs Updates decoder terminology in safety comments.
src/​hyperlight_host/​src/​mem/​mgr.rs Integrates postcard encoding and header-based decoding.
src/​hyperlight_host/​src/​error.rs Removes FlatBuffers-specific error variants.
src/​hyperlight_host/​Cargo.toml Removes the FlatBuffers dependency.
src/​hyperlight_host/​benches/​benchmarks.rs Adapts codec benchmarks to vector buffers.
src/​hyperlight_guest/​src/​transport/​context.rs Integrates the guest-side encoding and framing changes.
src/​hyperlight_guest/​Cargo.toml Removes the FlatBuffers dependency.
src/​hyperlight_guest_capi/​Cargo.toml Removes the FlatBuffers dependency.
src/​hyperlight_guest_bin/​Cargo.toml Removes the FlatBuffers dependency.
src/​hyperlight_common/​src/​transport.rs Adds control length to the 16-byte header.
src/​hyperlight_common/​src/​lib.rs Removes the generated FlatBuffers module declaration.
src/​hyperlight_common/​src/​flatbuffers/​mod.rs Removes generated module exports.
src/​hyperlight_common/​src/​flatbuffers/​hyperlight/​generated/​return_value_generated.rs Removes generated return-value bindings.
src/​hyperlight_common/​src/​flatbuffers/​hyperlight/​generated/​return_type_generated.rs Removes generated return-type bindings.
src/​hyperlight_common/​src/​flatbuffers/​hyperlight/​generated/​parameter_value_generated.rs Removes generated parameter-value bindings.
src/​hyperlight_common/​src/​flatbuffers/​hyperlight/​generated/​parameter_type_generated.rs Removes generated parameter-type bindings.
src/​hyperlight_common/​src/​flatbuffers/​hyperlight/​generated/​open_span_type_generated.rs Removes generated span-opening bindings.
src/​hyperlight_common/​src/​flatbuffers/​hyperlight/​generated/​log_level_generated.rs Removes generated log-level bindings.
src/​hyperlight_common/​src/​flatbuffers/​hyperlight/​generated/​log_event_type_generated.rs Removes generated log-event bindings.
src/​hyperlight_common/​src/​flatbuffers/​hyperlight/​generated/​key_value_generated.rs Removes generated trace-field bindings.
src/​hyperlight_common/​src/​flatbuffers/​hyperlight/​generated/​host_function_details_generated.rs Removes generated host-function collection bindings.
src/​hyperlight_common/​src/​flatbuffers/​hyperlight/​generated/​host_function_definition_generated.rs Removes generated host-function definition bindings.
src/​hyperlight_common/​src/​flatbuffers/​hyperlight/​generated/​hlvoid_generated.rs Removes generated void bindings.
src/​hyperlight_common/​src/​flatbuffers/​hyperlight/​generated/​hlulong_generated.rs Removes generated unsigned 64-bit bindings.
src/​hyperlight_common/​src/​flatbuffers/​hyperlight/​generated/​hluint_generated.rs Removes generated unsigned 32-bit bindings.
src/​hyperlight_common/​src/​flatbuffers/​hyperlight/​generated/​hlstring_generated.rs Removes generated string bindings.
src/​hyperlight_common/​src/​flatbuffers/​hyperlight/​generated/​hllong_generated.rs Removes generated signed 64-bit bindings.
src/​hyperlight_common/​src/​flatbuffers/​hyperlight/​generated/​hlint_generated.rs Removes generated signed 32-bit bindings.
src/​hyperlight_common/​src/​flatbuffers/​hyperlight/​generated/​hlfloat_generated.rs Removes generated float bindings.
src/​hyperlight_common/​src/​flatbuffers/​hyperlight/​generated/​hlexternalbytes_generated.rs Removes generated external-byte bindings.
src/​hyperlight_common/​src/​flatbuffers/​hyperlight/​generated/​hldouble_generated.rs Removes generated double bindings.
src/​hyperlight_common/​src/​flatbuffers/​hyperlight/​generated/​hlbool_generated.rs Removes generated boolean bindings.
src/​hyperlight_common/​src/​flatbuffers/​hyperlight/​generated/​guest_start_type_generated.rs Removes generated guest-start bindings.
src/​hyperlight_common/​src/​flatbuffers/​hyperlight/​generated/​guest_log_data_generated.rs Removes generated guest-log bindings.
src/​hyperlight_common/​src/​flatbuffers/​hyperlight/​generated/​guest_event_union_type_generated.rs Removes generated event-union bindings.
src/​hyperlight_common/​src/​flatbuffers/​hyperlight/​generated/​guest_event_type_generated.rs Removes generated event-type bindings.
src/​hyperlight_common/​src/​flatbuffers/​hyperlight/​generated/​guest_event_generated.rs Removes generated guest-event bindings.
src/​hyperlight_common/​src/​flatbuffers/​hyperlight/​generated/​guest_error_generated.rs Removes generated guest-error bindings.
src/​hyperlight_common/​src/​flatbuffers/​hyperlight/​generated/​function_call_type_generated.rs Removes generated call-type bindings.
src/​hyperlight_common/​src/​flatbuffers/​hyperlight/​generated/​function_call_result_type_generated.rs Removes generated result-type bindings.
src/​hyperlight_common/​src/​flatbuffers/​hyperlight/​generated/​function_call_result_generated.rs Removes generated call-result bindings.
src/​hyperlight_common/​src/​flatbuffers/​hyperlight/​generated/​function_call_generated.rs Removes generated function-call bindings.
src/​hyperlight_common/​src/​flatbuffers/​hyperlight/​generated/​error_code_generated.rs Removes generated error-code bindings.
src/​hyperlight_common/​src/​flatbuffers/​hyperlight/​generated/​edit_span_type_generated.rs Removes generated span-editing bindings.
src/​hyperlight_common/​src/​flatbuffers/​hyperlight/​generated/​close_span_type_generated.rs Removes generated span-closing bindings.
src/​hyperlight_common/​src/​flatbuffer_wrappers/​wire.rs Defines postcard wire types and encoding helpers.
src/​hyperlight_common/​src/​flatbuffer_wrappers/​mod.rs Registers wire encoding and ABI tests.
src/​hyperlight_common/​src/​flatbuffer_wrappers/​host_function_details.rs Removes FlatBuffers serialization conversions.
src/​hyperlight_common/​src/​flatbuffer_wrappers/​host_function_definition.rs Removes FlatBuffers definition conversions.
src/​hyperlight_common/​src/​flatbuffer_wrappers/​guest_log_level.rs Adds serde support for log levels.
src/​hyperlight_common/​src/​flatbuffer_wrappers/​guest_log_data.rs Uses postcard for logs and adds a round-trip test.
src/​hyperlight_common/​src/​flatbuffer_wrappers/​guest_error.rs Removes generated error-code conversions.
src/​hyperlight_common/​src/​flatbuffer_wrappers/​codec.rs Updates external-value documentation terminology.
src/​hyperlight_common/​Cargo.toml Replaces FlatBuffers with serde and postcard.
README.md Removes the schema-directory listing.
Justfile Updates fuzz targets and removes FlatBuffers tooling recipes.
fuzz/​README.md Documents control-decoder fuzzing.
fuzz/​fuzz_targets/​guest_trace_decode.rs Fuzzes trace decoding and event round trips.
fuzz/​fuzz_targets/​control_decode.rs Fuzzes call, result, and log decoding.
fuzz/​Cargo.toml Registers the decoder fuzz targets.
flake.nix Removes FlatBuffers development tooling.
docs/​virtio-host-guest-communication.md Documents postcard framing and external bytes.
docs/​snapshot-versioning.md Documents ABI 10 and wire-format enforcement.
docs/​security.md Describes serde/postcard decoding at the trust boundary.
docs/​security-guidance-for-developers.md Updates compatibility and message-validation guidance.
docs/​README.md Removes the FlatBuffers guide link.
docs/​how-to-use-flatbuffers.md Removes the obsolete generation guide.
CHANGELOG.md Records the breaking serialization change.
Cargo.lock Updates workspace serialization dependencies.
.github/​workflows/​ValidatePullRequest.yml Runs decoder fuzz targets during PR validation.
.github/​workflows/​Fuzzing.yml Updates the fuzzing target matrix.
.github/​workflows/​DailyArm64.yml Updates the trace-fuzzer name in a comment.
.github/​copilot-instructions.md Removes the obsolete schema-directory listing.

Review effort: Balanced

Comment thread docs/security.md Outdated
### Host-Guest Communication (Serialization and Deserialization)

All communication between the host and the guest is done through a shared memory buffer. Messages are serialized and deserialized using [FlatBuffers](https://flatbuffers.dev/). To minimize attack surface area, we rely on FlatBuffers to formally specify the data structures passed to/from the host and guest, and to generate serialization/deserialization code. Of course, a compromised guest can write arbitrary data to the shared memory buffer, but the host will not accept anything that does not match our strongly typed FlatBuffer [schemas](../src/schema).
All communication between the host and the guest is done through a shared memory buffer. Messages are serialized with [serde](https://serde.rs) into the [postcard](https://docs.rs/postcard) format, using strongly typed Rust definitions in `hyperlight-common`. The host copies guest data out of shared memory before decoding it. Decoding rejects malformed input and trailing bytes, and checks every length against fixed limits before allocating. A compromised guest can write arbitrary data to the shared memory buffer, but the host accepts only messages that decode into these types.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed. Lengths are bounded by the received message, not fixed limits.

Signed-off-by: Ludvig Liljenberg <4257730+ludfjig@users.noreply.github.com>
@hyperlight-gh-bot

Copy link
Copy Markdown

Benchmark Results

Measured commit: 91219d277cf2
Baseline commit: 01df99173865

kvm / amd (Linux) (🌟 5.19x)

Top improvements

  • function_call_codec/encode_control/vec_bytes — 🌟 5.19x faster
  • function_call_codec/encode_control/byte_chunks — 🌟 2.47x faster

Benchmark Results

function_call_codec

encode_control decode_vec_bytes_copy
byte_chunks 307.73 ns (🌟 2.47x faster)
vec_bytes 114.64 ns (🌟 5.19x faster)
372.24 µs (➖ 1.00x faster)

payload_allocation

slot_pool_segmented
262144 524.82 ns (➖ 1.05x faster)
65536 141.32 ns (➖ 1.03x faster)

sandboxes

create_initialized_and_drop
medium 13.00 ms (➖ 1.01x faster)

slot_pool

alloc_dealloc_128 alloc_dealloc_4096 alloc_dealloc_1500
7.76 ns (➖ 1.01x slower) 7.68 ns (➖ 1.00x faster) 7.69 ns (➖ 1.00x slower)

snapshot_files

load_snapshot_unverified
small 99.39 µs (➖ 1.01x slower)

virtq_readonly

slot_pool_segmented slot_pool_segmented_fragmented
262144 7.44 µs (➖ 1.01x slower) 7.29 µs (➖ 1.01x faster)
65536 2.00 µs (➖ 1.04x faster) 2.08 µs (➖ 1.09x slower)

virtq_readwrite

slot_pool_segmented slot_pool_segmented_fragmented
262144 28.14 µs (➖ 1.03x slower)
65536 6.70 µs (➖ 1.04x slower) 6.25 µs (➖ 1.04x faster)
8192 1.02 µs (➖ 1.01x slower) 1.03 µs (➖ 1.00x slower)
kvm / intel (Linux) (🌟 4.22x)

Top improvements

  • function_call_codec/encode_control/vec_bytes — 🌟 4.22x faster
  • function_call_codec/encode_control/byte_chunks — 🌟 2.73x faster

Benchmark Results

function_call_codec

encode_control decode_vec_bytes_copy
byte_chunks 310.79 ns (🌟 2.73x faster)
vec_bytes 121.71 ns (🌟 4.22x faster)
654.46 µs (➖ 1.00x slower)

payload_allocation

slot_pool_segmented
262144 497.44 ns (➖ 1.00x slower)
65536 169.43 ns (➖ 1.01x faster)

sandboxes

create_initialized_and_drop
medium 15.31 ms (➖ 1.03x faster)

slot_pool

alloc_dealloc_128 alloc_dealloc_4096 alloc_dealloc_1500
7.00 ns (➖ 1.03x slower) 6.91 ns (➖ 1.02x slower) 7.01 ns (➖ 1.04x slower)

snapshot_files

load_snapshot_unverified
small 48.88 µs (➖ 1.03x slower)

virtq_readonly

slot_pool_segmented slot_pool_segmented_fragmented
262144 7.55 µs (➖ 1.00x slower) 7.50 µs (➖ 1.01x slower)
65536 2.12 µs (➖ 1.01x slower) 2.11 µs (➖ 1.00x slower)

virtq_readwrite

slot_pool_segmented slot_pool_segmented_fragmented
262144 29.31 µs (➖ 1.02x faster)
65536 7.09 µs (➖ 1.01x faster) 6.98 µs (➖ 1.06x faster)
8192 700.07 ns (➖ 1.00x faster) 710.16 ns (➖ 1.05x faster)
mshv3 / amd (Linux) (🌟 4.91x)

Top improvements

  • function_call_codec/encode_control/vec_bytes — 🌟 4.91x faster
  • function_call_codec/encode_control/byte_chunks — 🌟 2.28x faster
  • virtq_readonly/slot_pool_segmented/262144 — ✅ 1.71x faster

Benchmark Results

function_call_codec

encode_control decode_vec_bytes_copy
byte_chunks 403.31 ns (🌟 2.28x faster)
vec_bytes 145.88 ns (🌟 4.91x faster)
360.54 µs (➖ 1.01x slower)

payload_allocation

slot_pool_segmented
262144 792.18 ns (➖ 1.08x slower)
65536 193.83 ns (➖ 1.00x slower)

sandboxes

create_initialized_and_drop
medium 53.82 ms (➖ 1.28x faster)

slot_pool

alloc_dealloc_128 alloc_dealloc_4096 alloc_dealloc_1500
13.02 ns (➖ 1.35x slower) 9.50 ns (➖ 1.01x faster) 10.07 ns (➖ 1.05x slower)

snapshot_files

load_snapshot_unverified
small 104.71 µs (➖ 1.08x faster)

virtq_readonly

slot_pool_segmented slot_pool_segmented_fragmented
262144 9.90 µs (✅ 1.71x faster) 10.73 µs (➖ 1.02x faster)
65536 2.27 µs (➖ 1.03x slower) 2.41 µs (➖ 1.01x faster)

virtq_readwrite

slot_pool_segmented slot_pool_segmented_fragmented
262144 36.54 µs (➖ 1.07x faster)
65536 8.52 µs (➖ 1.16x faster) 8.52 µs (➖ 1.16x faster)
8192 1.20 µs (➖ 1.02x faster) 1.21 µs (➖ 1.06x faster)
mshv3 / intel (Linux) (🌟 4.93x)

Top improvements

  • function_call_codec/encode_control/vec_bytes — 🌟 4.93x faster
  • function_call_codec/encode_control/byte_chunks — 🌟 2.42x faster

Benchmark Results

function_call_codec

encode_control decode_vec_bytes_copy
byte_chunks 395.87 ns (🌟 2.42x faster)
vec_bytes 134.06 ns (🌟 4.93x faster)
780.13 µs (➖ 1.22x slower)

payload_allocation

slot_pool_segmented
262144 680.26 ns (➖ 1.03x slower)
65536 244.91 ns (➖ 1.01x slower)

sandboxes

create_initialized_and_drop
medium 78.36 ms (➖ 1.07x slower)

slot_pool

alloc_dealloc_128 alloc_dealloc_4096 alloc_dealloc_1500
8.85 ns (➖ 1.01x slower) 8.71 ns (➖ 1.00x faster) 8.70 ns (➖ 1.00x faster)

snapshot_files

load_snapshot_unverified
small 55.56 µs (➖ 1.00x faster)

virtq_readonly

slot_pool_segmented slot_pool_segmented_fragmented
262144 8.12 µs (➖ 1.03x slower) 8.09 µs (➖ 1.02x slower)
65536 2.30 µs (➖ 1.01x slower) 2.28 µs (➖ 1.01x slower)

virtq_readwrite

slot_pool_segmented slot_pool_segmented_fragmented
262144 40.66 µs (➖ 1.09x slower)
65536 7.56 µs (➖ 1.01x faster) 7.65 µs (➖ 1.01x slower)
8192 896.64 ns (➖ 1.02x faster) 897.31 ns (➖ 1.01x faster)
hyperv-ws2025 / amd (Windows) (🌟 2.40x)

Top improvements

  • function_call_codec/encode_control/vec_bytes — 🌟 2.40x faster
  • function_call_codec/encode_control/byte_chunks — ✅ 1.68x faster

Benchmark Results

function_call_codec

encode_control decode_vec_bytes_copy
byte_chunks 701.60 ns (✅ 1.68x faster)
vec_bytes 318.73 ns (🌟 2.40x faster)
1.99 ms (➖ 1.01x slower)

payload_allocation

slot_pool_segmented
262144 792.80 ns (➖ 1.07x faster)
65536 237.27 ns (➖ 1.15x faster)

sandboxes

create_initialized_and_drop
medium 11.78 ms (➖ 1.04x faster)

slot_pool

alloc_dealloc_128 alloc_dealloc_4096 alloc_dealloc_1500
10.07 ns (➖ 1.01x slower) 9.99 ns (➖ 1.00x faster) 9.92 ns (➖ 1.00x slower)

snapshot_files

load_snapshot_unverified
small 754.44 µs (➖ 1.05x faster)

virtq_readonly

slot_pool_segmented slot_pool_segmented_fragmented
262144 9.34 µs (➖ 1.05x faster) 9.01 µs (➖ 1.06x faster)
65536 2.43 µs (➖ 1.21x faster) 2.48 µs (➖ 1.04x slower)

virtq_readwrite

slot_pool_segmented slot_pool_segmented_fragmented
262144 39.89 µs (➖ 1.04x slower)
65536 8.72 µs (➖ 1.00x slower) 9.10 µs (➖ 1.01x slower)
8192 1.31 µs (➖ 1.02x faster) 1.29 µs (➖ 1.02x faster)
hyperv-ws2025 / intel (Windows) (🌟 2.20x)

Top improvements

  • function_call_codec/encode_control/vec_bytes — 🌟 2.20x faster
  • function_call_codec/encode_control/byte_chunks — ✅ 1.67x faster

Benchmark Results

function_call_codec

encode_control decode_vec_bytes_copy
byte_chunks 749.25 ns (✅ 1.67x faster)
vec_bytes 360.14 ns (🌟 2.20x faster)
3.11 ms (➖ 1.03x slower)

payload_allocation

slot_pool_segmented
262144 746.63 ns (➖ 1.03x faster)
65536 208.53 ns (➖ 1.00x faster)

sandboxes

create_initialized_and_drop
medium 13.86 ms (➖ 1.02x slower)

slot_pool

alloc_dealloc_128 alloc_dealloc_4096 alloc_dealloc_1500
9.73 ns (➖ 1.00x faster) 10.42 ns (➖ 1.02x slower) 9.65 ns (➖ 1.00x slower)

snapshot_files

load_snapshot_unverified
small 684.34 µs (➖ 1.02x slower)

virtq_readonly

slot_pool_segmented slot_pool_segmented_fragmented
262144 7.71 µs (➖ 1.01x slower) 7.75 µs (➖ 1.01x slower)
65536 2.39 µs (➖ 1.04x slower) 2.34 µs (➖ 1.01x slower)

virtq_readwrite

slot_pool_segmented slot_pool_segmented_fragmented
262144 49.61 µs (➖ 1.01x slower)
65536 8.55 µs (➖ 1.01x slower) 8.30 µs (➖ 1.01x faster)
8192 1.07 µs (➖ 1.10x faster) 1.07 µs (➖ 1.01x faster)

Reported by cargo ci bench-report --candidate run:43294982031 --config-file bench_report.toml.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

C-refactor For PRs that restructure or remove code without adding new functionality. S-needs-goldens Regenerate snapshot golden fixtures

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Evaluate serde instead of flatbuffer

3 participants