PackageTrack
Sign in Get early access

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 2026
Release Pre-release

Releases

latest 2
  1. 0.3.0 17 Aug 2026
    Release notes

    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

    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.

    Open source →
    Release notes

    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::RateLimited gained message: String (now RateLimited { retry_after_ms, message }); #[serde(default)] keeps old payloads deserializable, but the generated TypeScript marks message required — update exhaustive destructuring.
    • GenerateTextOptions / CallOptions / StreamTextResult gained 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 return Result<&'static Client, AiMuxError>: client-build failures (TLS backend, resource exhaustion) surface as a sticky, non-retryable ApiCall instead 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 AimuxError out-parameter with typed code + HTTP status + retry hint; the JSON error envelope, the streaming on_error callback, and aimux_last_error() are removed.
    • All six bindings restructured to the typed error model.
    • Kotlin: topK is now Double (was Long — 40.5 truncated silently); published artifacts require JDK 17 (jvmToolchain(17)).
    • Java: topK likewise 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 / JsonlRecorder plus a bounded in-memory RingRecorder with drop counting; layer-B HTTP choke-point recording (per-attempt, streaming, credential redaction); mock & request replay with matchers and the aimux-replay CLI; cross-binding exposure via C ABI, Python, Node, Go, Swift, Kotlin, Java, Flutter; config_snapshot() captures the minimal provider/model identity. aimux_recording_try_flush FFI export reports write failures (sticky first error) across the ABI (#133/#137).
    • Session grouping (RFC-0024) — session_id groups related calls; SessionStore + SessionInferer with query APIs in all bindings; session-cache trajectory export.
    • Cache-hit tracing (RFC-0015) — TraceLayer, verdict engine, and RingTraceStore detect prompt-cache hits from provider headers (vLLM / SGLang / LMCache behaviours), with cluster/route-aware gating; exposed in every binding.
    • aimux-cli cache-probe client (RFC-0025) — offline / session / provider probing over the trace store.
    • OpenAI-compatible output (RFC-0026) — generateOpenAIOutput across all eight bindings.
    • Model catalogue & listing (RFC-0027) — Provider::list_models and get_model_specs with reasoning/capability metadata.
    • External provider config overlay (RFC-0020) — register or override OpenAI-compatible providers from JSON at runtime.
    • Composite models — drop-in LanguageModel wrappers, usable from every binding with zero call-site changes:
      • RouterModel (RFC-0021) routes each call to one child model through a pluggable Router strategy (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 growthstreamText aggregation, 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-web console (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 to env:VAR references).
    • FFI/binding ergonomics — default-capacity ring init, cancellable Go streams, ProviderWithConfig (Go), full ProviderOptions for provider() (Python), optional recording-ring capacity in every language.

    Fixed

    Provider correctness

    • Gemini: functionResponse.name now 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 Finish part (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_flush instead of a silent Ok, and the completion barrier requires the input record before finalizing (#110/#133).
    • Structured ApiCall/NoSuchProvider fields 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 nextPart is actually reachable (#116/#144); close-race read/write locks for handle types in Kotlin/Java/Flutter; Python exposes recording / mock-replay / get_model_specs with 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_k drift 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 # Errors docs), rustdoc -D warnings in 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 the AimuxError out-param.
    • The C ABI JSON error envelope and the streaming on_error callback.
    Open source →
    Release notes

    v0.3.0 Latest

    Latest

    Compare

    Choose a tag to compare

    Open source →
  2. 0.2.1 04 Aug 2026
    Release notes

    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

    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

    Full Changelog: v0.2.0...v0.2.1

    Open source →
    Release notes

    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.

    Open source →
    Release notes

    v0.2.1

    Compare

    Choose a tag to compare

    Open source →

Every package, every release, already written down.

The archive is open and free. Watching your own project is what we are building next.

Browse the archive