| v0.128.0 | <!-- alef-release-state:v1 {"assets": ["alef-x86_64-unknown-linux-gnu.tar.gz", "alef-aarch64-unknown-linux-gnu.tar.gz", "alef-x86_64-unknown-linux-musl.tar.gz", "alef-aarch64-unknown-linux-musl.tar.gz", "alef-aarch64-apple-darwin.tar.gz", "alef-x86_64-apple-darwin.tar.gz", "alef-x86_64-pc-windows-msvc.zip"], "schema": 1, "source_sha": "a1e66e2343e77a5bde530ce46caa852a67c19d20", "tag": "v0.128.0", "version": "0.128.0"} --> | High | 11/7/2026 |
| v0.127.2 | <!-- alef-release-state:v1 {"assets": ["alef-x86_64-unknown-linux-gnu.tar.gz", "alef-aarch64-unknown-linux-gnu.tar.gz", "alef-x86_64-unknown-linux-musl.tar.gz", "alef-aarch64-unknown-linux-musl.tar.gz", "alef-aarch64-apple-darwin.tar.gz", "alef-x86_64-apple-darwin.tar.gz", "alef-x86_64-pc-windows-msvc.zip"], "schema": 1, "source_sha": "2362d844d03f68bba3c34fca0a8afccbb2f15574", "tag": "v0.127.2", "version": "0.127.2"} --> | High | 11/6/2026 |
| v0.124.2 | <!-- alef-release-state:v1 {"assets": ["alef-x86_64-unknown-linux-gnu.tar.gz", "alef-aarch64-unknown-linux-gnu.tar.gz", "alef-x86_64-unknown-linux-musl.tar.gz", "alef-aarch64-unknown-linux-musl.tar.gz", "alef-aarch64-apple-darwin.tar.gz", "alef-x86_64-apple-darwin.tar.gz", "alef-x86_64-pc-windows-msvc.zip"], "schema": 1, "source_sha": "4e228d27a85645ef0c37574b6ec0c5f64fe0f139", "tag": "v0.124.2", "version": "0.124.2"} --> | High | 11/5/2026 |
| v0.122.1 | <!-- alef-release-state:v1 {"assets": ["alef-x86_64-unknown-linux-gnu.tar.gz", "alef-aarch64-unknown-linux-gnu.tar.gz", "alef-aarch64-apple-darwin.tar.gz", "alef-x86_64-apple-darwin.tar.gz", "alef-x86_64-pc-windows-msvc.zip"], "schema": 1, "source_sha": "684c93e1a8ab0b91f716de55d7b9e7cf9567906a", "tag": "v0.122.1", "version": "0.122.1"} --> | High | 11/4/2026 |
| v0.118.0 | <!-- alef-release-state:v1 {"assets": ["alef-x86_64-unknown-linux-gnu.tar.gz", "alef-aarch64-unknown-linux-gnu.tar.gz", "alef-aarch64-apple-darwin.tar.gz", "alef-x86_64-apple-darwin.tar.gz", "alef-x86_64-pc-windows-msvc.zip"], "schema": 1, "source_sha": "c222deecc4657014c61d000a3da1912fb25d2de8", "tag": "v0.118.0", "version": "0.118.0"} --> | High | 11/3/2026 |
| v0.115.14 | <!-- alef-release-state:v1 {"assets": ["alef-x86_64-unknown-linux-gnu.tar.gz", "alef-aarch64-unknown-linux-gnu.tar.gz", "alef-aarch64-apple-darwin.tar.gz", "alef-x86_64-apple-darwin.tar.gz", "alef-x86_64-pc-windows-msvc.zip"], "schema": 1, "source_sha": "8b01034113c7d60dbf22c85e3c07e61c30af26f4", "tag": "v0.115.14", "version": "0.115.14"} --> | High | 11/1/2026 |
| v0.115.12 | <!-- alef-release-state:v1 {"assets": ["alef-x86_64-unknown-linux-gnu.tar.gz", "alef-aarch64-unknown-linux-gnu.tar.gz", "alef-aarch64-apple-darwin.tar.gz", "alef-x86_64-apple-darwin.tar.gz", "alef-x86_64-pc-windows-msvc.zip"], "schema": 1, "source_sha": "305d5c0aa4642ddebf1d2fead01e48b55a230025", "tag": "v0.115.12", "version": "0.115.12"} --> | High | 11/1/2026 |
| v0.115.10 | ### Changed - Generate Java projects with Maven Enforcer 3.7.0. ### Fixed - Fetch locked Swift consumer dependencies before extraction and count the new verification control. - Sync core dependency requirements in extra Cargo manifests, preserving inherited versions and external package aliases. (#754) - Avoid redundant result-metadata construction when rendering ordinary documentation snippets, preserving caller-supplied PHP and Swift resolvers. (#753) | High | 10/31/2026 |
| v0.115.6 | ### Changed - Replace go-task with mise tasks: alef's own tasks keep their names under `mise run`, CI invokes them through mise, and `Taskfile.yml`, `.task/` and the `task` tool pin are gone. - Drive native test fixtures through `mise run` with a fixture-scoped, trusted `mise.toml` that never merges a parent config. - Generated comments and docs name `mise run <task>` instead of `task <task>`. ### Fixed - Export Python keyword methods under the names declared by their stubs and omit unreachab | High | 10/29/2026 |
| v0.115.5 | ### Changed - Generate Brew and Homebrew suites with Bats and shared helpers, retain compatibility launchers, and cover release and census scripts with shell regression tests in CI. - Remove two generator function-length lint exemptions and refresh the lint-debt baseline. - The `alef` agent skill now documents the consumer `alef:*`, `e2e:*` and `version:*` tasks and why `alef sync-versions` alone is not a version bump, replacing the agent-conventions `alef-workflow` skill. ### Fixed - Stage F | High | 10/27/2026 |
| v0.115.3 | ### Fixed - Check concrete native members without requiring structural Python protocol callbacks on the native marker class, including generic and qualified `typing.Protocol` bases. - Keep PHP error-payload compilation and runtime probes independent of the test process's temporary working directory. - Isolate formatter tests that hide `poly` from `PATH` in child processes so they cannot intermittently disable colocated Go formatters during parallel tests. - Resolve Ruby tagged-enum variant clas | High | 10/27/2026 |
| v0.114.2 | ### Fixed - Preserve trailing newlines when generated Brew assertions extract JSON string values, and report JSON extraction failures without masking them. - Preserve separators between projected JSON values in Brew assertions to prevent false matches. - Allow AI-Rulez validation to run manually against the current release commit. | High | 10/24/2026 |
| v0.113.4 | ### Fixed - Restore supported Rust error display templates in generated Dart Freezed variants while preserving typed payloads, factory constructors, and unsupported-format fallbacks. - Consult runtime fixture origins for file-backed mock responses so HTML redirects and root-relative links use their dedicated listener, retaining shared-server fallback for ordinary bodies. - Keep resolved C accessor expressions distinct from raw call identifiers and verify every loaded e2e template registry with | High | 10/23/2026 |
| v0.113.2 | ### Fixed - Validate generated Dart bindings with the Dart 3.13.7 security patch in CI on Linux, macOS and Windows (#675). - Honor the configured crate and CLI release channels through the repaired shared metadata action, preserving explicit target selection across workflow events. | High | 10/23/2026 |
| v0.111.0 | ### Changed - Reject invalid FRB generation configuration unless FRB generation is explicitly skipped. - Raise the generated PHP binding dependency floor to ext-php-rs 0.16.3, which uses ZIP 9. ### Fixed - Link generated Swift callbacks on Apple targets with strict linker flags while keeping unrelated undefined symbols as errors. - Report failed or skipped required Dart Freezed generation before post-processing generated bindings. - Avoid Dart error accessor names that conflict with generate | High | 10/18/2026 |
| v0.110.16 | ### Fixed - Accept formatted C headers with continued preprocessor guards when checking generated FFI freshness. | High | 10/15/2026 |
| v0.110.12 | ### Fixed - Preserve every configured R package author with one creator, handle closing brackets in author display names, and escape Kotlin Android developer metadata as Kotlin string literals. - Preserve declared unit enum defaults in recorded Swift initializer overloads, including acronym and keyword case names, and reject unsupported associated constants before emitting Swift. - Update Rustls to 0.23.46 to fix four TLS security advisories. Validation: 19 focused tests including native Swift | High | 10/14/2026 |
| v0.110.11 | ### Changed - Split language-filter configuration tests into a focused module, bringing the parent test file below the size cap while preserving all ten moved tests. - Update the generated Maven Central publishing plugin to 0.12.0 ([#565](https://github.com/xberg-io/alef/pull/565)). ### Fixed - Preserve recorded Swift DTO initializer overloads as callable function references while retaining extended initializers and their defaults; reject recorded metadata whose extension defaults cannot be | High | 10/14/2026 |
| v0.110.4 | ### Changed - Move Dart FFI component emission into a registered Jinja template without changing generated bytes, removing one lint warning. - Refresh the compatible Cargo lockfile, updating deranged to 0.5.9. ### Fixed - Recorded constructors retain resolved string, integer, floating-point, collection, enum and null defaults for added fields, including inserted fields; unknown defaults report the field and type ([#554](https://github.com/xberg-io/alef/issues/554)). - Preserve Kotlin JNI posi | High | 10/13/2026 |
| v0.110.0 | ### Changed (BREAKING) - Generated C# e2e projects use `xunit.v3.mtp-off` 4.0.2 and `xunit.runner.visualstudio` 4.0.1, replacing the deprecated xUnit v2 package. Test projects now emit `OutputType=Exe` and retain VSTest compatibility; custom harness extensions using xUnit v2 APIs must migrate to xUnit v3. ### Fixed - Split CLI adoption reports, validation diagnostics, extraction deduplication, Swift checksum preparation, and TOML merge provenance into focused helpers, removing five lint | High | 10/11/2026 |
| v0.109.6 | **Full Changelog**: https://github.com/xberg-io/alef/compare/v0.109.5...v0.109.6 | High | 10/11/2026 |
| v0.108.0 | ## What's Changed * chore(deps): update rust crate syn to v3.0.7 by @renovate[bot] in https://github.com/xberg-io/alef/pull/527 * fix(deps): update rust crate minijinja to v3 by @renovate[bot] in https://github.com/xberg-io/alef/pull/523 * chore(deps): update github actions - autoclosed by @renovate[bot] in https://github.com/xberg-io/alef/pull/522 **Full Changelog**: https://github.com/xberg-io/alef/compare/v0.107.12...v0.108.0 | High | 10/10/2026 |
| v0.107.8 | **Full Changelog**: https://github.com/xberg-io/alef/compare/v0.107.7...v0.107.8 | High | 10/9/2026 |
| v0.107.2 | **Full Changelog**: https://github.com/xberg-io/alef/compare/v0.107.1...v0.107.2 | High | 10/7/2026 |
| v0.107.0 | ### Changed - **Breaking:** Zig 0.17.0 is now the minimum and target Zig version. Newly scaffolded and published Zig packages and e2e projects declare `.minimum_zig_version = "0.17.0"` and are verified against Zig 0.17; consumers on Zig 0.16 must upgrade. Existing `build.zig.zon` files keep their current `minimum_zig_version` until edited by hand. ### Fixed - Generated Zig e2e `build.zig` files that spawn the mock server no longer call the removed `std.process.getEnvMap` or pass `.en | High | 10/7/2026 |
| v0.105.0 | ### Added - An error type's `retry_after()` method is now extracted as an introspection method. Go, the FFI layer, Java (`java.time.Duration`, `null` when absent), C# (`TimeSpan?`), Kotlin, Swift, Dart and Elixir carry it; Python, Node, PHP, Ruby and WebAssembly expose any `Duration`-valued error method as whole milliseconds (`int | None`, `number | null`, `?int`, `Integer?`), with their `.pyi`, `.d.ts`, PHP and RBS stubs. - C, Dart, Swift, Zig and Kotlin (JVM and Android) documentatio | High | 10/6/2026 |
| v0.103.17 | **Full Changelog**: https://github.com/xberg-io/alef/compare/v0.103.15...v0.103.17 | High | 10/5/2026 |
| v0.103.14 | **Full Changelog**: https://github.com/xberg-io/alef/compare/v0.103.13...v0.103.14 | High | 10/4/2026 |
| v0.103.10 | ## What's Changed * chore(deps): update rust crate insta to v1.49.0 by @renovate[bot] in https://github.com/xberg-io/alef/pull/503 * chore(deps): update rust crate jsonschema to v0.58.5 by @renovate[bot] in https://github.com/xberg-io/alef/pull/502 * chore(deps): update rust crate libc to v0.2.190 by @renovate[bot] in https://github.com/xberg-io/alef/pull/501 **Full Changelog**: https://github.com/xberg-io/alef/compare/v0.103.9...v0.103.10 | High | 10/3/2026 |
| v0.103.7 | ### Fixed - PHP trait-bridge safety errors no longer recommend the lifecycle-only `php:callbacks` mode for callback attachments it cannot preserve, and state when excluding PHP also removes an options-field carrier. - Cargo resolution failures for local path dependencies are no longer retried or reported as crates.io propagation delays under Rust 1.99. - Generated WASM classes expose `copyForTransfer()` for arrays of class values, whose elements wasm-bindgen necessarily takes by ownership. Cons | High | 10/2/2026 |
| v0.103.5 | ### Fixed - PHP trait bridges can use `exclude_languages = ["php:callbacks"]` to preserve their existing public interface and register/unregister/clear symbols without retaining request-bound Zend callbacks. Registration returns a deterministic unsupported error while unregister and clear continue to call the Rust host. - Generated Python packages expose every input type that contains a public config dataclass as a public dataclass too, including optional nested config holders, so thei | High | 10/1/2026 |
| v0.103.1 | Fix `alef verify` fixed-point prediction for formatter-managed Rust output and managed `poly.toml` files, and exclude explicitly user-owned paths from generated-content drift checks. | High | 9/30/2026 |
| v0.103.0 | ### Added - **A trait bridge can name the functions it does NOT attach to, via `[[crates.trait_bridges]] exclude_functions` (#476).** Every generated function taking the bridge's owning config struct picked up the bridge keyword, a synchronous diagnostic entry point where a listener means nothing included, and there was no way to say otherwise. Four separate predicates answered "does this function take the config" -- the shared `find_bridge_field`, the `.pyi` stub's own map walk, the | High | 9/28/2026 |
| v0.102.0 | ### Fixed - **The Java backend emitted a binding that could not compile at all.** `exception_class.jinja` generated the root exception class (`{crate}RsException`) with only `(int code, String message)` and `(String message, Throwable cause)` constructors, while `error_gen/java_error_base.jinja` unconditionally generates `{BaseName}(final String message) { super(message); }` for a class that extends it. Every generated error hierarchy therefore failed `javac` with "no suitable constru | High | 9/28/2026 |
| v0.99.0 | ## [0.99.0] - 2026-09-27 ### Added - **e2e: fan the `mock.*` request-count capture out to go, ruby, php and java (#443).** Each backend now has its own `mock_assertions::snippets::mock_capture` table entry, an `assertion_mock_capture` module wired into that backend's own assertion renderer, and a once-per-suite helper (`alefMockRequestCount`/`alef_mock_request_count`, per language convention) rendered only when a fixture's assertion actually calls it. Ruby needed two call sites, not | High | 9/27/2026 |
| v0.96.5 | ### Fixed - **extendr: an optional R options field is assigned `Some(..)` again.** `FieldDef` records a plain `Option<T>` as `ty: T` with `optional: true`; only a nested `Option<Option<T>>` carries an `Optional` `ty`. The struct emitter reads the flag and declares `Option<T>`, but the named-list decoder matched on `ty` alone and assigned a bare `T`, so the first `Option<String>` on a consumer's options struct (html-to-markdown's `ConversionOptions::base_url`) emitted `opts.base_url = | High | 9/26/2026 |
| v0.96.3 | Two independent generator fixes for untagged-union enums, both found by a consumer upgrading from 0.85.x: the magnus kwargs constructor no longer emits a `Default::default()` fallback for a field whose mirrored type has no `Default` impl (it raised `E0277` in the generated crate), and untagged `Vec<SealedClass>` variants in Kotlin keep their `@JsonTypeInfo` discriminator instead of serializing every element as `{}`. See CHANGELOG.md. | High | 9/25/2026 |
| v0.95.0 | ### Added - **`[crates.e2e] timeout_seconds`** (default 1800): the kotlin_android e2e Gradle `Test` tasks now emit a `testLogging` block (passed/skipped/failed events, standard streams, full exception format) and a `timeout` on the task, so a hung native call fails with attribution instead of running until the CI job cap. ### Fixed - fix(e2e): guard the root-array `ArrayField { name: "" }` case in every remaining backend renderer. #411 fixed `[0].id` rendering for Ruby, Python and Rust | High | 9/21/2026 |
| v0.94.0 | ### Changed - **Python constructor stubs distinguish omitted Rust-default values from nullable arguments.** A defaulted field is now optional only when omitted, while an explicit `None` remains governed by the native constructor contract. - **Python unit enums provide integer-consistent hashing and typed tuple-variant factories.** Generated stubs and DTO coercion discovery match the runtime constructors and hash behavior. - **BREAKING (Magnus/Ruby): eligible tagged and untagged single- | High | 9/20/2026 |
| v0.92.1 | ### Fixed - **PyO3: a non-optional DTO field defaulted by a resolved core function returning the core type (`CrawlConfig::ssrf`, `#[serde(default = "SsrfPolicy::from_env")]`) no longer breaks the generated crate.** The shared `serde_default_field_attr` fallback copied the attribute text verbatim, where `SsrfPolicy` names the *mirror* struct, which has no `from_env` (E0599). 0.92.0 exposed it: `extend_nonserializable_records` stopped marking every record holding a data enum `#[serde(s | High | 9/18/2026 |
| v0.91.5 | ### Fixed - **The Go e2e emitter chose a raw (backtick) string literal for any assertion value without a backtick, `\r`, or NUL byte, with no regard for whether the value itself carried meaning in its whitespace.** A raw literal reproduces its content byte for byte, real newlines included, so a value with whitespace immediately before a newline lands as trailing whitespace on a physical source line -- exactly the shape of a Markdown two-space hard line break. `go_needs_quoted` (`src/e | High | 9/17/2026 |
| v0.91.4 | ### Fixed - **The Go e2e emitter chose a raw (backtick) string literal for any assertion value without a backtick, `\r`, or NUL byte, with no regard for whether the value itself carried meaning in its whitespace.** A raw literal reproduces its content byte for byte, real newlines included, so a value with whitespace immediately before a newline lands as trailing whitespace on a physical source line -- exactly the shape of a Markdown two-space hard line break. `go_needs_quoted` (`src/e | High | 9/17/2026 |
| v0.90.0 | ## [0.90.0] - 2026-09-16 ### Added - **An opt-in shell formatter, emitted as `[fmt.shell.shfmt]` in the generated `poly.toml`.** Declare `[workspace.poly.shell-formatter]` (`enabled`, `indent-width`) in `alef.toml` to have the scaffolder emit the table; absent, the generated output is unchanged and alef's pure-Rust-tooling policy holds. Without this, a consumer that needs its shell scripts formatted had no choice but to hand-edit the generated (and hash-stamped) `poly.toml` directly, w | High | 9/16/2026 |
| v0.88.0 | ## What's Changed * chore(deps): lock file maintenance by @renovate[bot] in https://github.com/xberg-io/alef/pull/382 **Full Changelog**: https://github.com/xberg-io/alef/compare/v0.87.1...v0.88.0 | High | 9/14/2026 |
| v0.87.1 | ### Fixed - **(swift): an externally tagged enum carrying data on any variant now decodes serde's wire.** serde's default representation writes a fieldless variant as a bare string (`"plain"`) and a newtype variant as a single-keyed object whose value IS the payload (`{"custom":"foo"}`). `serde_codable_body` emitted a custom `Codable` for the internally tagged, adjacently tagged and untagged representations but fell through for the external one, leaving Swift's synthesized conformanc | High | 9/14/2026 |
| v0.87.0 | ### Added - **(swift): a promoted payload-carrying enum now declares `toString()`, returning its serde wire tag.** Only an all-unit enum is `RawRepresentable`, so before this a first-class enum with associated values exposed neither `.rawValue` nor `.toString()` and there was no way to read which variant a value held without a full `switch`. The returned value is the same tag the pre-promotion opaque binding's `to_string()` returned, computed by the same function the enum's own `Coda | High | 9/13/2026 |
| v0.85.1 | ### Fixed - **0.85.0 fixed the type emitter but not the value emitter, so generated TypeScript referenced a member that no longer exists.** With `OutputFormat` correctly declared as a flat string union (`export type OutputFormat = "plain" | ... | (string & {})`), the e2e-fixture and docs-snippet emitters kept writing `OutputFormat.Markdown` and adding the enum to the *value* import list. A type alias has no value binding â and the napi package's `index.js` exports no such symbol â so | High | 9/7/2026 |
| v0.66.0 | ### Added - **`alef generate --strict`**, meaning exactly what `alef all --strict` already documented: a configured formatter whose executable is not installed fails the run. A missing formatter stays non-fatal by default â `poly`, `rustfmt`, `cargo-sort` and `mix` are host toolchains a fresh clone may legitimately lack. - **e2e fixture validation for discarded URL literals.** A fixture that declares a scheme-carrying URL (`https://âĻ`, `gopher://âĻ`) for a `mock_url` / `mock_url_list` a | High | 8/22/2026 |
| v0.57.1 | ### Fixed - **The Dart module file no longer emits an unused `import 'traits.dart';`.** 0.56.0 added the import unconditionally so that a doc comment naming a trait (`[OcrBackend]`) would not trip `comment_references`. But the module file usually names no trait at all, so `dart analyze` then reported the import as `unused_import` â a hard lint failure in every consuming repo that regenerated on 0.56.0 or 0.57.0. The import is now emitted only when the generated body actually refers t | High | 8/7/2026 |
| v0.45.0 | - **Go backend: download-at-consume native distribution.** Published Go modules no longer require native libraries inside the module (module zips only contain the git tag's files; `.lib/` stays gitignored). The generated `cmd/setup` tool replaces `cmd/download_ffi`: it downloads the platform FFI library from the GitHub release into a versioned user cache (`os.UserCacheDir()/<name>/go/<version>/<platform>`), verifies its SHA-256 sidecar, and writes a machine-local, gitignored cgo link s | High | 7/25/2026 |
| v0.36.2 | Fixed: repair four test-app generator defects for published packages (C# NuGet id, Go testify indirects, Dart download_libs, node/wasm stale JS lockfile). See CHANGELOG. | High | 7/13/2026 |
| v0.30.14 | ## [0.30.14] - 2026-07-03 ### Fixed - **swift**: fix the `ExtractedDocument.tables()` opaque-`Vec` marshaling SIGSEGV (called out as still-open in 0.30.13). A `Vec<Named struct>` getter on a serde type was emitted as an opaque `RustVec<Table>`, which swift-bridge cannot marshal safely â dereferencing it (e.g. `.tables().count`) crashed at runtime with SIGSEGV. Such getters are now bridged as a JSON `Vec<String>` (mirroring the existing `Vec<Named enum>` handling), yielding a countabl | High | 7/3/2026 |
| v0.26.0 | ### Fixed - **version: `sync-versions` no longer rewrites externally-formatted scaffold/test-app files.** Commit `ff976c664` added a `format_generated` pass to the scaffold and test-app regen paths so `sync-versions` output matches the generate path. For repos that delegate all formatting to external tools (`[workspace.format] enabled = false`), `format_generated` is a permanent no-op, so the regen rewrote already-committed manifests (`package.json`, `composer.json`, `Package.swift`, | High | 6/22/2026 |
| v0.25.0 | ### Added - **Extension API: per-extension TOML config and `transform_emitted_files` hook.** Two new capabilities on the `Extension` trait: (1) `parse_config` now receives the actual `[extensions.<name>]` section from `alef.toml` instead of always `None`. The pipeline reads the raw TOML at extract time (`extract.rs`) and generation time (`generation.rs`) and passes the matching sub-table keyed by `extension.name()`. Backwards compatible: extensions with no `[extensions.<name>]` block | High | 6/14/2026 |
| v0.23.18 | alef v0.23.18 | High | 6/6/2026 |
| v0.20.15 | ### Fixed - **alef c e2e Makefile: declare `.DEFAULT_GOAL := all` so plain `make` builds run_tests instead of stopping after download_ffi.sh.** Without explicit default goal, Make picked the first explicit target rule encountered â `$(FFI_DIR)/include/ts_pack.h: download_ffi.sh` â causing `make` (no args) to only download FFI and exit instead of building the test binary. CI `E2E / Test C FFI` job failed with `sh: 1: ./run_tests: not found`. Fixed by adding `.DEFAULT_GOAL := all` after variable | High | 5/29/2026 |
| v0.17.34 | **Full Changelog**: https://github.com/kreuzberg-dev/alef/compare/v0.17.33...v0.17.34 | High | 5/22/2026 |
| v0.16.12 | ### Fixed - **kotlin-android: add Jackson runtime deps to `build.gradle.kts` template**: alef v0.16.11 added `@JsonDeserialize` to sealed-class Kotlin DTOs for serde-tagged polymorphism, but the kotlin-android `build.gradle.kts` template still only declared `kotlin-stdlib` + `kotlinx-coroutines-android`. The compileDebugKotlin task failed with `Unresolved reference 'com'` / `Unresolved reference 'codec'` / `Unresolved reference 'asText'` etc. Adds `jackson-databind` (for the annota | High | 5/15/2026 |
| v0.15.5 | fix(napi-backend): correct untagged enum heuristic Only treat enums as untagged when they have `#[serde(untagged)]`, not just any enum without `#[serde(tag = "...")]`. Absence of `serde_tag` means default externally-tagged serialization. Previously `VisitResult` and similar enums were misclassified as untagged, emitting an unusable `serde_json::Value` wrapper instead of a `#[napi(string_enum)]`. Same heuristic fix applied to Go, C#, and Java backends. | High | 5/9/2026 |
| v0.14.3 | Per-host doc-comment renderers (JSDoc, JavaDoc, C# XML, PHPDoc, Doxygen) plus magnus/php/rustler/extendr/wasm `unregister_*`/`clear_*` trait-bridge emission. Shared `host_function_path` helper consolidates pyo3/napi/etc. resolution. See [CHANGELOG](./CHANGELOG.md#0143---2026-05-03) for details. | High | 5/3/2026 |
| v0.8.7 | Fix CI hang in csharp `alef setup` and replace TODO placeholder in alef-generated READMEs. ## Fixed - **C# setup**: `dotnet restore packages/csharp` was walking the entire repo when no top-level `.csproj` existed (timeout on CI). Now uses `find -maxdepth 3` to resolve the first project file, with the precondition guarding the call. - **README placeholders**: alef-generated READMEs no longer emit `// TODO: add usage example`. They now point readers to the main repository's docs. | High | 4/27/2026 |
| v0.5.2 | **Full Changelog**: https://github.com/kreuzberg-dev/alef/compare/v0.5.1...v0.5.2 | High | 4/22/2026 |
| v0.5.1 | **Full Changelog**: https://github.com/kreuzberg-dev/alef/compare/v0.5.0...v0.5.1 | High | 4/21/2026 |
| v0.5.0 | **Full Changelog**: https://github.com/kreuzberg-dev/alef/compare/v0.4.6...v0.5.0 | High | 4/21/2026 |
| v0.4.6 | ### Added - Config: `exclude_functions` and `exclude_types` support for Python (PyO3), FFI, and Node (NAPI) backends ### Fixed - WASM: always import `js_sys`, skip functions referencing excluded types - Rustler: fix f32/f64 stub return values (`0` â `0.0`) - Codegen: use Debug formatting for sanitized Vec conversions - Codegen: extend `gen_serde_let_bindings` to handle `Vec<Named>` params - PyO3/Rustler/WASM: suppress generated-code clippy lints | High | 4/21/2026 |
| v0.4.5 | **Full Changelog**: https://github.com/kreuzberg-dev/alef/compare/v0.4.4...v0.4.5 | High | 4/21/2026 |
| v0.4.4 | ### Changed - CLI: parallelize code generation, build, lint, and test loops with rayon - CLI: parallelize file writing and diff checks across languages - CLI: build commands within independent and FFI-dependent groups run concurrently - CLI: switch rustfmt to stdin-based piping with explicit `--config-path` (thread-safe, respects `rustfmt.toml` from any CWD) - CLI: lazy-compile fixed regex patterns in version sync with `LazyLock` - Docs: replace `push_str(&format!())` with `write!()` macro to e | High | 4/21/2026 |
| v0.4.2 | ## What's Changed ### Added - **Trait bridge codegen** â auto-generate FFI bridges for Rust traits (PyO3 backend) - Shared `TraitBridgeGenerator` trait and `TraitBridgeSpec` for cross-backend bridge generation - `[[trait_bridges]]` config table for per-trait bridge configuration - `super_traits` and `has_default_impl` IR fields for trait analysis - `CoreWrapper::ArcMutex` variant for `Arc<Mutex<T>>` wrapping - E2E standalone mock server, WASM globalSetup, `count_equals`/`is_true` assertions - B | High | 4/20/2026 |
| v0.4.1 | ## What's Changed ### Added - E2E: `MockResponse` struct on `Fixture` for mock HTTP server support - E2E: Rust mock server codegen â generates Axum-based mock servers from fixture `MockResponse` data - E2E: always add `[workspace]` to generated Cargo.toml ### Fixed - Codegen fixes across all backends for liter-llm migration compliance - Python: D101 docstrings, mypy dict type args, exception docstrings - Java: tagged union newtype variants use `@JsonUnwrapped` - NAPI: wrap boxed enum variant | High | 4/19/2026 |
| v0.4.0 | **Full Changelog**: https://github.com/kreuzberg-dev/alef/commits/v0.4.0 | High | 4/19/2026 |
| v0.3.5 | **Full Changelog**: https://github.com/kreuzberg-dev/alef/compare/v0.3.4...v0.3.5 | High | 4/16/2026 |
| v0.3.4 | ## Added - `alef sync-versions --set <version>` â set an explicit version (supports pre-release like `0.1.0-rc.1`) - `alef verify` now checks version consistency across all package manifests - `alef-sync-versions` pre-commit hook for automatic version propagation on Cargo.toml changes - PEP 440 pre-release conversion for Python (`0.1.0-rc.1` â `0.1.0rc1`) - `reverse_conversions` config flag to gate binding-to-core `From` impls - E2E registry mode for test_apps generation across all 12 languages | High | 4/15/2026 |
| v0.3.3 | ## Added - Distributable Claude Code skill for alef consumers ## Fixed - PHP 100% coverage â `createEngineFromJson`, JSON config e2e support - PHP snake_case properties, enum scalars, serde casing, camelCase facade - PHP class registration, property access, per-field attributes - PHP setters documented, enum serde casing via `serde_json` - PHP tests updated for `Api` class pattern (no more standalone `#[php_function]`) - Correct DTO style naming (`typed-dict` not `typeddict`), add `serde_rena | High | 4/14/2026 |
| v0.3.2 | ### Fixed - Disable `jsonschema` default features (`resolve-http`, `tls-aws-lc-rs`) to remove `reqwest`/`aws-lc-sys` from dependency tree, fixing GoReleaser cross-compilation **Full Changelog**: https://github.com/kreuzberg-dev/alef/blob/main/CHANGELOG.md | High | 4/13/2026 |
| v0.3.1 | ### Fixed - Elixir resource registration and enum conversion fixes - C# opaque handle wrapping, error handling, `Json` to `object` type mapping, `WhenWritingDefault` serialization - Dropped `x86_64-apple-darwin` from GoReleaser targets (`aws-lc-sys` cross-compile failure) **Full Changelog**: https://github.com/kreuzberg-dev/alef/blob/main/CHANGELOG.md | Medium | 4/13/2026 |
| v0.3.0 | ## What's Changed ### Added - Pre-commit hook support for consumer repos (`alef-verify` and `alef-generate` hooks) - Blake3-based caching for stubs, docs, readme, scaffold, and e2e generation - `cargo binstall alef-cli` support via binstall metadata - `alef-docs` and `alef-e2e` added to crates.io publish workflow - Kreuzberg banner, crates.io badges, and Discord links on all crate READMEs - CHANGELOG.md with backfilled v0.1.0 and v0.2.0 entries ### Changed - All workspace dependencies consolid | Medium | 4/13/2026 |
| 0.0.0 | No release found â using repo HEAD | High | 4/11/2026 |