Packages
reckon_db
5.6.1
5.11.0
5.10.4
5.10.3
5.10.1
5.10.0
5.9.1
5.9.0
5.8.3
5.8.2
5.8.1
5.8.0
5.7.0
5.6.1
5.6.0
5.5.5
5.5.4
5.5.3
5.5.2
5.5.1
5.5.0
5.4.0
5.2.2
5.2.1
5.2.0
5.1.0
5.0.0
4.0.0
3.1.2
3.1.1
3.0.0
2.3.7
2.3.6
2.3.5
2.3.4
2.3.3
2.3.2
2.3.1
2.3.0
2.2.2
2.2.0
2.1.4
2.1.3
2.1.2
2.1.1
2.1.0
2.0.0
1.7.7
1.7.6
1.7.5
1.7.4
1.7.3
1.7.2
1.7.1
1.7.0
1.6.3
1.6.2
1.6.1
1.6.0
1.5.1
1.5.0
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.3
1.3.2
1.3.1
1.3.0
1.2.7
1.2.6
1.2.5
1.2.4
1.2.3
1.2.2
1.2.1
1.2.0
1.1.1
1.1.0
1.0.3
1.0.2
1.0.1
1.0.0
BEAM-native Event Store built on Khepri/Ra with Raft consensus. Event sourcing, persistent subscriptions, snapshots, and automatic cluster formation via UDP multicast discovery. Ships embedded Rust NIFs for 3-15x acceleration of crypto, hashing, compression, aggregation, filter matching, and grap...
Current section
Files
Jump to
Current section
Files
assets/event_flow.svg
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 200">
<defs>
<linearGradient id="clientGrad" x1="0%" y1="0%" x2="0%" y2="100%">
<stop offset="0%" style="stop-color:#e8f5e9"/>
<stop offset="100%" style="stop-color:#c8e6c9"/>
</linearGradient>
<linearGradient id="apiGrad" x1="0%" y1="0%" x2="0%" y2="100%">
<stop offset="0%" style="stop-color:#e3f2fd"/>
<stop offset="100%" style="stop-color:#bbdefb"/>
</linearGradient>
<linearGradient id="writerGrad" x1="0%" y1="0%" x2="0%" y2="100%">
<stop offset="0%" style="stop-color:#fff3e0"/>
<stop offset="100%" style="stop-color:#ffe0b2"/>
</linearGradient>
<linearGradient id="raftGrad" x1="0%" y1="0%" x2="0%" y2="100%">
<stop offset="0%" style="stop-color:#fce4ec"/>
<stop offset="100%" style="stop-color:#f8bbd9"/>
</linearGradient>
<linearGradient id="emitterGrad" x1="0%" y1="0%" x2="0%" y2="100%">
<stop offset="0%" style="stop-color:#e1bee7"/>
<stop offset="100%" style="stop-color:#ce93d8"/>
</linearGradient>
<marker id="arrow" markerWidth="10" markerHeight="10" refX="9" refY="3" orient="auto" markerUnits="strokeWidth">
<path d="M0,0 L0,6 L9,3 z" fill="#666"/>
</marker>
</defs>
<!-- Title -->
<text x="300" y="20" text-anchor="middle" font-family="Arial, sans-serif" font-size="14" font-weight="bold" fill="#333">Event Write Flow</text>
<!-- Write Request -->
<rect x="20" y="45" width="80" height="45" rx="6" fill="url(#clientGrad)" stroke="#4caf50" stroke-width="2"/>
<text x="60" y="65" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" font-weight="bold" fill="#2e7d32">Write</text>
<text x="60" y="80" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#388e3c">Request</text>
<line x1="100" y1="67" x2="125" y2="67" stroke="#666" stroke-width="2" marker-end="url(#arrow)"/>
<!-- Streams API -->
<rect x="130" y="45" width="90" height="45" rx="6" fill="url(#apiGrad)" stroke="#2196f3" stroke-width="2"/>
<text x="175" y="62" text-anchor="middle" font-family="monospace" font-size="9" fill="#1565c0">reckon_db_streams</text>
<text x="175" y="78" text-anchor="middle" font-family="monospace" font-size="9" fill="#1976d2">:append()</text>
<line x1="220" y1="67" x2="245" y2="67" stroke="#666" stroke-width="2" marker-end="url(#arrow)"/>
<!-- Partitioned Writer -->
<rect x="250" y="35" width="90" height="65" rx="6" fill="url(#writerGrad)" stroke="#ff9800" stroke-width="2"/>
<text x="295" y="55" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" font-weight="bold" fill="#e65100">Partitioned</text>
<text x="295" y="70" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#ef6c00">Writer</text>
<text x="295" y="90" text-anchor="middle" font-family="Arial, sans-serif" font-size="8" fill="#999">(hash by stream_id)</text>
<line x1="340" y1="67" x2="365" y2="67" stroke="#666" stroke-width="2" marker-end="url(#arrow)"/>
<!-- Khepri/Ra -->
<rect x="370" y="35" width="100" height="65" rx="6" fill="url(#raftGrad)" stroke="#e91e63" stroke-width="2"/>
<text x="420" y="55" text-anchor="middle" font-family="Arial, sans-serif" font-size="11" font-weight="bold" fill="#ad1457">Khepri/Ra</text>
<text x="420" y="72" text-anchor="middle" font-family="Arial, sans-serif" font-size="9" fill="#c2185b">Raft Consensus</text>
<text x="420" y="90" text-anchor="middle" font-family="Arial, sans-serif" font-size="8" fill="#999">(replicated)</text>
<line x1="470" y1="67" x2="495" y2="67" stroke="#666" stroke-width="2" marker-end="url(#arrow)"/>
<!-- Trigger -->
<rect x="500" y="45" width="80" height="45" rx="6" fill="url(#emitterGrad)" stroke="#9c27b0" stroke-width="2"/>
<text x="540" y="62" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" font-weight="bold" fill="#7b1fa2">Khepri</text>
<text x="540" y="78" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#8e24aa">Trigger</text>
<!-- Trigger fires down -->
<line x1="540" y1="90" x2="540" y2="120" stroke="#666" stroke-width="2" marker-end="url(#arrow)"/>
<!-- Emitter Pool -->
<rect x="480" y="125" width="100" height="50" rx="6" fill="url(#emitterGrad)" stroke="#9c27b0" stroke-width="2"/>
<text x="530" y="145" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" font-weight="bold" fill="#7b1fa2">Emitter Pool</text>
<text x="530" y="162" text-anchor="middle" font-family="Arial, sans-serif" font-size="9" fill="#8e24aa">broadcasts</text>
<!-- Fan out to subscribers -->
<line x1="480" y1="150" x2="440" y2="150" stroke="#666" stroke-width="1.5"/>
<line x1="440" y1="130" x2="440" y2="175" stroke="#666" stroke-width="1.5"/>
<line x1="440" y1="130" x2="400" y2="130" stroke="#666" stroke-width="1.5" marker-end="url(#arrow)"/>
<line x1="440" y1="150" x2="400" y2="150" stroke="#666" stroke-width="1.5" marker-end="url(#arrow)"/>
<line x1="440" y1="175" x2="400" y2="175" stroke="#666" stroke-width="1.5" marker-end="url(#arrow)"/>
<!-- Subscribers -->
<rect x="320" y="120" width="80" height="25" rx="4" fill="#e8f5e9" stroke="#4caf50"/>
<text x="360" y="137" text-anchor="middle" font-family="Arial, sans-serif" font-size="9" fill="#2e7d32">Subscriber 1</text>
<rect x="320" y="145" width="80" height="25" rx="4" fill="#e8f5e9" stroke="#4caf50"/>
<text x="360" y="162" text-anchor="middle" font-family="Arial, sans-serif" font-size="9" fill="#2e7d32">Subscriber 2</text>
<rect x="320" y="170" width="80" height="25" rx="4" fill="#e8f5e9" stroke="#4caf50"/>
<text x="360" y="187" text-anchor="middle" font-family="Arial, sans-serif" font-size="9" fill="#2e7d32">Subscriber N</text>
</svg>