aimux
Unified LLM service layer for Flutter/Dart (Rust core, 325 providers, C ABI via dart:ffi)
0.3.0
arcships/aimux
What this package is like to depend on
Last release 7 days ago
17 Aug 2026
Too new to tell
only 2 dated releases
Nearly every release is documented
notes for 2 of 2 stable releases
Nothing withdrawn
no release was ever pulled
0 months old
2 releases · first in 2026
2 releases in the last 12 months
see the full history below
Release timeline
2 releases · Aug 2026 to Aug 2026Releases
latest 2-
0.3.017 Aug 2026Release notes
Open source →What's Changed
- fix(release): flutter-publish embeds iOS xcframework from artifact root by @eric8810 in #29
- fix(jvm): publish via Central Portal OSSRH Staging API (s01 returns 402) by @eric8810 in #30
- fix(jvm): route SNAPSHOT vs release to correct portal repo by @eric8810 in #31
- fix(node): rebuild napi index.js before publish (stale index.js) by @eric8810 in #32
- docs: release troubleshooting handbook (0.2.1 全坑记录) by @eric8810 in #33
- chore: post-#21 ffi cleanup + ProviderName generator drift fix by @cunninghamcard-bit in #34
- feat(python,go): expose full ProviderOptions on the registry provider() entry by @cunninghamcard-bit in #35
- docs(rfc): RFC-0020~0024 新方向文档 by @eric8810 in #44
- docs(rfc): RFC 状态头与实现事实对齐 by @eric8810 in #50
- docs(rfc): 缓存探测三层拆分 — RFC-0015 重写 + RFC-0025 CLI client by @eric8810 in #51
- feat(ffi,go): add cancellable text streams by @luojiyin1987 in #58
- fix(bindings): make the ts-rs output the single source of truth, and align all six bindings to it by @cunninghamcard-bit in #55
- feat(core): RFC-0016 第一批 — M3 logprobs / M10 usage.raw / M9 流式 warnings / M2 includeRawChunks by @eric8810 in #54
- test(go,flutter): RFC-0016 batch1 e2e — Raw emission, usage.raw, warnings by @eric8810 in #61
- feat(core): OpenAI compatible 输出格式 (RFC-0026) by @eric8810 in #60
- docs(rfc0017): backlog B2/B3/B8/B9/B10 状态闭合 by @eric8810 in #62
- feat: A 线缓存探测链实施追踪 — RFC-0015/0024/0025 by @eric8810 in #53
- chore(lints): workspace clippy baseline + quality audit reports by @eric8810 in #63
- docs(rfc): rename trace_id → call_id across RFC-0015/0023/0024/0025 by @eric8810 in #77
- RFC-0023 定稿修订 + trace_id→call_id 代码改名(对齐 #77) by @eric8810 in #78
- feat(core): RFC-0023 P1 录制核心 — 数据模型 + Recorder + JsonlRecorder + 层 A 接入 (#48) by @eric8810 in #85
- fix: resolve quality-audit issues #65-#76 (H2/H3, M1-M7, M9-M11) by @eric8810 in #84
- RFC-0027: Model List API 与模型配置补充 by @eric8810 in #81
- feat(http): RFC-0023 P2 层 B HTTP 录制 — per-attempt + 流式 + R7 快照 (#48) by @eric8810 in #86
- feat(rfc0027): P1 — Provider::list_models + anya2a catalogue by @eric8810 in #83
- feat(http): RFC-0023 P3-P6 — mock/请求回放 + RingRecorder + config_snapshot + 绑定透传 (#48) by @eric8810 in #87
- feat(session): RFC-0024 P3+P4 — 录制集成 + session_cache_trajectory(+ 修复 master 多 binding 遗留) by @eric8810 in #88
- HAS-39 docs(rfc0027): 对齐 RFC 与 doc comment 至 host 侧合并实现 by @eric8810 in #89
- feat(ffi)!: AimuxError out-param transport + language error models by @cunninghamcard-bit in #91
- fix: address audit rounds 1-4 findings (blockers, matcher, recording, trace, providers, bindings) by @eric8810 in #92
- fix(providers): registry base_url hygiene + panic convert API hidden (#90) by @eric8810 in #93
- fix(ffi): guard stream callbacks against panic unwind across FFI (#64) by @eric8810 in #96
- feat(providers): external provider config overlay (RFC-0020) by @eric8810 in #97
- feat(core): M7 top-level result aggregation by @eric8810 in #98
- fix(error): structured ApiCall/NoSuchProvider fields, unified retry/2xx classification by @cunninghamcard-bit in #94
- feat(core): M11 streamText aggregation + M12 generateObject + M6 proxy + rawFinishReason by @eric8810 in #99
- feat(core): RouterModel + MoaModel composite models (RFC-0021 #46, RFC-0022 #47) by @eric8810 in #100
- feat(providers): fill ResponseMetadata.timestamp (L1, RFC-0016 #40) by @eric8810 in #103
- docs(rfc-0016): M13 lifecycle callbacks — won't fix (#39) by @eric8810 in #104
- docs(rfc): RFC-0028 transcription streaming (real-time STT) design (#43) by @eric8810 in #105
- feat: transcription streaming — all RFC-0028 phases (WS + FFI session + 8 bindings) (#43) by @eric8810 in #108
- fix(providers): use tool_name for Gemini functionResponse.name by @eric8810 in #127
- fix(providers): emit Finish after in-stream errors in anthropic do_stream by @eric8810 in #128
- fix(providers): include non-default port in SigV4 host header by @eric8810 in #129
- chore: drop unused deps, remove stale dead_code allow by @eric8810 in #130
- fix(providers): carry reasoning signature through streaming (bedrock + anthropic) by @eric8810 in #131
- chore: fix all rustdoc warnings, add rustdoc -D warnings to CI by @eric8810 in #134
- fix(core): surface recording writer I/O errors; require input in completion barrier by @eric8810 in #133
- feat(ffi): expose aimux_recording_try_flush with write-failure codes by @eric8810 in #137
- docs(audit): Round 4 quality audit — reports, coverage baseline, verified backlog by @eric8810 in #126
- fix+test: anthropic thinking input echo; binding round-trip tests by @eric8810 in #138
- fix: drop test duplicated by the #138 squash merge by @eric8810 in #140
- docs: record maintainer triage of audit backlog by @eric8810 in #142
- fix(providers): vertex stream drops grounding/code-execution/server-tool results by @eric8810 in #143
- fix(kotlin): make the nextPart timeout sentinel reachable (retryable contract) by @eric8810 in #144
- test: RFC-0028 transcription error paths (Rust + python + node) by @eric8810 in #146
- fix(utils): fallible shared HTTP client init by @eric8810 in #147
- chore: enable permanent clippy lint subset (5 lints, 1,521 fixes) by @eric8810 in #148
- test: unified e2e protocol expansion + FFI all-export smoke harness by @eric8810 in #149
- feat: aimux-web console — browser-based model call testing & trace visualization (RFC-0029) by @eric8810 in #132
- fix: aimux-web lint subset compliance; regen ts-rs types by @eric8810 in #151
- fix(bindings)!: raise on in-stream transcription errors; drop Ok/Err envelope by @eric8810 in #150
- fix(providers): stop dropping response data providers already parsed (resubmit #101 + its review follow-ups) by @cunninghamcard-bit in #139
- fix(tests): stop blanking cassette bodies for every streaming response by @cunninghamcard-bit in #102
- test(contract)!: type-check the wire fixtures, and fix top_k in the Kotlin and Java bindings by @cunninghamcard-bit in #106
- feat(web): in-page API key settings (RFC-0029 revision, loopback-gated) by @eric8810 in #153
- docs: comprehensive 0.3.0 release notes + README refresh by @eric8810 in #152
- chore(release): finalize 0.3.0 (version sync + changelog date) by @eric8810 in #154
New Contributors
- @luojiyin1987 made their first contribution in #58
Full Changelog: v0.2.1...v0.3.0
What's Changed
- fix(release): flutter-publish embeds iOS xcframework from artifact root by @eric8810 in #29
- fix(jvm): publish via Central Portal OSSRH Staging API (s01 returns 402) by @eric8810 in #30
- fix(jvm): route SNAPSHOT vs release to correct portal repo by @eric8810 in #31
- fix(node): rebuild napi index.js before publish (stale index.js) by @eric8810 in #32
- docs: release troubleshooting handbook (0.2.1 全坑记录) by @eric8810 in #33
- chore: post-#21 ffi cleanup + ProviderName generator drift fix by @cunninghamcard-bit in #34
- feat(python,go): expose full ProviderOptions on the registry provider() entry by @cunninghamcard-bit in #35
- docs(rfc): RFC-0020~0024 新方向文档 by @eric8810 in #44
- docs(rfc): RFC 状态头与实现事实对齐 by @eric8810 in #50
- docs(rfc): 缓存探测三层拆分 — RFC-0015 重写 + RFC-0025 CLI client by @eric8810 in #51
- feat(ffi,go): add cancellable text streams by @luojiyin1987 in #58
- fix(bindings): make the ts-rs output the single source of truth, and align all six bindings to it by @cunninghamcard-bit in #55
- feat(core): RFC-0016 第一批 — M3 logprobs / M10 usage.raw / M9 流式 warnings / M2 includeRawChunks by @eric8810 in #54
- test(go,flutter): RFC-0016 batch1 e2e — Raw emission, usage.raw, warnings by @eric8810 in #61
- feat(core): OpenAI compatible 输出格式 (RFC-0026) by @eric8810 in #60
- docs(rfc0017): backlog B2/B3/B8/B9/B10 状态闭合 by @eric8810 in #62
- feat: A 线缓存探测链实施追踪 — RFC-0015/0024/0025 by @eric8810 in #53
- chore(lints): workspace clippy baseline + quality audit reports by @eric8810 in #63
- docs(rfc): rename trace_id → call_id across RFC-0015/0023/0024/0025 by @eric8810 in #77
- RFC-0023 定稿修订 + trace_id→call_id 代码改名(对齐 #77) by @eric8810 in #78
- feat(core): RFC-0023 P1 录制核心 — 数据模型 + Recorder + JsonlRecorder + 层 A 接入 (#48) by @eric8810 in #85
- fix: resolve quality-audit issues #65-#76 (H2/H3, M1-M7, M9-M11) by @eric8810 in #84
- RFC-0027: Model List API 与模型配置补充 by @eric8810 in #81
- feat(http): RFC-0023 P2 层 B HTTP 录制 — per-attempt + 流式 + R7 快照 (#48) by @eric8810 in #86
- feat(rfc0027): P1 — Provider::list_models + anya2a catalogue by @eric8810 in #83
- feat(http): RFC-0023 P3-P6 — mock/请求回放 + RingRecorder + config_snapshot + 绑定透传 (#48) by @eric8810 in #87
- feat(session): RFC-0024 P3+P4 — 录制集成 + session_cache_trajectory(+ 修复 master 多 binding 遗留) by @eric8810 in #88
- HAS-39 docs(rfc0027): 对齐 RFC 与 doc comment 至 host 侧合并实现 by @eric8810 in #89
- feat(ffi)!: AimuxError out-param transport + language error models by @cunninghamcard-bit in #91
- fix: address audit rounds 1-4 findings (blockers, matcher, recording, trace, providers, bindings) by @eric8810 in #92
- fix(providers): registry base_url hygiene + panic convert API hidden (#90) by @eric8810 in #93
- fix(ffi): guard stream callbacks against panic unwind across FFI (#64) by @eric8810 in #96
- feat(providers): external provider config overlay (RFC-0020) by @eric8810 in #97
- feat(core): M7 top-level result aggregation by @eric8810 in #98
- fix(error): structured ApiCall/NoSuchProvider fields, unified retry/2xx classification by @cunninghamcard-bit in #94
- feat(core): M11 streamText aggregation + M12 generateObject + M6 proxy + rawFinishReason by @eric8810 in #99
- feat(core): RouterModel + MoaModel composite models (RFC-0021 #46, RFC-0022 #47) by @eric8810 in #100
- feat(providers): fill ResponseMetadata.timestamp (L1, RFC-0016 #40) by
Note truncated.
Release notes
Open source →Breaking release. 196 commits since 0.2.1: observability primitives (recording / replay / sessions / tracing), composite models, streaming transcription, a reworked error model across the C ABI and all eight bindings, a browser console, and a large provider-correctness sweep.
Breaking
Rust (aimux-core / aimux-provider-utils)
AiMuxError::RateLimitedgainedmessage: String(nowRateLimited { retry_after_ms, message });#[serde(default)]keeps old payloads deserializable, but the generated TypeScript marksmessagerequired — update exhaustive destructuring.GenerateTextOptions/CallOptions/StreamTextResultgained public fields (session_id, recording/trace controls, stream-result metadata). Use struct-update (..Default::default()) instead of exhaustive initializers.shared_client()/shared_streaming_client()(aimux-provider-utils) now returnResult<&'static Client, AiMuxError>: client-build failures (TLS backend, resource exhaustion) surface as a sticky, non-retryableApiCallinstead of aborting the host process (#147).- Panicking convert wrappers are deprecated in favor of fallible variants.
C ABI & the six FFI bindings (Kotlin / Java / Swift / Go / Flutter / C)
- Error transport switched to an
AimuxErrorout-parameter with typed code + HTTP status + retry hint; the JSON error envelope, the streamingon_errorcallback, andaimux_last_error()are removed. - All six bindings restructured to the typed error model.
- Kotlin:
topKis nowDouble(wasLong— 40.5 truncated silently); published artifacts require JDK 17 (jvmToolchain(17)). - Java:
topKlikewise typed as double-valued (#106). init_recording_ring(0)now throws instead of a silent no-op (consistent across all seven languages).
Python / Node (native bindings)
- Streaming-transcription sessions surface in-stream errors by raising
(
next_part) / rejecting (nextPart) the typed hierarchy, and part payloads are no longer wrapped in a{"Ok": ...}envelope — both now match the C-ABI session shape and the other six bindings (#145/#150). Code that parsed the envelope manually must catch the exception.
Added
- Request recording & replay (RFC-0023) —
Recorder/JsonlRecorderplus a bounded in-memoryRingRecorderwith drop counting; layer-B HTTP choke-point recording (per-attempt, streaming, credential redaction); mock & request replay with matchers and theaimux-replayCLI; cross-binding exposure via C ABI, Python, Node, Go, Swift, Kotlin, Java, Flutter;config_snapshot()captures the minimal provider/model identity.aimux_recording_try_flushFFI export reports write failures (sticky first error) across the ABI (#133/#137). - Session grouping (RFC-0024) —
session_idgroups related calls;SessionStore+SessionInfererwith query APIs in all bindings; session-cache trajectory export. - Cache-hit tracing (RFC-0015) —
TraceLayer, verdict engine, andRingTraceStoredetect prompt-cache hits from provider headers (vLLM / SGLang / LMCache behaviours), with cluster/route-aware gating; exposed in every binding. aimux-clicache-probe client (RFC-0025) — offline / session / provider probing over the trace store.- OpenAI-compatible output (RFC-0026) —
generateOpenAIOutputacross all eight bindings. - Model catalogue & listing (RFC-0027) —
Provider::list_modelsandget_model_specswith reasoning/capability metadata. - External provider config overlay (RFC-0020) — register or override OpenAI-compatible providers from JSON at runtime.
- Composite models — drop-in
LanguageModelwrappers, usable from every binding with zero call-site changes:RouterModel(RFC-0021) routes each call to one child model through a pluggableRouterstrategy (built-ins:RuleRouter,WeightedRouter) with automatic fallback to the remaining children on failure.MoaModel(RFC-0022) implements mixture-of-agents in a single call: reference models run in parallel, their outputs are spliced into an aggregator prompt, and the aggregated answer is returned — no agent loop involved.
- Core API growth —
streamTextaggregation,generateObject, top-level result aggregation (reasoning / sources / files / responseMessages), proxy configuration,rawFinishReason, logprobs,usage.raw, streaming warnings,includeRawChunks,ResponseMetadata.timestamp. - Streaming transcription (RFC-0028) — realtime WebSocket sessions with push-audio / next-part / abort / first-chunk and idle timeouts, an FFI session API, and first-class support in all eight bindings.
aimux-webconsole (RFC-0029) — browser-based model-call testing and trace visualization, shipped as release artifacts.- In-page API key settings for the console (RFC-0029 revision) —
set provider keys in the browser (Settings page): in-memory by default,
opt-in disk persistence at
0600, masked hints only, and plaintext entry is loopback-gated (non-loopback binds fall back toenv:VARreferences). - FFI/binding ergonomics — default-capacity ring init, cancellable Go
streams,
ProviderWithConfig(Go), fullProviderOptionsforprovider()(Python), optional recording-ring capacity in every language.
Fixed
Provider correctness
- Gemini:
functionResponse.namenow uses the tool name instead of the opaque call id (multi-turn tool calls no longer 400) (#127). - Anthropic: in-stream errors now emit the terminal
Finishpart (contract parity with OpenAI/Google) (#128); assistant reasoning — including its signature — is echoed back when thinking is enabled (#131/#138). - Bedrock & Anthropic: streaming no longer drops reasoning signatures; extended-thinking multi-turn keeps its context (#131).
- Vertex: grounding / url-context / code-execution / server-tool results are no longer silently dropped from streams; finish metadata restored (#141/#143).
- AWS SigV4 signs the host header with non-default ports; local gateways and proxied environments no longer fail (#125/#129).
- Six providers (openai/bedrock/cohere/mistral/huggingface/anthropic) stop discarding response fields they had already parsed (#101/#139).
- Recording: writer I/O failures (e.g. ENOSPC) surface through
try_flushinstead of a silent Ok, and the completion barrier requires the input record before finalizing (#110/#133). - Structured
ApiCall/NoSuchProviderfields with unified retry classification (#94); retry config honored for vertex/anthropic-aws; credential-source accuracy for xai/open-responses; real provider identity surfaced on the OpenAI chat path. - Kotlin: the documented retryable timeout sentinel for
nextPartis actually reachable (#116/#144); close-race read/write locks for handle types in Kotlin/Java/Flutter; Python exposes recording / mock-replay /get_model_specswith typed exceptions.
Tests & fixtures
- Cassette bodies are no longer blanked for every streaming response — 157 recovered recordings across 640 files (#102).
- Contract fixtures now type-check (field values, not just names)
across Rust and all eight bindings; the
top_kdrift that hid for months is regression-locked (#106).
Engineering
- Quality gates: workspace fmt, clippy baseline plus a permanent
5-lint subset (1,521 fixes, incl. 146 hand-written
# Errorsdocs),rustdoc -D warningsin CI, ts-rs type-drift check, ProviderName generator-drift check. - Coverage infrastructure (cargo-llvm-cov) with a 78.5% workspace baseline; unified e2e suite extended to six protocols; a 96-export FFI smoke harness; RFC-0028 error-path coverage in Rust, Python and Node.
- Round 4 quality audit: 16 verified findings, full reports under
docs/quality-audit/round4/; unused-dependency sweep; rustdoc errors 47 → 0. - Release pipeline hardened from the 0.2.1 post-mortem (JVM Central Portal routing, napi rebuild before publish, Flutter xcframework embedding) plus a troubleshooting handbook.
Removed
aimux_last_error()(C ABI) — replaced by theAimuxErrorout-param.- The C ABI JSON error envelope and the streaming
on_errorcallback.
-
0.2.104 Aug 2026Release notes
Open source →What's Changed
- fix(go): correct Go binding doc examples that fail to build/run by @cunninghamcard-bit in #11
- ci: run Go binding on macOS + fix go-build runner (macos-13 → macos-15-intel) by @eric8810 in #13
- ci(release): fix GitHub Release on workflow_dispatch (missing tag) by @eric8810 in #14
- docs: install & native library setup for all bindings by @eric8810 in #16
- feat(codex): OpenAI Codex provider (RFC-0018) + session affinity docs (RFC-0019) by @eric8810 in #18
- fix(ffi): preserve detailed errors across the C ABI (issue #17) by @eric8810 in #19
- fix(ffi): constructors return JSON handle/error envelope, replacing aimux_last_error (issue #17) by @cunninghamcard-bit in #21
- feat(logging): unified tracing observability (RFC-0014) by @eric8810 in #20
- feat: add InferenceHub provider to OpenAI-compatible registry by @tianyiswufeng in #22
- chore(release): prepare 0.2.0 publishing — ai.arcships namespace, Flutter plugin, CI/CD by @eric8810 in #23
- feat(flutter): SPM support, privacy manifest, example app with real iOS/Android CI builds by @eric8810 in #24
- fix(flutter): stage xcframework slice via script_phase — iOS CocoaPods link (issue #25) by @eric8810 in #26
- docs: iOS CocoaPods link verified (issue #25/#26) by @eric8810 in #27
- chore(release): bump to 0.2.1 — first Maven/pub.dev release by @eric8810 in #28
New Contributors
- @cunninghamcard-bit made their first contribution in #11
- @tianyiswufeng made their first contribution in #22
Full Changelog: v0.2.0...v0.2.1
What's Changed
- fix(go): correct Go binding doc examples that fail to build/run by @cunninghamcard-bit in #11
- ci: run Go binding on macOS + fix go-build runner (macos-13 → macos-15-intel) by @eric8810 in #13
- ci(release): fix GitHub Release on workflow_dispatch (missing tag) by @eric8810 in #14
- docs: install & native library setup for all bindings by @eric8810 in #16
- feat(codex): OpenAI Codex provider (RFC-0018) + session affinity docs (RFC-0019) by @eric8810 in #18
- fix(ffi): preserve detailed errors across the C ABI (issue #17) by @eric8810 in #19
- fix(ffi): constructors return JSON handle/error envelope, replacing aimux_last_error (issue #17) by @cunninghamcard-bit in #21
- feat(logging): unified tracing observability (RFC-0014) by @eric8810 in #20
- feat: add InferenceHub provider to OpenAI-compatible registry by @tianyiswufeng in #22
- chore(release): prepare 0.2.0 publishing — ai.arcships namespace, Flutter plugin, CI/CD by @eric8810 in #23
- feat(flutter): SPM support, privacy manifest, example app with real iOS/Android CI builds by @eric8810 in #24
- fix(flutter): stage xcframework slice via script_phase — iOS CocoaPods link (issue #25) by @eric8810 in #26
- docs: iOS CocoaPods link verified (issue #25/#26) by @eric8810 in #27
- chore(release): bump to 0.2.1 — first Maven/pub.dev release by @eric8810 in #28
New Contributors
- @cunninghamcard-bit made their first contribution in #11
- @tianyiswufeng made their first contribution in #22
Full Changelog: v0.2.0...v0.2.1
Release notes
Open source →Patch release following 0.2.0. First Maven Central (Java + Kotlin) and pub.dev (Flutter) release; Rust / Node / Python re-released to stay aligned with the new bindings.