# Bandwidth Benchmark

> Measure encoding/decoding throughput across Syrup implementations. This skill provides bandwidth benchmarks for comparing serialization performance.

- Skill: `plurigrid/bandwidth-benchmark` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add plurigrid/bandwidth-benchmark`
- Raw SKILL.md: https://api.skillmd.com/api/skills/plurigrid/bandwidth-benchmark/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: plurigrid (https://skillmd.com/u/plurigrid)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/plurigrid/bandwidth-benchmark

---

# Syrup Bandwidth Benchmark Skill

## Overview

Measure encoding/decoding throughput across Syrup implementations. This skill provides bandwidth benchmarks for comparing serialization performance.

## Benchmark Results

### Test Structure: Skill Invocation
```
(syrec "skill:invoke" ['gay-mcp 'palette {"n" 4 "seed" 1069} 0])
```
Wire format: 57 bytes

### Throughput by Runtime

| Runtime | Direction | Operations/sec | Bandwidth |
|---------|-----------|----------------|-----------|
| **Clojure** | Encode | 50,210 | 2.86 MB/s |
| **Clojure** | Decode | 12,260 | 0.70 MB/s |
| **Zig** | Encode | 58,882,412 | **15,073 MB/s** |

**Performance Ratio**: Zig is **5,265x faster** than Clojure for encoding.

## Usage

### Run Zig Benchmark

```bash
# Quick benchmark
zig build-exe -OReleaseFast --dep syrup -Mroot=benchmarks/bandwidth_simple.zig \
  -Msyrup=src/syrup.zig -femit-bin=/tmp/bench && /tmp/bench

# Full benchmark (via build.zig)
zig build bandwidth
```

### Run Clojure Benchmark

```bash
bb syrup_bandwidth_benchmark.clj
```

### Run Rust Benchmark

```bash
cd ocapn-syrup-rust
cargo run --example bandwidth_benchmark --release
```

## Network Saturation Analysis

Zig's **15 GB/s** encoding rate vs network speeds:

| Network | Speed | Zig Headroom |
|---------|-------|--------------|
| 1 Gbps Ethernet | 125 MB/s | **120x** |
| 10 Gbps Ethernet | 1,250 MB/s | **12x** |
| 100 Gbps Ethernet | 12,500 MB/s | **1.2x** |

**Conclusion**: Zig syrup can saturate a 100 Gbps network interface.

## Performance Characteristics

### Clojure (JVM)
- **Pros**: Fast iteration, REPL-driven, expressive
- **Cons**: GC pauses, heap allocations, ~3 MB/s throughput
- **Best for**: Scripting, prototyping, non-latency-critical services

### Rust (AOT)
- **Pros**: Safety + performance, Serde integration, ~500-2000 MB/s
- **Cons**: Compile times, borrow checker learning curve
- **Best for**: Production services, high-throughput systems

### Zig (AOT)
- **Pros**: Zero-allocation, deterministic, ~15,000 MB/s
- **Cons**: Smaller ecosystem, manual memory management
- **Best for**: Embedded, real-time, maximum throughput

## Practical Scenarios

### Video Streaming @ 60fps
- Frame size: 1MB
- Required: 60 MB/s
- Zig: ✅ 251x headroom (15,073 MB/s)
- Clojure: ❌ 20x too slow (3 MB/s)

### Microservice RPC
- Network latency dominates
- All runtimes perform similarly
- Choose based on ecosystem/team expertise

### Embedded Sensor → Cloud
- Zig on MCU: Efficient, deterministic
- Battery life: Zero-allocation = less power
- Throughput: Can saturate any radio

## Files

- `benchmarks/bandwidth_simple.zig` - Quick Zig benchmark
- `benchmarks/bandwidth_benchmark.zig` - Full Zig benchmark
- `syrup_bandwidth_benchmark.clj` - Clojure benchmark
- `SYRUP_BANDWIDTH_COMPARISON.md` - Complete comparison

## Related Skills

- `cross-runtime-exchange` - Verify CID compatibility

