Engineering Blog
Behind-the-scenes stories from building callbag-recharge — the architecture decisions, the bugs that taught us something, and the ideas that didn't survive contact with reality.
The callbag-recharge Chronicle
Arc 1: Origins — Why Revive Callbag?
| # | Post | Date | Read time |
|---|---|---|---|
| 1 | Callbag Is Dead. Long Live Callbag. | March 21, 2026 | 8 min |
| 2 | The Protocol That Already Solved Your Problem | March 21, 2026 | 10 min |
| 3 | Signals Are Not Enough | March 21, 2026 | 10 min |
Arc 2: Architecture v1 — The Naive First Attempt
| # | Post | Date | Read time |
|---|---|---|---|
| 4 | Push Dirty, Pull Values: Our First Diamond Solution | March 22, 2026 | 8 min |
| 5 | Why Explicit Dependencies Beat Magic Tracking | March 22, 2026 | 8 min |
| 6 | The Inspector Pattern: Observability as a First-Class Citizen | March 22, 2026 | 8 min |
Arc 3: Architecture v2 — The Great Unification
| # | Post | Date | Read time |
|---|---|---|---|
| 7 | Data Should Flow Through the Graph, Not Around It | March 23, 2026 | 9 min |
| 8 | Two-Phase Push: DIRTY First, Values Second | March 23, 2026 | 9 min |
| 9 | From Pull-Phase to Push-Phase Memoization | March 23, 2026 | 8 min |
Arc 4: Architecture v3 — The Type 3 Breakthrough
| # | Post | Date | Read time |
|---|---|---|---|
| 10 | The Day We Read the Callbag Spec (Again) | March 24, 2026 | 7 min |
| 11 | Why Control Signals Don't Belong in the Data Stream | March 24, 2026 | 7 min |
| 12 | RESOLVED: The Signal That Skips Entire Subtrees | March 24, 2026 | 7 min |
| 13 | Five Primitives, Two Tiers, Zero Schedulers | March 24, 2026 | 8 min |
Arc 5: Architecture v4 — Performance Without Compromise
| # | Post | Date | Read time |
|---|---|---|---|
| 14 | Output Slot: How null->fn->Set Saves 90% Memory | March 25, 2026 | 7 min |
| 15 | When We Removed the ADOPT Protocol | March 25, 2026 | 6 min |
| 16 | Lazy Tier 2: The switchMap Footgun We Had to Kill | March 25, 2026 | 6 min |
| 17 | Bitmask Flag Packing in TypeScript | March 25, 2026 | 6 min |
Arc 6: Correctness Stories
| # | Post | Date | Read time |
|---|---|---|---|
| 18 | Diamond Resolution Without Pull-Phase Computation | March 25, 2026 | 6 min |
| 19 | When Not to Dedup: Understanding Callbag Operator Semantics | March 25, 2026 | 5 min |
| 20 | Benchmark Regression Exposed 3 Operator Bugs | March 25, 2026 | 5 min |
| 21 | The Cost of Correctness: 9.8M ops/sec vs Preact's 34M | March 25, 2026 | 6 min |
Arc 7: From Library to Platform
| # | Post | Date | Read time |
|---|---|---|---|
| 23 | Stores All the Way Down: Adding State to Reactive Programming | March 25, 2026 | 6 min |
| 24 | Why Our Computed States Are Eagerly Reactive | March 25, 2026 | 6 min |
| 25 | From Zustand to Reactive Orchestration | March 25, 2026 | 6 min |
| 26 | The Missing Middle: Why Signals Aren't Enough for AI Streaming | March 25, 2026 | 6 min |
Arc 8: Engineering Deep Cuts
| # | Post | Date | Read time |
|---|---|---|---|
| 22 | Promises Are the New Callback Hell | March 25, 2026 | 6 min |
| 27 | switchMap Error Handling: The Bug That Tests Didn't Catch | March 25, 2026 | 5 min |
| 28 | Skip DIRTY: How We Halved Dispatch for Single-Dep Paths | March 25, 2026 | 5 min |
| 29 | Bitmask Overflow at >32 Dependencies | March 25, 2026 | 5 min |
| 30 | Why We Don't Use queueMicrotask (And Neither Should You) | March 25, 2026 | 5 min |