Pure-Python encoder/decoder for the Crous binary serialization format — compact, canonical, and human-readable alternative to JSON
Project description
crous
A compact, canonical binary serializer and human-readable alternative to JSON — pure Python.
Overview
Crous is a production-grade binary serialization format that provides:
- Compact binary encoding — 2×–5× smaller than equivalent JSON
- Human-readable text notation — unique syntax with deterministic binary mapping
- Zero-copy decoding — borrow directly from input buffers
- Block-framed format — per-block XXH64 checksums for data integrity
- File I/O —
load()/dump()familiar API, likejson.load/json.dump - Cross-language — wire-compatible with the Rust implementation
Installation
pip install crous
Quick Start
import crous
# Encode any Python object
data = crous.encode({"name": "Alice", "age": 30, "active": True})
print(data[:7]) # b'CROUSv1'
# Decode back to Python
obj = crous.decode(data)
print(obj) # {'name': 'Alice', 'age': 30, 'active': True}
File I/O
import crous
# Write to a .crous file (like json.dump)
crous.dump({"name": "Alice", "age": 30}, "data.crous")
# Read from a .crous file (like json.load)
obj = crous.load("data.crous")
print(obj) # {'name': 'Alice', 'age': 30}
# Append a value to an existing file
crous.append({"event": "stop"}, "log.crous")
# Lossless round-trip with Value objects
from crous.value import Value
crous.dump_values([Value.str_("hello"), Value.uint(42)], "typed.crous")
values = crous.load_values("typed.crous")
print(values[0].type) # ValueType.STR
Human-Readable Text Format
{
name: "Alice";
age: 30;
tags: ["admin", "user"];
config: {
theme: "dark";
notifications: true;
};
avatar: b64#iVBORw0KGgo=;
}
Parse and pretty-print:
import crous
text = '{ name: "Alice"; age: 30; }'
value = crous.parse_text(text)
print(crous.pretty_print(value))
Encoder / Decoder Classes
from crous.encoder import Encoder
from crous.value import Value
enc = Encoder()
enc.enable_dedup() # Enable string deduplication
enc.encode_value(Value.from_python({"key": "value"}))
data = enc.finish()
from crous.decoder import Decoder
dec = Decoder(data)
values = dec.decode_all()
print(values[0].to_python())
Wire Format
File: [Header 8B] [Block]* [Trailer Block]
Header: "CROUSv1" (7B) | flags (1B)
Block: type(1B) | length(varint) | compression(1B) | checksum(8B) | payload
The format is deterministic: the same input always produces the same bytes.
Cross-Language Compatibility
Data encoded by the pure-Python crous package is fully wire-compatible with the Rust implementation (crous-core). Files can be written in Python and read in Rust, or vice versa.
License
Licensed under either of:
- MIT License (LICENSE-MIT)
- Apache License, Version 2.0 (LICENSE-APACHE)
at your option.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file crousr-1.0.0.tar.gz.
File metadata
- Download URL: crousr-1.0.0.tar.gz
- Upload date:
- Size: 29.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a98b5293381ea9a66c329294af4a21ef4b3bea9b1cede5c62bc2710bd420786c
|
|
| MD5 |
5eb317e520a493ac2652774043df8ecf
|
|
| BLAKE2b-256 |
e49889453ca9f553d8b5764f57e2eb1bab729d14aaf0333b64235ebd78be1993
|
File details
Details for the file crousr-1.0.0-py3-none-any.whl.
File metadata
- Download URL: crousr-1.0.0-py3-none-any.whl
- Upload date:
- Size: 19.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2d81d8e7fa85b309b3754e9b7f24769063eabfdab1f68c8df852a99551afd904
|
|
| MD5 |
9ba307b269e97d4319ed150eceee67af
|
|
| BLAKE2b-256 |
950e507ead6570e4e853c7e2347f194cac83903a510b84ee80122042a6134246
|