Conventions for RivetKit protocol crates that use BARE schemas with versioned codecs via vbare.
- New crates under
rivetkit-rust/packages/that should inherit repo-wide workspace deps must set[package] workspace = "../../../"and be added to the root/Cargo.tomlworkspace members.
- RivetKit protocol crates with BARE
uintfields usevbare_compiler::Config::with_hash_map()becauseserde_bare::Uintdoes not implementHash. - vbare schemas must define structs before unions reference them. Move legacy TS schemas' out-of-order definitions before adding them to Rust protocol crates.
- vbare types introduced in a later protocol version still need identity converters for skipped earlier versions so
serialize_with_embedded_version(latest)sees the right latest version.
- Protocol crate
build.rsTS codec generation followsengine/packages/runner-protocol/build.rs: run@bare-ts/tools, post-process to@rivetkit/bare-ts, and write generated imports underrivetkit-typescript/packages/rivetkit/src/common/bare/generated/<protocol>/.
- RivetKit core actor/inspector BARE protocol code uses generated protocol crates plus
vbare::OwnedVersionedData, not hand-rolled BARE cursors or writers. - The high-level
rivetkitcrate stays a thin typed wrapper overrivetkit-coreand re-exports shared transport/config types instead of redefining them. - When
rivetkitneeds ergonomic helpers on arivetkit-coretype it re-exports, prefer an extension trait pluspreludere-export instead of wrapping and replacing the core type.