Releases: vasic-digital/claude-code-router
Release list
v0.4.2 — transport + hot-reload + load/soak live suites
Three more LIVE end-to-end suites: test/livetls (HTTP/2 over TLS + Alt-Svc h3 + real HTTP/3-over-QUIC + no-TLS-http3 error), test/livereload (config hot-reload detected/rejected/honest-boundary live), test/liveload (500 concurrent requests with exact metric equality, in-flight quiesce, cache-under-load, 200 streams, 44k-request soak, zero errors). Plus a free-port retry so heavy port churn does not spuriously fail. Tests only; no gateway behavior change.
v0.4.1 — metrics polish + live e2e harness
Metrics-attribution polish (per-attempt gen_ai upstream, native tokens, semantic Stats) + a comprehensive LIVE end-to-end harness (test/live): builds ccr, starts a fake upstream + ccr serve subprocess on loopback, drives real HTTP + scrapes /metrics across 9 scenarios (translation, streaming, OpenAI facade, error mapping, cache HIT, fallback, semantic, config validate/show). Plus v0.4.x docs + LIVE_TESTING.md. Full suite green under -race. No behavior change to served responses.
v0.4.0 — /metrics + semantic cache wired
Observability + semantic cache tier now WIRED live: a /metrics endpoint on the management server (RED + gen_ai token/cache counters, secret-free labels, live-proven), an opt-in semantic response-cache tier (Cache.semantic), and Router.think activation. Plus exhaustive verification suites (fuzzers) across cache/metrics/logging/proxy. All opt-in additions default OFF/inert; existing configs byte-identical. Reviewed; full suite green under -race. See CHANGELOG.md.
v0.3.0 — response cache + cross-provider fallback
Response cache and cross-provider fallback are now WIRED and live (both opt-in, default OFF — existing configs unchanged). Plus a semantic cache tier (opt-in), a self-contained Prometheus metrics package, and a deterministic local embedder. Reviewed by 3 focused task-reviews + a final whole-branch review; full suite green under -race incl chaos/security/mutation/helixqa. See CHANGELOG.md.
v0.2.0 — multi-protocol gateway
Multi-protocol gateway: OpenAI-compatible inbound facade (POST /v1/chat/completions) + Anthropic-native passthrough, reusable path->protocol classifiers, Router.Think/LongContext routing, config hot-reload, and access logging with secret redaction. All upstream test-port GAP skips closed (0 remaining); full suite green under -race incl. chaos/security/mutation/helixqa. See CHANGELOG.md.
v0.1.0 — Claude Code Router in Go
First release.
A clean-room Go reimplementation of @musistudio/claude-code-router (MIT). No upstream source was copied; the wire formats, CLI grammar, configuration layout and default ports are reproduced deliberately so existing installations keep working. Upstream attribution is retained in NOTICE.
Why
A 26MB static binary with zero Node dependencies, replacing a Node 22+ runtime requirement.
What works
| Area | Detail |
|---|---|
| Gateway | Gin; HTTP/3+QUIC (opt-in, TLS-required); brotli → gzip → identity |
| Endpoints | POST /v1/messages (non-streaming + SSE), GET /health, GET /ready |
| Translate | Anthropic ↔ OpenAI: system prompts, content blocks, tool_use/tool_result, cleancache |
| Router | default/background routing, explicit provider/model selector, failure classification, fallback chain |
| Proxy | verbatim endpoint; HTTP(S)_PROXY/NO_PROXY and authenticated upstream proxies |
| CLI | start, ui, serve, web, stop, profile grammar, --gateway-host/--gateway-port |
Compatibility
- Loads an existing
~/.claude-code-router/config.jsonunchanged — verified against a real 20-provider config. ccr --helpcontainsccr start/ccr serve, so claude_toolkit's identity guard accepts this binary.ccr <unknown>printsProfile "<unknown>" was not found or is disabled.and exits 1, matching Node.
Verification
- 12 packages green under
go test -race scripts/preflight.sh— 5/5 (gofmt, vet, build, race, secret scan)- Mutation harness: killed=6, survived=0
- HelixQA: 96 schema-validated cases; chaos: 12 scenarios; security: 14 tests
- Live-socket verified:
/health,/ready, brotli 91B→33B decoded over the wire
Known limitations
- Inbound auth (
RequireAPIKey) exists but is not installed on any route — enabling it by default would break existing callers. - The fallback/retry classifiers are not yet driven by a retry loop;
proxy.Client.Domakes one attempt. - Vision/image content blocks return an explicit error rather than being silently dropped.
- One upstream GAP deliberately unported: ambiguous bare-model resolution would let a request bypass
Router.default.
🤖 Generated with Claude Code