Skip to content

aeckar/bincake

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

bincake

Serde-free deterministic binary serialization.

Rust Crates.io

Documentation

https://docs.rs/bincake

Overview

bincake serializes and deserializes Rust types to and from compact little-endian binary, with no dependency on serde.

  • Deterministic output — identical data always produces identical bytes
  • Derive macros for automatic implementation on custom types
    • Controlled by derive feature flag
  • Built on taped for zero-allocation byte reading
  • Numeric types, strings, vecs, and tuples supported out of the box

Originally developed as the bytecode serialization format for rvm, extracted as a standalone library after proving stable under real usage.

Example

use bincake::*;

#[derive(Serialize)]
struct Instruction {
    opcode: u8,
    operand: u32,
}

// Serialize
let instr = Instruction { opcode: 0x01, operand: 42 };
let mut dest = vec![];
dest.write(instr);

// Deserialize
let mut src = bytes.to_tape();
let instr = src.read::<Instruction>();

When to use this

  • Serializing bytecode, binary protocols, or other compact binary formats
  • Anywhere deterministic output is required (content hashing, signing)
  • Projects where serde compile times are a concern
  • no_std environments

When not to use this

  • Human-readable formats → use serde with serde_json or toml
  • Schema evolution and forward compatibility → use prost (protobuf)
  • Maximum encode/decode performance → use rkyv
  • Interoperability with other languages or systems → use bincode

About

Serde-free deterministic binary serialization.

Topics

Resources

License

Stars

Watchers

Forks

Contributors

Languages