Repository navigation
Releases
Releases · independo-gmbh/inderun
v0.5.0
0.5.0 (2026-11-10)
⚠ BREAKING CHANGES
- speech: IndeRunApi gains a required close() member on TypeScript,
Swift and Kotlin, so custom IndeRunApi implementations must add it.
NeuralSpeechRuntime gains close() (optional on Web, defaulted on Swift; the
Kotlin interface now extends AutoCloseable with a default no-op). - providers: on Kotlin, getModelPackageValidationIssues and
ModelPackageValidationIssue moved from app.independo.inderun.providers.onnx
(inderun-onnx-providers) to app.independo.inderun.core (inderun-core);
update the import. Swift keeps compiling: IndeRunOnnxProviders re-exports
IndeRunCore, where the validator now lives. - contracts: PlaybackOutput's flat 'durationMs', 'firstAudioMs' and 'firstChunkMs'
moved into 'timing' (PlaybackTiming), on the wire and on SpokenSpeech in all three
SDKs; the Swift PlaybackOutput(durationMs:) and (durationMs:firstAudioMs:)
compatibility initializers and with(durationMs:) are gone, PlaybackOutput.CodingKeys
is 'timing' only. firstAudioMs now counts from the provider receiving the request, not
from the handoff to the platform. The generated Swift memberwise initializers of
ModelPackage, Runtime and ProviderVoice gained parameters; labelled compatibility
initializers keep the previous signatures. Format gained 'coreai', so exhaustive
switch/when statements need a case. The Kotlin ProviderVoice constructor gained
'locales' before 'name' (named arguments are unaffected). TypeScript SpeechVoiceInfo
gained a required 'kind'. - speech: The generated Swift PlaybackOutput.CodingKeys gains a
firstAudioMs case, so a switch over it that lists every case must add one.
PlaybackOutput(durationMs:) and with(durationMs:) keep compiling. - sdk: A custom ONNX runtime (OnnxGenAiRuntime,
AndroidOnnxGenAiRuntime, OnnxTextGenerationRuntime) must add availability(),
and prepare() now loads the model, so a corrupt model is found at load, not at
routing. AppleFoundationModelsAvailability gains notReady. ML Kit, Chrome and
Foundation Models descriptors now carry taskCapabilities. - api: IndeRunApi gains readArtifact and disposeArtifact, which every implementer (including the Capacitor bridge and test fakes) must add. RunContext and ProviderStreamContext gain an artifacts sink.
- engine: RunContext and ProviderStreamContext gain commit(), and ProviderStreamEvent gains a result case that exhaustive Swift switch / Kotlin when statements must handle. The Swift/Kotlin terminal-outcome factories take an optional partialText and output. A cancelled stream outcome may now carry neither partialText nor output.
- contracts: the generated Output/OutputType types are renamed TaskOutput/TaskOutputType (Swift Kind is TaskKind), TaskResult.output.text and the terminal finalText/partialText are optional in the generated types, and TaskKind/TaskOutputType gain cases that exhaustive switch/when statements must handle. Text JSON payloads are unchanged, and generateText/streamText still return a non-optional string.
- routing: the route-plan and provenance reason codes gain
input_not_supported, output_delivery_not_supported,
output_format_not_supported, locale_not_supported and
voice_not_available; an exhaustive Swift switch over the generated Code
must handle them. A provider whose descriptor lists a task other than
text_to_text without declaring taskCapabilities is now rejected for it
with task_not_supported. The generated Swift memberwise initializers of
ProviderDescriptor, ProviderDynamicCapabilities, RoutePlannerInputTask and
Candidate gain parameters. Text requests reach the planner with inputs
["text"]. The planner's JSON output omits absent optional fields
instead of writing null. See docs/migration.md. - contracts: the provider capability types are generated contracts.
Swift and Kotlin nested types move to top-level names:
ProviderDescriptor.ProviderType -> ProviderType, TransportType ->
ProviderTransport, StreamingStyle -> StreamingStyle, SupportsCapabilities
-> ProviderSupports, CancelSemantics -> CancelSemantics, ResourceLimits ->
ProviderLimits, PrivacyDescriptor -> ProviderPrivacy, and the request
privacy enum PrivacyEnum -> Privacy. Kotlin enum entries are PascalCase
with a rawValue (ProviderType.Local, CancelSemantics.None), ProviderLimits
fields are Long?, and these types must be constructed with named
arguments. Swift keeps the 0.4 initializer labels through convenience
initializers. A route-planner input passed to planRouteJson must carry
complete provider descriptors. See docs/migration.md.
Features 🚀
- api: add the engine-owned artifact store with bounded reads and disposal (3a64f29), closes #247
- contracts: admit text-to-speech requests and non-text outputs in the 1.0 contracts (b5e4bf2)
- contracts: describe speech models, multilingual voices and playback timing (#260) (3dca2e0)
- contracts: generate the provider capability snapshot from a schema (c83bd81), closes #210
- core: add the optional audio output host service (#260) (575836f)
- demo: publish the reference speech experience and release checks (7b5aa81), closes #250 #252
- demos: add the opt-in Voices lab and the neural model catalog (#260) (b448f66)
- engine: commit non-text outputs explicitly and carry them in terminal outcomes (f3d7216)
- engine: write artifacts to app-provided destinations (967e8fe)
- providers: add the Android system speech provider (32e1930), closes #248
- providers: add the Apple Core AI neural speech runtime (#260) (b2e4edb), closes #function #if
- providers: add the Apple system speech provider (263fce4), closes #244 #247
- providers: add the browser speechSynthesis provider (292c7fd), closes #249
- providers: add the neural speech provider family (#260) (2e8b208)
- providers: normalize German text before neural speech (#260) (a43d049)
- providers: run neural speech through ONNX Runtime with the Articulino pipeline (#260) (270fbf2)
- routing: match providers on per-task capabilities (59c503d), closes #243
- routing: project speech requests onto the planner and re-check the bound voice before each attempt (902ae8b)
- sdk: add speak, generateSpeech, listVoices and prepare (65766e2), closes #246
- speech-text: normalize English text for speech (6c27eac)
- speech: add neural speech benchmark reports and verification records (#276) (ec7fde4)
- speech: bound audio output waits, add close(), deflake tests, ship WASM release builds (#280) (ba275b5)
- speech: normalize English text before neural synthesis (17f9178)
- speech: run the export...
v0.5.0-rc.21
0.5.0-rc.21 (2026-11-10)
Bug Fixes 🛠️
- onnx: keep a session loaded during cancellation from leaking on Kotlin (ac12c31)
- onnx: release the default text runtime with the provider's close() on Swift and Kotlin (5a1614e)
- speech: let the Core AI factory's provider release the runtime it built (ee73062)
- web: declare the package side-effect free so the facade bundles alone (6eaa3c7)
v0.5.0-rc.20
v0.5.0-rc.19
v0.5.0-rc.18
0.5.0-rc.18 (2026-11-10)
Features 🚀
- speech-text: normalize English text for speech (6c27eac)
- speech: normalize English text before neural synthesis (17f9178)
- web: select provider runtimes with JSON descriptors (#213) (62a7838)
Bug Fixes 🛠️
- android: declare ACCESS_NETWORK_STATE in the system speech providers manifest (e3532df)
- android: drop core-ktx and document consumer host requirements (#214) (fcbac10)
- speech-text: read German money with a decimal point, a dash or cents only (033c23b)
Documentation 📚
- plans: add v0.5.0 readiness plan (deb992a)
Miscellaneous Chores 🛠️
- get dev ready for v0.5.0 (#213, #214, English speech text, #276) (#296) (c093dbc)
- website: launch inderun.dev with a single-source documentation architecture (#292) (b4fbc88)
Tests 🛠️
CI/CD 👷
- swift: run the Swift checks as parallel jobs (1f13b70)
v0.5.0-rc.17
0.5.0-rc.17 (2026-11-09)
⚠ BREAKING CHANGES
- speech: IndeRunApi gains a required close() member on TypeScript,
Swift and Kotlin, so custom IndeRunApi implementations must add it.
NeuralSpeechRuntime gains close() (optional on Web, defaulted on Swift; the
Kotlin interface now extends AutoCloseable with a default no-op).
Features 🚀
- speech: add neural speech benchmark reports and verification records (#276) (ec7fde4)
- speech: bound audio output waits, add close(), deflake tests, ship WASM release builds (#280) (ba275b5)
- speech: run the exported Articulino Core AI asset and record the conversion (#279) (ddf2671)
Documentation 📚
v0.5.0-rc.16
0.5.0-rc.16 (2026-11-09)
Bug Fixes 🛠️
Miscellaneous Chores 🛠️
- deps: bump com.google.mlkit:genai-common in /android (4aa35ed)
- deps: bump com.google.mlkit:genai-prompt in /android (62e90f5)
- deps: bump the gradle-routine group across 1 directory with 4 updates (7ba1270)
- deps: bump the npm-routine group across 1 directory with 5 updates (5618437)
- deps: bump wasm-bindgen (8a2d0ba)
Tests 🛠️
- web: freeze the clock in the system speech engine test (fa228d8)
v0.5.0-rc.15
v0.5.0-rc.14
Neural speech demo assets 2
Derived Core AI asset for the IndeRun Voices lab and the Apple Core AI runtime (#279): articulino.aimodel, published as its three files main.mlirb, main.hash and metadata.json (place them in a directory named articulino.aimodel). Modification: the PyTorch stages of eigenhand/articulino (commit 66f79f60, weights revision 38ad5471) were re-traced with torch.export and converted with Apple coreai-torch 0.4.3; the time-embedding frequencies are a constant and the iSTFT is rewritten as a matmul. See MODIFICATIONS.md. Apache-2.0, LICENSE and NOTICE included. Requires iOS/macOS 27. The asset is not byte-reproducible; SHA256SUMS lists the validated bytes.