LNMP (LLM Native Minimal Protocol) is a minimal, tokenizer-friendly, semantic-ID-based data format designed for data exchange with large language models (LLMs).
📋 FID Registry: All Field IDs have official definitions in
registry/fids.yaml. Seespec/fid-governance.mdfor governance rules.
- 🚀 Minimal syntax - Token reduction compared to JSON
- 🔢 Semantic IDs - Uses numeric field IDs for efficient learning
- 📖 Human-readable - Text-based format that's easy to read and debug
- 🦀 Pure Rust - Memory-safe implementation with minimal dependencies
- 🏗️ Nested structures - Support for hierarchical data modeling (v0.3)
- 🔒 Semantic checksums - SC32 checksums for drift prevention (v0.3)
- 🎯 LLM-optimized - Prompt visibility optimization and ShortForm encoding (v0.3)
- ⚡ Binary protocol - Efficient binary encoding with 30-50% size reduction (v0.4)
- 🔄 Bidirectional conversion - Seamless text ↔ binary transformation (v0.4)
- 📦 VarInt encoding - Space-efficient integer representation (v0.4)
- 🌳 Binary nested structures - Recursive encoding for hierarchical data (v0.5)
- 📡 Streaming support - Chunked transmission for large payloads (v0.5)
- 🤝 Schema negotiation - Capability exchange and version negotiation (v0.5)
- 🔄 Delta encoding - Bandwidth-efficient incremental updates (v0.5)
- 🧠 LLB2 optimization - Enhanced LLM context optimization (v0.5)
- 🧬 Embedding support - Native vector embeddings with delta encoding (v0.5)
- 🛡️ Input sanitization - Security-focused input validation and sanitization (v0.5)
- 📍 Spatial awareness - Physical coordinates and transformations with hybrid protocol (v0.5.2)
- ✅ Well-tested - Comprehensive test suite with multi-language compliance tests
- 📉 Quantization - Adaptive vector quantization (FP16, Int8, Int4, Binary) with batch processing (v0.5.4)
- 🔧 Generic Arrays - IntArray, FloatArray, BoolArray for efficient numeric data (v0.5.5)
- 🎯 Strict Profiles - Configurable validation levels (Loose/Standard/Strict) (v0.5.5)
- 🏗️ RecordBuilder - Fluent API for canonical record construction (v0.5.5)
- 🧠 Context Profiling - Automatic scoring for LLM prioritization (freshness, importance, risk, confidence) (v0.5.7)
- 🌐 Network Intelligence -
lnmp-netlayer for message classification, QoS, and intelligent routing (v0.5.7) - 🚀 Transport bindings - Standard mappings for HTTP, Kafka, gRPC, NATS with W3C Trace Context and OpenTelemetry integration (v0.5.7)
Add LNMP to your Cargo.toml:
[dependencies]
lnmp = "0.5.15"Or use cargo:
cargo add lnmpuse lnmp::prelude::*;
fn main() -> Result<(), Box<dyn std::error::Error>> {
// Parse LNMP text
let text = "F12=14532;F7=1;F23=[admin,dev]";
let mut parser = Parser::new(text)?;
let record = parser.parse_record()?;
// Access fields
if let Some(field) = record.get_field(12) {
println!("User ID: {:?}", field.value);
}
// Create records with RecordBuilder
let new_record = RecordBuilder::new()
.add_field(LnmpField { fid: 12, value: LnmpValue::Int(14532) })
.add_field(LnmpField { fid: 7, value: LnmpValue::Bool(true) })
.build();
// Encode to text
let encoder = Encoder::new();
let output = encoder.encode(&new_record);
println!("{}", output); // F7=1\nF12=14532
Ok(())
}For more examples, see the examples/ directory in individual crates or the lnmp-examples repository.
This is a Pure Protocol repository containing the core Rust crates:
- lnmp-core (v0.5.13): Core type definitions and data structures
- lnmp-codec (v0.5.13): Parser and encoder implementations
- lnmp-embedding (v0.5.13): Vector embedding support
- lnmp-envelope (v0.5.13): Operational metadata envelope
- lnmp-spatial (v0.5.13): Spatial awareness types
- lnmp-quant (v0.5.13): Adaptive quantization
- lnmp-llb (v0.5.13): LNMP-LLM Bridge Layer
- lnmp-sfe (v0.5.13): Semantic Fidelity Engine
- lnmp-net (v0.5.13): Network behavior layer
- lnmp-sanitize (v0.5.13): Input sanitization
- lnmp-transport (v0.5.13): Transport bindings
The LNMP ecosystem consists of several repositories:
- Python:
lnmp-sdk-python - TypeScript/JS:
lnmp-sdk-js - Rust:
lnmp-sdk-rust - Go:
lnmp-sdk-go
- CLI:
lnmp-cli - MCP Server:
lnmp-mcp - VS Code Extension:
lnmp-vscode
- Showcase:
lnmp-showcase- City Pulse Demo - Examples:
lnmp-examples
The easiest way to get started is with the lnmp meta crate, which includes all LNMP modules:
[dependencies]
lnmp = "0.5.15"Then use the convenient prelude:
use lnmp::prelude::*;
// Parse LNMP text
let lnmp_text = r#"F12=14532;F7=1;F23=["admin","dev"]"#;
let mut parser = Parser::new(lnmp_text).unwrap();
let record = parser.parse_record().unwrap();
// Encode LNMP text
let mut record = LnmpRecord::new();
record.add_field(LnmpField {
fid: 12,
value: LnmpValue::Int(14532),
});
let encoder = Encoder::new();
println!("{}", encoder.encode(&record)); // F12=14532All modules are accessible:
use lnmp::{core, codec, embedding, spatial, quant, llb, sfe, sanitize};For fine-grained control, you can use individual crates:
[dependencies]
lnmp-core = "0.5.7"
lnmp-codec = "0.5.7"Developing against a local checkout? Replace the version strings with
path = "../lnmp-protocol/crates/…". SeeREPO-STRUCTURE.mdfor details.
use lnmp_codec::Parser;
let lnmp_text = r#"F12=14532;F7=1;F23=["admin","dev"]"#;
let mut parser = Parser::new(lnmp_text).unwrap();
let record = parser.parse_record().unwrap();
println!("User ID: {:?}", record.get_field(12).unwrap().value);use lnmp_codec::Encoder;
use lnmp_core::{LnmpField, LnmpRecord, LnmpValue};
let mut record = LnmpRecord::new();
record.add_field(LnmpField {
fid: 12,
value: LnmpValue::Int(14532),
});
let encoder = Encoder::new();
println!("{}", encoder.encode(&record)); // F12=14532use lnmp_codec::binary::{BinaryEncoder, BinaryDecoder};
// Encode text to binary
let text = "F7=1\nF12=14532\nF23=[admin,dev]";
let encoder = BinaryEncoder::new();
let binary = encoder.encode_text(text).unwrap();
// Decode binary to text
let decoder = BinaryDecoder::new();
let decoded_text = decoder.decode_to_text(&binary).unwrap();
// Round-trip conversion maintains data integrity
assert_eq!(text, decoded_text);use lnmp_codec::binary::{BinaryNestedEncoder, BinaryNestedDecoder, NestedEncoderConfig};
use lnmp_core::{LnmpField, LnmpRecord, LnmpValue};
// Create nested record (F70=nested_data, F12=user_id from registry)
let mut inner = LnmpRecord::new();
inner.add_field(LnmpField { fid: 12, value: LnmpValue::Int(42) });
let mut outer = LnmpRecord::new();
outer.add_field(LnmpField {
fid: 70, // F70=nested_data
value: LnmpValue::NestedRecord(Box::new(inner)),
});
// Encode with nested support
let config = NestedEncoderConfig::new().with_max_depth(32);
let encoder = BinaryNestedEncoder::with_config(config);
let binary = encoder.encode_nested_record(&outer).unwrap();use lnmp_codec::binary::{StreamingEncoder, StreamingConfig};
let config = StreamingConfig::new()
.with_chunk_size(4096)
.with_checksums(true);
let mut encoder = StreamingEncoder::with_config(config);
// Stream in chunks
let begin = encoder.begin_stream().unwrap();
let chunk = encoder.write_chunk(&data).unwrap();
let end = encoder.end_stream().unwrap();use lnmp_codec::binary::{DeltaEncoder, DeltaConfig};
let config = DeltaConfig::new().with_delta_enabled(true);
let encoder = DeltaEncoder::with_config(config);
// Compute delta between records
let delta_ops = encoder.compute_delta(&old_record, &new_record).unwrap();
let delta_binary = encoder.encode_delta(&delta_ops).unwrap();
// 50%+ bandwidth savings for typical updatesLNMP uses field assignments in the format F<field_id>=<value>:
# Inline format (semicolon-separated)
F12=14532;F7=1;F23=["admin","dev"]
# Multiline format (canonical)
F7=1
F12=14532
F20="Halil"
F23=["admin","dev"]
# With type hints
F12:i=14532
F7:b=1
F23:sa=["admin","dev"]
# With checksums (v0.3)
F12:i=14532#36AAE667
F7:b=1#A3F2B1C4
# Nested structures (v0.3)
# F70=nested_data, F71=record_list, F20=name from registry
F70={F12=1;F7=1}
F71=[{F20=alice},{F20=bob}]
Primitive Types:
- Integers:
F1=42,F2=-123 - Floats:
F40=3.14,F41=-2.5 - Booleans:
F7=1(true),F8=0(false) - Strings:
F20="hello world",F21=simple_string - Arrays:
F23=["admin","dev"](StringArray) - > Typed numeric arrays (IntArray, FloatArray, BoolArray) now parse from text when the corresponding
:ia/:fa/:bahints are supplied, matching the codec and binary representations.
Nested Types (v0.3):
- Nested Records:
F70={F12=1;F7=1}- Records within records (F70=nested_data) - Record Arrays:
F71=[{F20=alice},{F20=bob}]- Arrays of records (F71=record_list)
Quoted strings support escape sequences:
\"- Double quote\\- Backslash\n- Newline\r- Carriage return\t- Tab
Prevent LLM input drift with semantic checksums:
use lnmp_codec::{Encoder, EncoderConfig};
let config = EncoderConfig {
enable_checksums: true,
..Default::default()
};
let encoder = Encoder::with_config(config);
let output = encoder.encode(&record);
// Output: F12:i=14532#36AAE667Features:
- SC32 checksums (32-bit CRC32-based)
- Value normalization (booleans, floats, strings)
- Equivalence mapping (synonym recognition)
Model hierarchical data with nested structures:
// Nested record (F70=nested_data from registry)
let input = "F70={F12=1;F7=1}";
// Record array (F71=record_list, F20=name from registry)
let input = "F71=[{F20=alice},{F20=bob}]";
// Deep nesting
let input = "F70={F20=user;F70={F30=nested;F31=data}}";Features:
- Arbitrary nesting depth
- Structural canonicalization
- Deterministic field ordering at all levels
Optimize for LLM tokenization:
// Explain mode - human-readable comments
F12:i=14532 # user_id
F7:b=1 # is_active
// ShortForm - extreme token reduction
12=14532 7=1 23=[admin,dev]Features:
- Prompt visibility optimization
- Explain mode encoding
- ShortForm encoding (7-12× reduction vs JSON)
Formal grammar specification for multi-language implementations:
- PEG grammar specification
- EBNF specification
- Error classification system
- Multi-language compliance test suite (Rust, Python, TypeScript, C++)
Encode hierarchical data in binary format with depth and size validation:
use lnmp_codec::binary::{BinaryNestedEncoder, NestedEncoderConfig};
let config = NestedEncoderConfig::new()
.with_max_depth(32)
.with_max_record_size(Some(1_000_000));
let encoder = BinaryNestedEncoder::with_config(config);
let binary = encoder.encode_nested_record(&nested_record).unwrap();Features:
- TypeTag 0x06 for nested records
- TypeTag 0x07 for nested arrays
- Configurable depth limits (default: 32)
- Optional size limits for security
- Automatic canonical ordering
Stream large payloads in chunks with integrity checking:
use lnmp_codec::binary::{StreamingEncoder, StreamingConfig};
let config = StreamingConfig::new()
.with_chunk_size(4096)
.with_checksums(true);
let mut encoder = StreamingEncoder::with_config(config);
// BEGIN frame
let begin = encoder.begin_stream().unwrap();
// CHUNK frames
let chunk = encoder.write_chunk(&data).unwrap();
// END frame
let end = encoder.end_stream().unwrap();Features:
- Frame types: BEGIN (0xA0), CHUNK (0xA1), END (0xA2), ERROR (0xA3)
- XOR checksum validation
- Backpressure flow control
- Configurable chunk size (default: 4KB)
- Error recovery
Negotiate capabilities before data exchange:
use lnmp_codec::binary::{SchemaNegotiator, Capabilities, FeatureFlags};
let features = FeatureFlags {
supports_nested: true,
supports_streaming: true,
supports_delta: true,
supports_llb: true,
requires_checksums: true,
requires_canonical: true,
};
let caps = Capabilities {
version: 5,
features,
supported_types: vec![/* ... */],
};
let mut negotiator = SchemaNegotiator::new(caps);
let msg = negotiator.initiate().unwrap();Features:
- Capability exchange
- Feature flag negotiation
- FID conflict detection
- Type mismatch detection
- Protocol version negotiation
- Graceful degradation
Query and synchronize FID registries between peers:
use lnmp_codec::binary::{SchemaNegotiator, FidDefinition, FidDefStatus, TypeTag};
use lnmp_core::registry::RegistrySync;
// Request peer's FID registry
let mut negotiator = SchemaNegotiator::v0_5()
.with_registry_version("1.0.0".into());
let request = negotiator.request_registry(None);
// Check FID support after discovery
if negotiator.peer_supports_fid(12) {
println!("Peer supports user_id field");
}
// Multi-peer registry sync
let mut sync = RegistrySync::with_embedded();
sync.register_peer("peer-1".into(), "0.9.0".into());
if sync.is_ahead_of("peer-1") {
let delta_fids = sync.delta_fids_for("peer-1");
}Features:
- RequestRegistry/RegistryResponse protocol
- Incremental RegistryDelta sync
- Peer FID support queries
- Version-aware registry sync
Send only changed fields for bandwidth efficiency:
use lnmp_codec::binary::{DeltaEncoder, DeltaConfig};
let config = DeltaConfig::new().with_delta_enabled(true);
let encoder = DeltaEncoder::with_config(config);
let delta_ops = encoder.compute_delta(&old_record, &new_record).unwrap();
let delta_binary = encoder.encode_delta(&delta_ops).unwrap();Features:
- Delta operations: SET_FIELD, DELETE_FIELD, UPDATE_FIELD, MERGE_RECORD
- 50%+ bandwidth savings for typical updates
- Nested record merging
- Incremental update chains
Enhanced context optimization with binary integration:
use lnmp_llb::{LlbConverter, LlbConfig};
let config = LlbConfig::new()
.with_flattening(true)
.with_semantic_hints(true)
.with_collision_safe_ids(true);
let converter = LlbConverter::new(config);
// Binary to ShortForm
let shortform = converter.binary_to_shortform(&binary).unwrap();
// Flatten nested structures
let flattened = converter.flatten_nested(&nested_record).unwrap();Features:
- Binary ↔ ShortForm conversion
- Binary ↔ FullText conversion
- Nested structure flattening
- Semantic hint embedding
- Collision-safe ID generation
# Build all crates
cargo build
# Run tests
cargo test
# Run examples
cargo run --example parse_example
cargo run --example encode_example
cargo run --example round_trip
# Run v0.3 examples
cargo run -p lnmp-core --example nested_structures
cargo run -p lnmp-core --example semantic_checksums
cargo run -p lnmp-core --example explain_mode
cargo run -p lnmp-core --example shortform
# Run v0.4 binary format examples
cargo run -p lnmp-codec --example binary_encoding
cargo run -p lnmp-codec --example binary_roundtrip
# Run v0.5 advanced protocol examples
cargo run -p lnmp-codec --example v05_nested_binary
cargo run -p lnmp-codec --example v05_streaming
cargo run -p lnmp-core --example v05_schema_negotiation
cargo run -p lnmp-codec --example v05_delta_encoding
cargo run -p lnmp-llb --example v05_llb2_binary
# Run compliance tests
cargo test --package lnmp-codec -- spec_compatibility
# Generate documentation
cargo doc --openSee the examples/ directory in individual crates for complete examples:
Basic Examples:
parse_example.rs- Parsing LNMP textencode_example.rs- Creating and encoding recordsround_trip.rs- Parse → Encode → Parse round-trip
v0.2 Examples:
type_hints.rs- Type hint usagestrict_vs_loose.rs- Parsing mode comparisondeterministic_serialization.rs- Canonical format
v0.3 Examples:
nested_structures.rs- Nested records and arrayssemantic_checksums.rs- SC32 checksum usageexplain_mode.rs- Explain mode encodingshortform.rs- ShortForm encoding/parsingstructural_canonicalization.rs- Structural canonicalization
v0.4 Examples (Binary Format):
binary_encoding.rs- Basic binary encoding and decodingbinary_roundtrip.rs- Round-trip conversion and data integrity
v0.5 Examples (Advanced Protocol):
v05_nested_binary.rs- Binary nested structures with depth/size validationv05_streaming.rs- Streaming Frame Layer with backpressure controlv05_schema_negotiation.rs- Capability negotiation and conflict detectionv05_delta_encoding.rs- Delta operations with bandwidth savingsv05_llb2_binary.rs- LLB2 integration with binary format
- Rust 1.70.0 or later
- Cargo (comes with Rust)
- v0.5 Specification: See
specs/lnmp-v0.5-advanced-protocol/requirements.md- Formal requirements using EARS patternsdesign.md- Architecture and component design
- Migration Guides - Version upgrade guides (v0.3 → v0.4 → v0.5)
- API Reference - Complete API documentation for Rust, TypeScript, and other SDKs
- v0.3 Specification: See
specs/lnmp-v0.3-semantic-fidelity/ - Grammar Specification - Formal grammar for LNMP v0.5EG/EBNF specification
- Error Classes: See
spec/error-classes.mdfor error classification
The project includes comprehensive tests:
- Unit tests: Core functionality tests in all crates
- Integration tests: Round-trip and cross-crate tests
- Spec compatibility: Tests verifying spec compliance
- Compliance tests: Multi-language test suite (Rust, Python, TypeScript, C++)
# Run all tests
cargo test
# Run specific test suite
cargo test --package lnmp-codec
cargo test --package lnmp-core
cargo test --package lnmp-sfe
cargo test --package lnmp-llb
# Run compliance tests
cd tests/compliance/rust && cargo test
cd tests/compliance/python && pytest
cd tests/compliance/typescript && npm test
cd tests/compliance/cpp && make testZero-Copy Decoding (v0.5.15):
| Payload Size | Standard | Zero-Copy | Speedup |
|---|---|---|---|
| Small (3 fields) | 248 ns | 92 ns | 2.70x |
| Medium (7 fields) | 610 ns | 164 ns | 3.71x |
| Large (embeddings) | 18.3 μs | 2.1 μs | 8.91x |
Throughput:
- Large records: 1.04 GiB/s (zero-copy) vs 0.12 GiB/s (standard)
- Batch processing: 3x faster (1000 records in 55 μs)
Other Performance Metrics:
- No regex dependencies, hand-written lexer
- Minimal allocations during parsing
- SC32 checksum computation: <1μs per field
- Nested parsing: <10μs for 3-level nesting
- Token reduction: 7-12× vs JSON (ShortForm mode)
- Delta encoding savings: >50% for typical updates (v0.5)
- Semantic checksums (SC32)
- Nested structures (records and arrays)
- Value normalization and equivalence mapping
- Formal PEG/EBNF grammar
- Multi-language compliance test suite
- LLM-optimized encoding (explain mode, ShortForm)
- Binary protocol format with version 0x04
- VarInt encoding for space-efficient integers
- Bidirectional text ↔ binary conversion
- 30-50% size reduction compared to text format
- Canonical binary form with deterministic field ordering
- Type-safe binary encoding with explicit type tags
- Round-trip conversion guarantees
- Binary Nested Structures (BNS): Recursive encoding with TypeTag 0x06/0x07
- Streaming Frame Layer (SFL): Chunked transmission with BEGIN/CHUNK/END frames
- Schema Negotiation Layer (SNL): Capability exchange and version negotiation
- Delta Encoding & Partial Update Layer (DPL): Bandwidth-efficient incremental updates
- LLM Optimization Layer v2 (LLB2): Enhanced context optimization with binary integration
- Depth validation (default 32 levels)
- Size limits for security
- XOR checksum validation
- Backpressure flow control
- FID conflict detection
- Type mismatch detection
- 50%+ bandwidth savings with delta encoding
- Spatial Type System: Position, Rotation, Velocity, Acceleration, Quaternion, BoundingBox
- Binary Spatial Codec: 2-3ns encode/decode latency
- Delta Encoding: Position/Rotation deltas with 99% bandwidth reduction
- Hybrid Protocol: Automatic ABS/DELTA mixing (1% ABS, 99% DELTA)
- Predictive Delta: Dead reckoning for packet loss resilience
- Frame Integrity: CRC32 checksums and nanosecond timestamps
- High Frequency: Verified at 1kHz control loops
- Streaming Telemetry: Continuous robot state transmission
- Safety Features: Configurable prediction limits, drift correction
- Use Cases: Robot control, autonomous vehicles, AR/VR, simulation
use lnmp_spatial::protocol::{SpatialStreamer, SpatialStreamerConfig};
// Configure hybrid protocol
let config = SpatialStreamerConfig {
abs_interval: 100, // ABS frame every 100 frames (drift correction)
enable_prediction: true, // Enable predictive delta (packet loss handling)
max_prediction_frames: 3, // Max 3 consecutive predictions
};
let mut streamer = SpatialStreamer::with_config(config);
// Sender: Generate frames
let frame = streamer.next_frame(&robot_state, timestamp_ns)?;
// Automatically uses DELTA (99%) or ABS (1%) based on sequence
// Receiver: Process frames
let state = streamer.process_frame(&frame)?;
// Automatically handles packet loss with prediction fallbackPerformance:
- Encode/Decode: 2-3 ns per operation
- Bandwidth: 99% reduction with DELTA
- Frequency: 1kHz control loop verified
- Packet Loss: Predictive fallback maintains smooth operation
Examples:
cargo run -p lnmp-spatial --example robot # Robot + Embedding integration
cargo run -p lnmp-spatial --example stream # Continuous telemetry
cargo run -p lnmp-spatial --example jitter_sim # 1kHz control loop
cargo run -p lnmp-spatial --example reflex_sim # Prediction vs non-prediction- Adaptive Quantization: Auto-select scheme based on accuracy/compression targets
- FP16 Passthrough: Near-lossless 2x compression (~99.9% accuracy)
- QInt8: 4x compression with high fidelity (~99% similarity)
- QInt4: 8x compression for balanced efficiency (~95% similarity)
- Binary: 32x compression for maximum density (~85% similarity)
- Batch Processing: Efficient API for processing multiple vectors
- Zero Overhead: Adaptive selection compiles to direct calls
use lnmp_quant::adaptive::{quantize_adaptive, AccuracyTarget};
use lnmp_quant::batch::quantize_batch;
// Adaptive: Select best scheme for target
let q = quantize_adaptive(&emb, AccuracyTarget::High)?; // Uses QInt8
// Batch: Process multiple vectors efficiently
let results = quantize_batch(&embeddings, QuantScheme::QInt8);
println!("Processed {} vectors in {:?}", results.stats.total, results.stats.total_time);Performance:
- Adaptive Overhead: Zero (negligible)
- Batch Overhead: <150ns per vector
- Throughput: >2M vectors/sec (FP16)
- Generic Arrays:
IntArray,FloatArray,BoolArrayfor efficient numeric data - Strict Determinism:
LnmpProfile(Loose, Standard, Strict) for validation - RecordBuilder: Fluent API for canonical record construction
- Enhanced Validation: Runtime field ordering checks
- Enhanced Validation: Runtime field ordering checks
- Performance: Sub-microsecond operations for all core types
- Semantic Message Types: Event, State, Command, Query, Alert
- QoS Primitives: Priority (0-255) and TTL for network behavior
- ECO Profile: Energy/Token Optimization routing (90% reduction in LLM calls)
- Intelligent Routing: Route based on importance score + freshness
- Transport Integration: Header mappings for HTTP, Kafka, NATS, gRPC
v0.5 is fully backward compatible with v0.4 and v0.3. All existing code continues to work without changes.
New Features (Optional):
- Binary nested structures:
BinaryNestedEncoderandBinaryNestedDecoder - Streaming support:
StreamingEncoderandStreamingDecoder - Schema negotiation:
SchemaNegotiatorwithCapabilities - Delta encoding:
DeltaEncoderandDeltaDecoder - Enhanced LLB2:
LlbConverterwith binary integration
No Breaking Changes:
- All v0.4 binary format remains valid
- All v0.3 text format remains valid
- Existing encoders/decoders work unchanged
- New features are opt-in via configuration
Recommended Updates:
- Use binary nested structures for hierarchical data
- Enable streaming for large payloads (>4KB)
- Add schema negotiation for new integrations
- Use delta encoding for frequent updates
- Apply LLB2 flattening for LLM consumption
See MIGRATION_V05.md for detailed migration guide.
v0.3 is fully backward compatible with v0.2. All v0.2 code continues to work without changes.
New Features (Optional):
- Enable checksums:
EncoderConfig { enable_checksums: true, .. } - Use nested structures:
LnmpValue::NestedRecordandLnmpValue::NestedArray - Apply normalization:
EncoderConfig { normalization_config: Some(..), .. } - Add equivalence mapping:
EncoderConfig { equivalence_mapper: Some(..), .. }
See individual crate READMEs for detailed migration guides.
Contributions are welcome! Please see the following:
- Issues: Report bugs or request features on GitHub
- Pull Requests: Submit PRs with tests and documentation
- Compliance Tests: Add test cases to
tests/compliance/test-cases.yaml - Language Implementations: Follow the compliance test suite for new languages
MIT OR Apache-2.0