FWOB
FWOB is a Rust implementation of the Fixed-Width Ordered Binary format family.
The project has two compatibility goals:
- Fully support FWOB v1 files produced by the original C# library.
- Provide FWOB v2, a fixed-page compressed format for high-performance random access, range queries, and bulk append workloads.
FWOB v2 keeps page addresses arithmetic while allowing each page to contain a variable number of fixed-width frames. A page is a fixed-size on-disk container with a 64-byte header, compressed payload, and zero padding.
Workspace
fwob-core: shared schema, frame, key, reader/writer handles, service traits, and error types.fwob-derive: derive macro for strongly typed fixed-width frames.fwob-v1: FWOB v1 reader, writer, verifier, and compatibility tests.fwob-v2: compressed fixed-page FWOB v2 reader and writer.fwob: the primary library facade with auto-detectingReader,Writer,Editor,Maintenance, andOrganizerAPIs, plus the command-line tool.
The logical Rust API is documented in docs/api.md.
Installation
Install the command-line tool from crates.io:
Library crates are available separately as fwob, fwob-core, fwob-derive,
fwob-v1, and fwob-v2.
Library Quick Start
use ;
use ;
let schema = new?;
let mut writer = create_v2?;
writer.append_frame?;
writer.finish?;
let mut reader = open?;
let first = reader.first_frame?.expect;
assert_eq!;
# Ok::
See docs/api.md for reading, appending, editing, maintenance,
organization, typed-frame, and format-specific examples.
Command Examples
Positional tokens are case-sensitive. For example, v2, zstd, and 1MiB
are tokens; V2, ZSTD, and 1MIB are treated as paths or values rather than
their lowercase token forms.
Tuning Parameters
| Parameter | What It Controls | Typical Values |
|---|---|---|
| page-size token | Fixed physical page size. Integer with B, KB, KiB, MB, or MiB; range 1KiB..16MiB. |
512KiB (default), 1MB, 1MiB, 2MiB |
| codec token | Page compression codec. | zstd (default), lz4, smallest, none |
--zstd-level |
zstd compression level. Affects write/convert speed heavily, read speed lightly. | 3, 6 (default), 9, 12, 15, 19 |
| encoding token | Page payload layout before compression. smallest tries columnar-basic and columnar-delta per page and stores the winning concrete encoding in page metadata. |
row-raw, columnar-basic (default), columnar-delta, smallest |
| page-packing token | Packing strategy for compressed pages. | estimate-shrink (default), tight-fit |
compress-partial-page token |
Compress the final partial page instead of leaving the final non-overflowing remainder raw for append. | omitted (default), present |
Status
This repository is intentionally separate from the original C# implementation: https://github.com/stcmz/Mozo.Fwob. The v1 crate is designed as a production compatibility layer rather than a one-off converter so conversions can be verified byte-for-byte against existing files.