<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Changelog - AllFrame</title>
<meta name="description" content="AllFrame changelog - Track all releases, features, and improvements to the composable Rust API framework.">
<meta name="keywords" content="rust, web framework, changelog, releases, allframe">
<link rel="canonical" href="https://all-source-os.github.io/all-frame/changelog.html">
<meta property="og:title" content="Changelog - AllFrame">
<meta property="og:description" content="Track all releases, features, and improvements to AllFrame.">
<meta property="og:type" content="website">
<meta property="og:url" content="https://all-source-os.github.io/all-frame/changelog.html">
<link rel="stylesheet" href="style.css">
<style>
.container { max-width: 1000px; }
.page-header { padding: 48px 0 32px; border-bottom: 1px solid var(--border); }
.page-header h1 { font-size: 2.5rem; font-weight: 700; margin-bottom: 8px; }
.page-header p { color: var(--text-muted); font-size: 1.1rem; }
.timeline { padding: 40px 0; }
.release { display: flex; gap: 32px; position: relative; padding-bottom: 48px; }
.release:last-child { padding-bottom: 0; }
.release-meta {
width: 140px;
flex-shrink: 0;
position: sticky;
top: 100px;
align-self: flex-start;
}
.release-date { font-size: 0.9rem; color: var(--text-muted); margin-bottom: 12px; }
.release-version {
display: inline-flex;
align-items: center;
justify-content: center;
min-width: 56px;
height: 40px;
background: var(--bg-secondary);
border: 1px solid var(--border);
border-radius: 8px;
font-weight: 700;
font-size: 0.9rem;
padding: 0 10px;
}
.release-content { flex: 1; position: relative; padding-left: 32px; }
.release-content::before {
content: '';
position: absolute;
left: 0;
top: 8px;
bottom: -48px;
width: 1px;
background: var(--border);
}
.release:last-child .release-content::before { bottom: 0; }
.release-content::after {
content: '';
position: absolute;
left: -5px;
top: 8px;
width: 11px;
height: 11px;
background: var(--primary);
border-radius: 50%;
}
.release-title { font-size: 1.5rem; font-weight: 600; margin-bottom: 12px; }
.release-tags { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 20px; }
.section { margin-bottom: 24px; }
.section-title {
font-size: 1rem;
font-weight: 600;
color: var(--text-muted);
margin-bottom: 12px;
text-transform: uppercase;
letter-spacing: 0.05em;
}
.section ul { list-style: none; padding: 0; }
.section li {
position: relative;
padding-left: 20px;
margin-bottom: 8px;
color: var(--text);
}
.section li::before {
content: '';
position: absolute;
left: 0;
top: 10px;
width: 6px;
height: 6px;
background: var(--text-muted);
border-radius: 50%;
}
.section li strong { color: var(--text); }
@media (max-width: 768px) {
.release { flex-direction: column; gap: 16px; }
.release-meta { width: 100%; position: static; display: flex; align-items: center; gap: 16px; }
.release-content { padding-left: 0; }
.release-content::before, .release-content::after { display: none; }
}
</style>
</head>
<body>
<header>
<nav class="container">
<a href="index.html" class="logo"><span>All</span>Frame</a>
<div class="nav-links">
<a href="index.html">Home</a>
<a href="https://docs.rs/allframe">API Docs</a>
<a href="https://github.com/all-source-os/all-frame">GitHub</a>
<a href="https://crates.io/crates/allframe">crates.io</a>
</div>
</nav>
</header>
<main>
<div class="page-header">
<div class="container">
<h1>Changelog</h1>
<p>All notable changes to AllFrame. See <a href="https://github.com/all-source-os/all-frame/releases">GitHub Releases</a> for full details.</p>
</div>
</div>
<div class="timeline">
<div class="container">
<div class="release">
<div class="release-meta">
<div class="release-date">March 18, 2026</div>
<div class="release-version">0.1.19</div>
</div>
<div class="release-content">
<h2 class="release-title">Streaming Handler Support</h2>
<div class="release-tags">
<span class="tag new">New</span>
<span class="tag feature">Streaming</span>
<span class="tag feature">Tauri</span>
</div>
<div class="section">
<h3 class="section-title">Added</h3>
<ul>
<li><strong>Streaming Handlers</strong> -- <code>StreamSender</code> with bounded channel backpressure, <code>CancellationToken</code> auto-cancelled on receiver drop, both callback and <code>impl Stream</code> patterns</li>
<li><strong>Tauri IPC Bridge</strong> -- <code>allframe_stream</code> / <code>allframe_stream_cancel</code> commands with per-stream UUID event channels and <code>ActiveStreams</code> cancellation tracking</li>
<li><strong>TypeScript Streaming Codegen</strong> -- <code>StreamObserver</code>, <code>StreamSubscription</code> interfaces, <code>callStreamHandler</code> helper with auto-cleanup</li>
<li><strong>RxJS Adapter</strong> -- <code>toObservable()</code> with lazy <code>import("rxjs")</code>, zero hard dependency</li>
<li><strong><code>#[tauri_compat(streaming)]</code></strong> -- Macro variant for streaming handler migration</li>
<li><strong><code>HandlerKind</code> enum</strong> -- <code>allframe_list</code> reports request_response vs streaming for each handler</li>
<li><strong><code>register_stream*</code></strong> -- Bridge <code>futures::Stream</code> to channel-based <code>StreamSender</code></li>
</ul>
</div>
</div>
</div>
<div class="release">
<div class="release-meta">
<div class="release-date">March 2026</div>
<div class="release-version">0.1.18</div>
</div>
<div class="release-content">
<h2 class="release-title">Tauri Migration Ergonomics</h2>
<div class="release-tags">
<span class="tag new">New</span>
<span class="tag feature">Tauri</span>
</div>
<div class="section">
<h3 class="section-title">Added</h3>
<ul>
<li><strong><code>#[tauri_compat]</code> macro</strong> -- Keep function signatures, swap the attribute for mechanical migration from Tauri</li>
<li><strong>Typed return values</strong> -- Handlers return <code>impl Serialize</code>, framework serializes via <code>IntoHandlerResult</code> trait</li>
<li><strong>TypeScript client codegen</strong> -- Auto-generate typed TS functions from handler registrations</li>
<li><strong><code>IntoHandlerResult</code> trait</strong> -- Extensible handler return types (<code>String</code>, <code>Json<T></code>, <code>Result<T, E></code>)</li>
</ul>
</div>
</div>
</div>
<div class="release">
<div class="release-meta">
<div class="release-date">Feb - Mar 2026</div>
<div class="release-version">0.1.15-17</div>
</div>
<div class="release-content">
<h2 class="release-title">Offline-First Architecture</h2>
<div class="release-tags">
<span class="tag new">New</span>
<span class="tag feature">Offline</span>
<span class="tag feature">Desktop</span>
</div>
<div class="section">
<h3 class="section-title">Added</h3>
<ul>
<li><strong>SQLite event store backend</strong> -- WAL mode, zero network deps</li>
<li><strong>Offline circuit breaker</strong> -- Operation queuing and replay</li>
<li><strong>Store-and-forward pattern</strong> -- Intermittent connectivity support</li>
<li><strong>Bidirectional projection sync</strong> -- Pluggable conflict resolution</li>
<li><strong>Lazy DI initialization</strong> -- Concurrent warm-up</li>
<li><strong>Saga compensation</strong> -- File snapshots and SQLite savepoints</li>
<li><strong>Embedded MCP server</strong> -- Local-only LLM tool dispatch</li>
<li><strong><code>allframe-tauri</code> crate</strong> -- Tauri 2.x desktop integration</li>
<li><strong><code>offline</code> feature flag</strong> -- Zero network dependencies verified by CI</li>
<li><strong>Typed handler args and DI state injection</strong></li>
</ul>
</div>
</div>
</div>
<div class="release">
<div class="release-meta">
<div class="release-date">December 15, 2025</div>
<div class="release-version">0.1.12</div>
</div>
<div class="release-content">
<h2 class="release-title">MCP Server Debuggability</h2>
<div class="release-tags">
<span class="tag new">New</span>
<span class="tag fix">Fixed</span>
</div>
<div class="section">
<h3 class="section-title">Added</h3>
<ul>
<li><strong>MCP Server Debuggability</strong> -- Production-ready stdio transport with comprehensive debugging</li>
<li><strong>Environment Variables for MCP Debugging</strong></li>
<li><strong>Claude Code Setup Guide</strong> -- Comprehensive documentation for Claude Code CLI</li>
</ul>
</div>
<div class="section">
<h3 class="section-title">Fixed</h3>
<ul>
<li><strong>AllSource Core Re-enabled</strong> -- <code>cqrs-allsource</code> features now work</li>
</ul>
</div>
</div>
</div>
<div class="release">
<div class="release-meta">
<div class="release-date">December 13, 2025</div>
<div class="release-version">0.1.9</div>
</div>
<div class="release-content">
<h2 class="release-title">Protocol-Agnostic Routing Complete</h2>
<div class="release-tags">
<span class="tag new">New</span>
<span class="tag feature">Authentication</span>
</div>
<div class="section">
<h3 class="section-title">Added</h3>
<ul>
<li><strong>Protocol-Agnostic Routing Complete</strong> -- Full multi-protocol support across 5 phases</li>
<li><strong>MCP Server (Zero-Bloat)</strong> -- Separate crate for LLM tool integration</li>
<li><strong><code>KeyedCircuitBreaker<K></code></strong> -- Generic keyed circuit breaker for per-resource isolation</li>
<li><strong><code>resilience-redis</code> feature</strong> -- Redis-backed distributed rate limiting</li>
<li><strong>Layered Authentication</strong> -- Zero-bloat, feature-gated auth infrastructure (JWT, Axum, gRPC)</li>
</ul>
</div>
<div class="section">
<h3 class="section-title">Changed</h3>
<ul>
<li>Total test count now 455+ (was 361+)</li>
<li>Upgraded <code>thiserror</code> from 1.0 to 2.0</li>
</ul>
</div>
</div>
</div>
<div class="release">
<div class="release-meta">
<div class="release-date">December 09, 2025</div>
<div class="release-version">0.1.8</div>
</div>
<div class="release-content">
<h2 class="release-title">Graceful Shutdown Utilities</h2>
<div class="release-tags">
<span class="tag new">New</span>
</div>
<div class="section">
<h3 class="section-title">Added</h3>
<ul>
<li><strong>Graceful Shutdown Utilities</strong> -- <code>ShutdownAwareTaskSpawner</code>, <code>GracefulShutdownExt</code>, <code>ShutdownExt</code> trait</li>
<li><strong>Examples</strong> -- <code>graceful_shutdown.rs</code> and <code>shutdown_patterns.rs</code> with 5 common patterns</li>
</ul>
</div>
</div>
</div>
<div class="release">
<div class="release-meta">
<div class="release-date">December 08, 2025</div>
<div class="release-version">0.1.7</div>
</div>
<div class="release-content">
<h2 class="release-title">Resilience and Security Modules</h2>
<div class="release-tags">
<span class="tag new">New</span>
<span class="tag feature">Resilience</span>
</div>
<div class="section">
<h3 class="section-title">Added</h3>
<ul>
<li><strong>Resilience module</strong> -- RetryExecutor, CircuitBreaker, RateLimiter, AdaptiveRetry, RetryBudget (~1,000+ lines)</li>
<li><strong>Security module</strong> -- URL/credential obfuscation, <code>Sensitive<T></code>, <code>#[derive(Obfuscate)]</code></li>
<li><strong>Proc macros</strong> -- <code>#[retry]</code>, <code>#[circuit_breaker]</code>, <code>#[rate_limited]</code></li>
</ul>
</div>
<div class="section">
<h3 class="section-title">Changed</h3>
<ul>
<li><code>health</code> feature now optional (hyper/hyper-util gated behind it)</li>
<li>Added <code>cqrs-allsource</code>, <code>cqrs-postgres</code>, <code>cqrs-rocksdb</code> feature flags</li>
<li><code>grpc-tls</code> deprecated in favor of <code>router-grpc-tls</code></li>
</ul>
</div>
</div>
</div>
<div class="release">
<div class="release-meta">
<div class="release-date">Dec 05-06, 2025</div>
<div class="release-version">0.1.3-6</div>
</div>
<div class="release-content">
<h2 class="release-title">Initial crates.io Publishing</h2>
<div class="release-tags">
<span class="tag new">New</span>
<span class="tag feature">CQRS</span>
</div>
<div class="section">
<h3 class="section-title">Highlights</h3>
<ul>
<li><strong>First crates.io publish</strong> -- <code>cargo install allframe</code> now works</li>
<li><strong>Scalar UI integration</strong> -- Modern OpenAPI 3.1 docs (10x smaller than Swagger)</li>
<li><strong>Binary size monitoring</strong> -- All binaries under 2MB, CI-enforced</li>
<li><strong>GraphiQL playground</strong> -- Interactive GraphQL documentation</li>
<li><strong>Contract testing</strong> -- Automatic test generation from router</li>
<li><strong>CQRS Phases 1-5 complete</strong> -- CommandBus (90% reduction), ProjectionRegistry (90%), Event Versioning (95%), Saga Orchestration (75%)</li>
<li><strong>Zero-warning templates</strong> -- <code>allframe ignite</code> generates clean projects</li>
<li><strong>allsource-core upgrade</strong> -- Updated CQRS backend, fixed event trait bounds</li>
</ul>
</div>
</div>
</div>
<div class="release">
<div class="release-meta">
<div class="release-date">2024 - Nov 2025</div>
<div class="release-version">0.1.0-2</div>
</div>
<div class="release-content">
<h2 class="release-title">Foundation</h2>
<div class="release-tags">
<span class="tag feature">Core</span>
</div>
<div class="section">
<h3 class="section-title">Milestones</h3>
<ul>
<li><strong>v0.1</strong> -- <code>allframe ignite</code> CLI + project scaffolding</li>
<li><strong>v0.2</strong> -- Compile-time DI + Auto OpenAPI 3.1</li>
<li><strong>v0.3</strong> -- OpenTelemetry tracing support</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</main>
<footer>
<div class="container">
<div class="links">
<a href="index.html">Home</a>
<a href="https://github.com/all-source-os/all-frame">GitHub</a>
<a href="https://docs.rs/allframe">API Docs</a>
<a href="https://crates.io/crates/allframe">crates.io</a>
</div>
<p>AllFrame -- One frame. Infinite transformations. Built with TDD, from day zero.</p>
</div>
</footer>
</body>
</html>