# Libertaria SDK **The Core Protocol Stack for Libertaria Applications** **Version:** 0.1.0-alpha **License:** TBD **Language:** Zig 0.15.x **Status:** Alpha (L0+L1 Foundation) --- ## What is Libertaria SDK? The Libertaria SDK provides the foundational L0 (Transport) and L1 (Identity/Crypto) layers for building Libertaria-compatible applications. **It implements:** - **RFC-0000:** Libertaria Wire Frame Protocol (LWF) - **RFC-0100:** Entropy Stamps (anti-spam PoW) - **RFC-0110:** Membrane Agent primitives - **RFC-0250:** Larval Identity Protocol (SoulKey) **Design Goals:** - ✅ **Kenya-compliant:** <200 KB binary size - ✅ **Static linking:** No runtime dependencies - ✅ **Cross-platform:** ARM, MIPS, RISC-V, x86, WebAssembly - ✅ **Zero-copy:** Efficient packet processing - ✅ **Auditable:** Clear, explicit code --- ## Layers ### L0: Transport Layer **Module:** `l0-transport/` Implements the core wire protocol: - **LWF Frame Codec** - Encode/decode wire frames - **UTCP** - Reliable transport over UDP (future) - **Frame Validation** - Checksum, signature verification - **Priority Queues** - Traffic shaping **Key Files:** - `lwf.zig` - LWF frame structure and codec - `utcp.zig` - UTCP transport (future) - `validation.zig` - Frame validation logic --- ### L1: Identity & Cryptography Layer **Module:** `l1-identity/` Implements identity and cryptographic primitives: - **SoulKey** - Ed25519 signing, X25519 key agreement - **Entropy Stamps** - Proof-of-work anti-spam - **AEAD Encryption** - XChaCha20-Poly1305 - **Post-Quantum** - Kyber-768 KEM (future) **Key Files:** - `soulkey.zig` - Identity keypair management - `entropy.zig` - Entropy Stamp creation/verification - `crypto.zig` - Encryption primitives --- ## Installation ### Option 1: Git Submodule (Recommended) ```bash # Add SDK to your Libertaria app cd your-libertaria-app git submodule add https://git.maiwald.work/Libertaria/libertaria-sdk libs/libertaria-sdk git submodule update --init ``` ### Option 2: Manual Clone ```bash # Clone SDK git clone https://git.maiwald.work/Libertaria/libertaria-sdk cd libertaria-sdk zig build test # Verify it works ``` ### Option 3: Zig Package Manager (Future) ```zig // build.zig.zon .{ .name = "my-app", .version = "0.1.0", .dependencies = .{ .libertaria_sdk = .{ .url = "https://git.maiwald.work/Libertaria/libertaria-sdk/archive/v0.1.0.tar.gz", .hash = "1220...", }, }, } ``` --- ## Usage ### Basic Integration ```zig // your-app/build.zig const std = @import("std"); pub fn build(b: *std.Build) void { const target = b.standardTargetOptions(.{}); const optimize = b.standardOptimizeOption(.{}); // Link Libertaria SDK (static) const sdk_l0 = b.addStaticLibrary(.{ .name = "libertaria_l0", .root_source_file = b.path("libs/libertaria-sdk/l0-transport/lwf.zig"), .target = target, .optimize = optimize, }); const sdk_l1 = b.addStaticLibrary(.{ .name = "libertaria_l1", .root_source_file = b.path("libs/libertaria-sdk/l1-identity/crypto.zig"), .target = target, .optimize = optimize, }); // Your app const exe = b.addExecutable(.{ .name = "my-app", .root_source_file = b.path("src/main.zig"), .target = target, .optimize = optimize, }); exe.linkLibrary(sdk_l0); exe.linkLibrary(sdk_l1); b.installArtifact(exe); } ``` ### Example: Send LWF Frame ```zig const std = @import("std"); const lwf = @import("libs/libertaria-sdk/l0-transport/lwf.zig"); pub fn main() !void { var gpa = std.heap.GeneralPurposeAllocator(.{}){}; defer _ = gpa.deinit(); const allocator = gpa.allocator(); // Create LWF frame var frame = try lwf.LWFFrame.init(allocator, 100); defer frame.deinit(allocator); frame.header.service_type = std.mem.nativeToBig(u16, 0x0A00); // FEED_WORLD_POST frame.header.flags = 0x01; // ENCRYPTED // Encode to bytes const encoded = try frame.encode(allocator); defer allocator.free(encoded); std.debug.print("Encoded frame: {} bytes\n", .{encoded.len}); } ``` --- ## Building the SDK ### Build Static Libraries ```bash cd libertaria-sdk zig build # Output: # zig-out/lib/liblibertaria_l0.a # zig-out/lib/liblibertaria_l1.a ``` ### Run Tests ```bash zig build test # Should output: # All tests passed. ``` ### Build Examples ```bash zig build examples ./zig-out/bin/lwf_example ``` --- ## SDK Structure ``` libertaria-sdk/ ├── README.md # This file ├── LICENSE # TBD ├── build.zig # SDK build system ├── l0-transport/ # L0: Transport layer │ ├── lwf.zig # LWF frame codec │ ├── utcp.zig # UTCP transport (future) │ ├── validation.zig # Frame validation │ └── test_lwf.zig # L0 tests ├── l1-identity/ # L1: Identity & crypto │ ├── soulkey.zig # SoulKey (Ed25519/X25519) │ ├── entropy.zig # Entropy Stamps │ ├── crypto.zig # XChaCha20-Poly1305 │ └── test_crypto.zig # L1 tests ├── tests/ # Integration tests │ ├── integration_test.zig │ └── fixtures/ ├── docs/ # Documentation │ ├── API.md # API reference │ ├── INTEGRATION.md # Integration guide │ └── ARCHITECTURE.md # Architecture overview └── examples/ # Example code ├── lwf_example.zig ├── encryption_example.zig └── entropy_example.zig ``` --- ## Performance ### Binary Size ``` Static library sizes (ReleaseSafe): liblibertaria_l0.a: ~80 KB liblibertaria_l1.a: ~120 KB Total SDK: ~200 KB App with SDK linked: ~500 KB (Feed client) ``` ### Benchmarks (Raspberry Pi 4) ``` LWF Frame Encode: ~5 µs LWF Frame Decode: ~6 µs XChaCha20 Encrypt: ~12 µs (1 KB payload) Ed25519 Sign: ~45 µs Ed25519 Verify: ~120 µs Entropy Stamp (d=20): ~1.2 seconds ``` --- ## Versioning The SDK follows semantic versioning: - **0.1.x** - Alpha (L0+L1 foundation) - **0.2.x** - Beta (UTCP, OPQ) - **0.3.x** - RC (Post-quantum) - **1.0.0** - Stable **Breaking changes:** Major version bump (1.x → 2.x) **New features:** Minor version bump (1.1 → 1.2) **Bug fixes:** Patch version bump (1.1.1 → 1.1.2) --- ## Dependencies **Zero runtime dependencies!** **Build dependencies:** - Zig 0.15.x or later - Git (for submodules) **The SDK uses only Zig's stdlib:** - `std.crypto` - Cryptographic primitives - `std.mem` - Memory utilities - `std.net` - Network types (future) --- ## Contributing See [CONTRIBUTING.md](CONTRIBUTING.md) (TODO) **Code Style:** - Follow Zig conventions - Run `zig fmt` before committing - Add tests for new features - Keep functions < 50 lines - Document public APIs --- ## Applications Using This SDK - **[Feed](https://git.maiwald.work/Libertaria/Feed)** - Decentralized social protocol - **[LatticePost](https://git.maiwald.work/Libertaria/LatticePost)** - E2EE messaging (future) - **[Archive Node](https://git.maiwald.work/Libertaria/ArchiveNode)** - Content archival (future) --- ## Related Documents - **[RFC-0000](../libertaria/03-TECHNICAL/L0-TRANSPORT/RFC-0000_LIBERTARIA_WIRE_FRAME_v0_3_0.md)** - Wire Frame Protocol - **[RFC-0100](../libertaria/03-TECHNICAL/L1-IDENTITY/RFC-0100_ENTROPY_STAMP_SCHEMA_v0_2_0.md)** - Entropy Stamps - **[ADR-003](../libertaria/03-TECHNICAL/ADR-003_SPLIT_STACK_ZIG_RUST.md)** - Split-stack architecture --- ## License TBD (awaiting decision) --- ## Contact **Repository:** https://git.maiwald.work/Libertaria/libertaria-sdk **Issues:** https://git.maiwald.work/Libertaria/libertaria-sdk/issues **Author:** Markus Maiwald --- **Status:** Alpha - L0+L1 foundation complete **Next:** UTCP transport, OPQ, post-quantum crypto --- *"The hull is forged in Zig. The protocol is sovereign. The submarine descends."*