Vexil
Vexil is a schema language and toolchain for exact binary protocols. The schema defines the data model and its representation: bit widths, field ordinals, integer encodings, collection bounds, and evolution metadata are reviewable in one contract.
Pre-1.0: Vexil's components version independently. Read the support matrix and compatibility limits before adoption.
The defining choice
In many schema systems, a type describes a value while the codec decides how it is represented. Vexil makes representation part of the type contract:
message Reading {
channel @0 : u4
value @1 : u16
sequence @2 : u32 @varint
offset @3 : i32 @zigzag
}
channel is four bits. sequence uses unsigned LEB128. offset uses ZigZag
followed by LEB128. Those are language rules rather than conventions hidden in
application code.
What the toolchain provides
- a compiler with source-spanned diagnostics;
- Rust, TypeScript, Go, and Python code generation;
- deterministic canonical schema hashes using BLAKE3;
- compatibility classification for schema evolution;
- Rust, TypeScript, Go, and Python runtimes with different documented evidence levels;
- a conformance corpus and golden byte vectors.
The wire is not self-describing, and Vexil does not define transport, authentication, discovery, or compression. Applications own those layers.
A practical path
- Install the compiler.
- Write and check a schema.
- Generate code for your target.
- Run the curated examples.
- Review the support matrix for the exact target combination you intend to ship.