--- last_commit_released: c977d78b39225a51c7bd051a1fe363ed0ccbe201 include: - ../fable-library-beam/ - ../fable-library-dart/ - ../fable-library-php/ - ../fable-library-php/ - ../fable-library-py/ - ../fable-library-rust/ - ../fable-library-ts/ - ../Fable.Compiler/ - ../Fable.Transforms/ - ../Fable.AST/ - ../../lib/ --- # Changelog All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## 5.5.0 - 2026-06-30 ### ๐Ÿš€ Features * *(all)* Add `Compiler.is*` target detection flags for conditional branching (#4692) ([621dea31](https://github.com/fable-compiler/Fable/commit/621dea31daaef6a9dcf8a2ac5ceb144a063bb873)) * *(js/ts)* Map task { } to Promise ([97f54d36](https://github.com/fable-compiler/Fable/commit/97f54d3692e5ba881c249b289c20b4fad5ac27e2)) * *(js/ts/python/beam)* Add support for `Async.AwaitEvent` (#4693) ([71c98179](https://github.com/fable-compiler/Fable/commit/71c981792b6ff99cd417bb2e70a13a9d55ed72cf)) ### ๐Ÿž Bug Fixes * *(all)* Pass raw value for optional arguments of native bindings (#4688) ([a4c75483](https://github.com/fable-compiler/Fable/commit/a4c7548313fcbefc0ff0eddc7a95d8d0599d68a6)) * *(all)* Support .NET format specifiers and alignment in interpolated strings (#4695) ([7c50a3af](https://github.com/fable-compiler/Fable/commit/7c50a3af39aee935ce318f44e04247da32b33f0f)) * *(all)* Error on inline function referencing private value (#4701) ([cea6806e](https://github.com/fable-compiler/Fable/commit/cea6806ea388e73cf42fb673960f7862bb497fc2)) * *(beam)* Support module-level mutable variables via process dictionary (#4676) ([535b9af0](https://github.com/fable-compiler/Fable/commit/535b9af06969bcd7bdf118bdfb633ccadd5e4177)) * *(beam)* Namespace module-level mutable state keys by module (#4683) ([1ec28ab1](https://github.com/fable-compiler/Fable/commit/1ec28ab10923623eaf04b90bf8ffbeb54469d454)) * *(js)* Respect StringComparison in String.IndexOf/LastIndexOf (#4681) ([7cb92d52](https://github.com/fable-compiler/Fable/commit/7cb92d522e5dc8dfe51351565504c59a94c2f408)) * *(js/ts)* Implicit DateTime to DateTimeOffset conversion (#4697) ([fcbd9b91](https://github.com/fable-compiler/Fable/commit/fcbd9b91397a41226df4bed25c1bd1f0667efb64)) * *(js/ts)* Int list is not a union type (#4698) ([ecbecbe7](https://github.com/fable-compiler/Fable/commit/ecbecbe756610fd83a621c005e97eda92bbc332a)) * *(js/ts)* Hoist emitJsStatement imports with trailing comments (#4702) ([e820eb72](https://github.com/fable-compiler/Fable/commit/e820eb7239b2ffe0f2cb4bf3e6c040a1c7dca57f)) * *(js/ts)* Uncurry mutable module value alias calls (#4703) ([0de0d218](https://github.com/fable-compiler/Fable/commit/0de0d2187a68db0ac35bd2546dd98eb1c67397e5)) * *(js/ts)* Pass TypeInfo to getRecordFields to handle None fields in anonymous records (#4704) ([c977d78b](https://github.com/fable-compiler/Fable/commit/c977d78b39225a51c7bd051a1fe363ed0ccbe201)) * *(js/ts/python)* Drop allowAccessToPrivateRepresentation arg from reflection calls (#4689) ([ec3cded7](https://github.com/fable-compiler/Fable/commit/ec3cded78cc98dc740ce978d3bb078f2603f4846)) * *(python)* Fix task while loop stack overflow ([fdb0ec37](https://github.com/fable-compiler/Fable/commit/fdb0ec375e4464117470a528e427ee3df174f62a)) * *(ts)* Use declared type-param names in object expression generic methods (#4685) ([1c3e7d99](https://github.com/fable-compiler/Fable/commit/1c3e7d99653c7119c615b6dfd095a45e36add5b3)) * *(ts)* Use signature type-param names when implementing generic interface methods (#4686) ([03e5deee](https://github.com/fable-compiler/Fable/commit/03e5deeedaa35be2974f40e439e520526cf4c1ba)) * *(ts)* Bound enum-constrained type parameters with `extends number` (#4687) ([15daf624](https://github.com/fable-compiler/Fable/commit/15daf6245212ddb8b7ac6296631381711e34c98d)) * *(ts)* Widen isEnumDefined value parameter to accept any value (#4690) ([0d6498dd](https://github.com/fable-compiler/Fable/commit/0d6498ddf65e0e18918690633da23b04b78479f6)) * *(ts)* Keep enclosing type parameters in scope for nested members (#4691) ([f5723a2d](https://github.com/fable-compiler/Fable/commit/f5723a2d008408e1bca140256a452ac556c69c00)) * *(ts)* Re-declare class type params on generic static attached members (#4696) ([2da50780](https://github.com/fable-compiler/Fable/commit/2da50780b8254cfad05f3a645780f60999cae4ee)) * *(ts)* Filter class type params from attached let-binding methods (#4700) ([d3a6a1dd](https://github.com/fable-compiler/Fable/commit/d3a6a1dd09066b25d876e28446d70fea58162abd)) [View changes on Github](https://github.com/fable-compiler/Fable/compare/c9b3ee2429a4688946c1936e27df730837428070..c977d78b39225a51c7bd051a1fe363ed0ccbe201) ## 5.4.0 - 2026-06-24 ### ๐Ÿš€ Features * *(all)* Support Exception.InnerException across all targets (#4677) ([c9b3ee24](https://github.com/fable-compiler/Fable/commit/c9b3ee2429a4688946c1936e27df730837428070)) ### ๐Ÿž Bug Fixes * *(beam)* Make immutable class instances process-portable (#4670) ([182eebef](https://github.com/fable-compiler/Fable/commit/182eebefacb58b7c72270c8d651936f87c3cbbcc)) [View changes on Github](https://github.com/fable-compiler/Fable/compare/477b8c693d948f74d8d2d5c38ac4d8e1f9287a51..c9b3ee2429a4688946c1936e27df730837428070) ## 5.3.0 - 2026-06-16 ### ๐Ÿš€ Features * *(beam)* Add !^ erased-cast operator to BeamInterop (#4659) ([206776b](https://github.com/fable-compiler/Fable/commit/206776bfcc7068f9953bf6e70aafcc24c4082248)) ### ๐Ÿž Bug Fixes * Add type specifiers to interpolated strings (#4646) ([512ae4d](https://github.com/fable-compiler/Fable/commit/512ae4d1901d6ed3c4c10bb5b4f99e73c49a2056)) * *(all)* Align `invalidArg` error message with .NET format (#4662) ([e672eb7](https://github.com/fable-compiler/Fable/commit/e672eb7ff6c38e15bada7520142024456b0dbb61)) * *(beam)* Preserve element type through Option.Value for interface dispatch (#4661) ([e5521b6](https://github.com/fable-compiler/Fable/commit/e5521b63f70ea25c3b42447ef4327f95245002da)) * *(python)* Emit wildcard default for union or-patterns (#4649) (#4653) ([c96f0ec](https://github.com/fable-compiler/Fable/commit/c96f0ecfe40d6be0fe8d95766ba279c3be4f6f7b)) [View changes on Github](https://github.com/fable-compiler/Fable/compare/15eb83ed36657f75073fb0e1b4cac677e24fc9bb..477b8c693d948f74d8d2d5c38ac4d8e1f9287a51) ## 5.2.0 - 2026-06-10 ### ๐Ÿš€ Features * *(beam)* Support Erlang/BEAM target in standalone compiler (#4644) ([30310e4](https://github.com/fable-compiler/Fable/commit/30310e4f915443524cf5f2c1b326840ee556c7ae)) ### ๐Ÿž Bug Fixes * *(beam)* Collapse array-literal process-dict ref round-trips in FFI/Emit calls (#4626) ([234ee08](https://github.com/fable-compiler/Fable/commit/234ee0846cf848dbad18d409c341755ad8d11da7)) * *(beam)* Make Emit $N substitution a single left-to-right pass (#4631) ([48af8db](https://github.com/fable-compiler/Fable/commit/48af8dba6a92d91115505c62f6a51c6aaa88ac19)) * *(js/ts)* Throw an error when trying to set non-property memeber inside of `jsOptions` (#4624) ([2d9673f](https://github.com/fable-compiler/Fable/commit/2d9673fb609f6ae3273576c913929e0f601d8f5d)) * *(js/ts)* Reject JS-permissive date strings that .NET TryParse rejects (#4588) ([09003de](https://github.com/fable-compiler/Fable/commit/09003de8bc72e4f73281828d905d49aab7db3f55)) * *(js/ts)* Make Exception.ToString() return the message instead of "Exception" (#4635) ([4c36f76](https://github.com/fable-compiler/Fable/commit/4c36f761bd378da800e30657c58355bd5324a653)) * *(python)* Avoid union case field name collision with Union.name (#4647) ([ff5df24](https://github.com/fable-compiler/Fable/commit/ff5df24191a1b3aef5c86efa25f87fa69b3462d9)) * *(python)* Make [] union static members work (#4634) (#4636) ([15eb83e](https://github.com/fable-compiler/Fable/commit/15eb83ed36657f75073fb0e1b4cac677e24fc9bb)) [View changes on Github](https://github.com/fable-compiler/Fable/compare/63bcd3d90f37cb3934edcc59b5f54f49ffab3896..15eb83ed36657f75073fb0e1b4cac677e24fc9bb) ## 5.1.0 - 2026-05-28 ### ๐Ÿš€ Features * *(js/ts/python)* Add missing standard DateTime format specifiers for JS/TS and Python (#4547) ([90f5eb7](https://github.com/fable-compiler/Fable/commit/90f5eb7f61710bc679f6fdec30ff5d864984ac08)) * *(js/ts/python)* Add missing StringBuilder.Append overloads for numeric types (#4568) ([b402c30](https://github.com/fable-compiler/Fable/commit/b402c30d04bfca8644314ba4b21894abfff6a713)) ### ๐Ÿž Bug Fixes * Check MSBuild exit code instead of stderr for project cracker failure detection (#4564) ([914a616](https://github.com/fable-compiler/Fable/commit/914a61665f0a264bf04da6c7bce6fb3cc87eab4c)) * [JS/TS] Fix DatetimeOffset.ToString("s") (#4596) ([3ce6f3f](https://github.com/fable-compiler/Fable/commit/3ce6f3fd88cc7f67e34e2bbc311e722c55ffbf45)) * [Rust] Update hashing and datetime tests (#4613) ([9d39037](https://github.com/fable-compiler/Fable/commit/9d390376fd2c81f76fde70c522b59f61a9c9175d)) * *(all)* Duplicate LetRec bindings during inline expansion (#4592) ([62612a5](https://github.com/fable-compiler/Fable/commit/62612a5bb42644934b7573b7cf8f9db930c5dc37)) * *(all)* Forward --pathmap: option to FCS so CallerFilePath respects (PathMap) (#4585) ([764c383](https://github.com/fable-compiler/Fable/commit/764c3838bc7057e119435ddeb12febc5c171d838)) * *(all)* Fix super call in multi-level generic class hierarchy using wrong mangled name (#4414) ([db1d4d2](https://github.com/fable-compiler/Fable/commit/db1d4d2e8cdbb9d5a16856c91192c1f0fab3f783)) * *(beam)* Handle string binaries in Seq enumerator (#4591) ([6e78058](https://github.com/fable-compiler/Fable/commit/6e780589b5dba114ffe2238c973f26e329e048aa)) * *(js/ts)* Fix JSX props with long string values causing compile error (fixes #3839) (#4545) ([d828a46](https://github.com/fable-compiler/Fable/commit/d828a461797e3f33bf4ab99b46030d16b29771e6)) * *(js/ts)* Fix datetime custom format off by one year (#4558) ([83bdbb5](https://github.com/fable-compiler/Fable/commit/83bdbb5b34e70eae203831a3a442d477d15911e1)) * *(js/ts)* Hex format specifier uses no padding unless precision is specified (#4603) ([ba9857a](https://github.com/fable-compiler/Fable/commit/ba9857a4dcbf7ab1f936241f6619fda43e039040)) * *(js/ts)* Fix Decimal.GetBits returning incorrect mantissa after round arithmetic result (#4561) ([345bcd4](https://github.com/fable-compiler/Fable/commit/345bcd4b99417b304c71059966126fad74cf3a97)) * *(js/ts)* Fix G/g format specifier corrupting exponential notation when trimming trailing zeros (#4587) ([773c098](https://github.com/fable-compiler/Fable/commit/773c098a8f7ac7e8db1d4e490dec1294a80321ee)) * *(js/ts)* Add support for `match` clauses in `JSX.create` (#4620) ([616edca](https://github.com/fable-compiler/Fable/commit/616edca568890549ff81cfa18ab32ca0b807c8eb)) * *(js/ts)* Don't spread last arg in String.Concat call (#4621) ([3de580e](https://github.com/fable-compiler/Fable/commit/3de580e4447ed0090a79648caa8f1e5003bac91d)) * *(js/ts)* Inline AttachMembers members at call sites (#4622) ([63bcd3d](https://github.com/fable-compiler/Fable/commit/63bcd3d90f37cb3934edcc59b5f54f49ffab3896)) * *(js/ts/python)* Fix FSharpOption not recognized as union type in F# reflection (#4529) ([d78a37d](https://github.com/fable-compiler/Fable/commit/d78a37db9f4c25eb51fac8afcd320b4ea36c60a7)) * *(python)* Fix regex lookbehind patterns being incorrectly converted (#4560) ([4ce5cd7](https://github.com/fable-compiler/Fable/commit/4ce5cd7b14a533aa3a08fe14c108ec30d662623f)) * *(python)* Avoid duplicate captured argument in hoisted guards (#4610) (#4611) ([90aec48](https://github.com/fable-compiler/Fable/commit/90aec483296d26549aedf9eaf46f0825d70a4022)) * *(ts)* Enforce browser-only compatibility in fable-library-ts tsconfig (#4563) ([10c81c1](https://github.com/fable-compiler/Fable/commit/10c81c1361208eb61f5fa78c6704e6fccc068fb1)) [View changes on Github](https://github.com/fable-compiler/Fable/compare/b471dc16fc3b5132af77b5974d1669c9b8220cca..63bcd3d90f37cb3934edcc59b5f54f49ffab3896) ## 5.0.0 - 2026-04-21 ### Fixed * [Python] Fix derived classes of generic abstract classes not being instantiable due to mismatched mangled method names between abstract stubs and overrides (by @dbrattli) * [Dart/Rust] Fix `ResizeArray` reference equality (by @ncave) * [JS/TS/Python/Beam] Fix `ResizeArray` (`System.Collections.Generic.List`) equality to use reference equality instead of structural equality (fixes #3718) * [Beam] Fix `List.Cons` call replacement and test (by @ncave) * [Beam/Dart/Python/TypeScript] Fix `Array.Equals` to use reference equality instead of structural equality (by @ncave) * [Dart/Python/TypeScript/Rust] Fix `Seq.foldBack2` for sequences with different lengths (by @ncave) * [All] Fix missing `HashSet` implementations and tests (by @ncave) * [Rust] Fix `Array/HashMap/HashSet` internal representation (by @ncave) * [Rust] Fix F# classes reference equality semantics (by @ncave) * [Python] Fix missing `Array` module implementations and tests (by @ncave) * [Python] Fix object expressions implementing interfaces with `[]` members no longer produce unimplementable abstract Protocol members (fixes #3039) * [Python] Fix `DateTime.TryParse` incorrectly assigning `DateTimeKind.Local` to naive datetime strings (should be `DateTimeKind.Unspecified`) (fixes #3654) * [JS/TS] Fix `String.Contains` ignoring `StringComparison` argument (second argument was silently discarded) * [Python] Fix `String.Contains` ignoring `StringComparison` argument (second argument was silently discarded) * [All] Fix `--noRestore` not skipping MSBuildCracker restores (by @ randrag) ## 5.0.0-rc.13 - 2026-04-07 ### Added * [Python/Beam] Add F# quotation support โ€” construction, pattern matching, and evaluation via `LeafExpressionConverter.EvaluateQuotation` (by @dbrattli) * [JS/TS] Add F# quotation support โ€” construction, pattern matching, and evaluation (by @OnurGumus) * [All] Add support for `Guid.CreateVersion7()` and `Guid.CreateVersion7(DateTimeOffset)` (by @OnurGumus) * [All] Add missing `Array`, `List`, and `Seq` random choice/shuffle/sample members and tests (by @ncave) * [Dart/Rust] Add missing `System.Random` implementations and tests (by @ncave) * [Beam] Implement missing DateTimeOffset members, add DateOnly and TimeOnly support (by @dbrattli) ### Fixed * [Python] Remove `python-dateutil` dependency from fable-library; use stdlib `datetime.fromisoformat` with `strptime` fallback * [All] Fix unnecessary object allocations during AST traversal when visiting `Import` expressions (by Repo Assist) * [Beam] Fix `System.Random.Next(0)` implementation (by @ncave) * [Python] Fix `System.Random` seeded implementation (by @ncave) * [Beam] Fix `System.Random` seeded implementation to use per-instance state (by @dbrattli) * [Dart] Fix `Array.compareWith` comparing lengths before elements, producing wrong results for arrays with common prefixes (fixes #2961) * [Python] Fix unsafe option unwrapping in `DateTimeOffset.get_Offset` and regex replacements (by @dbrattli) * [All] Replace unsafe option `.Value` unwrapping with safe alternatives in Python/Replacements.fs and Rust/Fable2Rust.fs (code scanning alerts IONIDE-006) * [All] Add `[]` to partial active patterns in Dart and Rust targets to reduce allocations (code scanning alerts IONIDE-009) * [JS/TS] Fix `Guid` to use cryptographically strong random values (by @ncave) * [Python] Fix `DateTimeOffset` millisecond constructor and property (by @ncave) * [Python] Implement missing `DateTimeOffset` members and fix equality/comparison to use UTC-normalized instants (by @dbrattli) * [Python] Add `DateOnly` and `TimeOnly` support (by @dbrattli) * [Python] Fix `String.IndexOf`/`LastIndexOf` with `StringComparison` argument emitting it as a start-index instead of a compile error (by @repo-assist) * [Beam] Fix `String.IndexOf`/`LastIndexOf` with `StringComparison` argument incorrectly treating the enum value as a start index * [JS/TS/Python] Fix `Async.StartChild` with timeout always timing out even when the computation finishes before the deadline (fixes #4481) (by @MangelMaxime) ## 5.0.0-rc.12 - 2026-03-31 ### Fixed * [Dart] Enable explicit variable typing for more data types (by @ncave) * [Dart] Fix tests for `round`, `sign`, `truncate`, `log`, `log2`, `log10`, `pow`, `DivRem`, `Min`, `Max`, `Clamp`, `MinMagnitude`, `MaxMagnitude`, `cosh`, `sinh`, `tanh`, and float `Parse` (by @ncave) * [Python] Add `Math.DivRem` support for int, int64, and bigint (by @dbrattli) * [Python] Fix modulo with negative numbers using Python floored semantics instead of .NET truncated semantics for bigint (fixes #4462) (by @dbrattli) * [Beam] Fix `System.String.Concat` with 4+ arguments not being supported (by @dbrattli) * [TS/Python] Fix thisArg type for overloads in structs (#4453) (by @ncave) * [TS/Python] Fix invalid `this` argument type in structs (#4453) (by @ncave) * [JS/TS] Fix `N` format specifier (`ToString("N0")`, `String.Format("{0:N0}", ...)`) producing a trailing dot when precision is 0 (fix #2582) (by @MangelMaxime) * [JS/TS] Fix `C0` and `P0` format specifiers producing trailing dot (e.g., `"ยค1,000."` โ†’ `"ยค1,000"`) (by @MangelMaxime) * [All] Fix captured side-effect-free values (e.g. empty ResizeArray) being incorrectly inlined into object expression getters in release mode, causing a new instance to be created on each getter call (fixes #3779) (by @MangelMaxime) * [Python] Fix missing `await` on else branch of ternary expressions in async closures (by @dbrattli) * [Beam] Fix `|> ignore` on cross-module Emit calls generating variable bindings that shadow Emit case-clause variables (by @dbrattli) * [Beam] Fix `containsIdentRef` not checking `Call` ThisArg (by @dbrattli) * [JS/TS] `StringEnum` now respect `CompiledValue` and `CompiledName` (by @shayanhabibi) * [JS/TS] Fix invalid syntax emitted when negating negative literals (fix #4251) (by @MangelMaxime) * [Rust] Fix negative counting in CallInfo.GenericArgs (by @ncave) * [Rust] Fix inline bindings and captured idents tracking (by @ncave) * [Rust] Fix `return!` in async computation expressions so inner async workflows are returned and awaited correctly (by @mizzle-mo) * [JS/TS] Improve `Regex.Escape` and `Regex.Unescape` handling (by @MangelMaxime) * [All] Fix allow plugins to target .NET6 target framework (by @MangelMaxime) * [Python] Fix function references passed as arguments inside tail-call optimised functions gaining unnecessary default parameters for outer TCO variables they don't reference (fix #3877) * [TS] Fix abstract instance methods not emitted in TypeScript when class uses `[]` (fixes #3506) (by @MangelMaxime) * [JS/TS] Fix `Unchecked.defaultof<'T>` for struct types with fields returning `undefined` instead of zero-initialized values (by @MangelMaxime) * [JS/TS] Fixed quotation for union string cases (by @MangelMaxime) * [Python] Fix `Unchecked.defaultof<'T>` for struct types with fields returning incorrect values instead of zero-initialized instances (by @MangelMaxime) * [Python] Fix `Unchecked.defaultof` returning `""` (empty string) instead of `"\u0000"` (null character) (by @MangelMaxime) * [Python] Improve `Unchecked.defaultof<_>` for declared entities (by @MangelMaxime) ## 5.0.0-rc.11 - 2026-03-20 ### Added [All] Add support for `[]` (by @MangelMaxime) ## 5.0.0-rc.10 - 2026-03-19 ### Fixed * [JS/TS] Fix `Array.zeroCreate` producing `null` for user-defined struct (value type) elements instead of a default-initialized instance (by @MangelMaxime) * [All] Fix interpolated string holes missing format specifiers in State.fs and Python/Replacements.fs (code scanning alerts 1144, 1145, 1512) * [Rust] Replace unsafe `.IsSome && .Value` option pattern with `Option.exists` in Fable2Rust.fs (code scanning alert 1125) * [JS/TS] Fix `Unchecked.defaultof` being emitted as `null` instead of `'\0'` (by @MangelMaxime) * [JS/TS] Fix `static val mutable` fields declared with `[]` not being zero-initialized (fix #2739) (by @MangelMaxime) * [JS/TS/Python] Fix record/struct types augmented with `static let` or `static member val` generating extra constructor parameters for each static field, causing constructor arguments to be assigned to wrong slots (by @MangelMaxime) * [TS] Annotate `System.Collections.Generic.IList` as `MutableArray` (by @MangelMaxime) * [JS/TS] Fix `ResizeArray` index getter/setter not throwing `IndexOutOfRangeException` when index is out of bounds (fix #3812) (by @MangelMaxime) * [Beam] Fix unused term warning in try/catch when exception variable is not referenced (by @dbrattli) * [Beam] Fix "no effect" warning for pure BIF calls (`self/0`, `node/0`) in non-final block positions (by @dbrattli) * [Beam] Fix `reraise()` generating unbound `MatchValue` variable โ€” use raw Erlang reason variable for re-throw (by @dbrattli) * [Beam] Fix `Erlang.receive<'T>()` resolving to timeout overload due to F# unit argument (by @dbrattli) * [JS/TS] Generate comments for members in class decorated with `[]` (by @MangelMaxime) * [Beam] Fix `[]` generating invalid `module:*()` Erlang code when binding is used as a value (by @dbrattli) * [Beam] Fix string slicing and `Substring` with compound expressions producing wrong `binary:part` length due to missing parentheses in emitted Erlang (by @dbrattli) * [Beam] Fix non-ASCII characters in string literals being truncated to single bytes โ€” emit `<<"..."/utf8>>` instead of `<<"...">>` (by @dbrattli) * [Beam] Fix `Emit` expressions with `case` leaking variables into surrounding scope โ€” auto-wrap in IIFE for scope isolation (by @dbrattli) ## 5.0.0-rc.10 - 2026-03-10 ### Added * [Beam] Support `[]` + `[]` interface pattern for typed FFI bindings (by @dbrattli) ### Fixed * [Beam] Fix dropped top-level side effects โ€” multiple `ActionDeclaration` `main/0` functions are now merged (by @dbrattli) * [Beam] Fix `%%` escape in string interpolation producing double `%` instead of single (by @dbrattli) * [Beam] Fix double-quoted atoms for uppercase `CompiledName` on DU cases (e.g. `''EXIT''` โ†’ `'EXIT'`) (by @dbrattli) * [Beam] Fix cross-project imports producing self-recursive calls when source files share the same name (by @dbrattli) * [Beam] Support `Type.GetGenericArguments` and `Type.GetInterface` for reflection (by @dbrattli) * [TS] Correctly resolve type references for `TypeScriptTaggedUnion` (by @MangelMaxime and @jrwone0) * [Python] Fix `nonlocal`/`global` declarations generated inside `match/case` bodies causing `SyntaxError` (by @dbrattli) * [Python] Fix exception variable captured in deferred closures causing `NameError` (PEP 3110 scoping) (by @dbrattli) * [JS/TS] Support format specifiers and single hole in JSX string templates (by @MangelMaxime) * [All] Fix generic parameter resolution in inline functions with static member constraints (by @Programmerino and @MangelMaxime) ## 5.0.0-rc.2 - 2026-03-03 ### Added * [Beam] Add arithmetic tests and support for DivRem, MinMagnitude, MaxMagnitude, Decimal rounding, BigInt.Log (by @dbrattli) * [Beam] Add `fable_random.erl` and fix Random seeded/NextBytes tests (by @dbrattli) ### Fixed * [Python] Fix `__hash__` to return native `int` instead of `int32` for Python 3.14 compatibility (by @dbrattli) * [Beam] Fix optional arguments by unwrapping at call sites and padding missing trailing args (by @dbrattli) * [Beam] Fix generic constraint interface dispatch (by @dbrattli) * [Beam] Fix class constructor field invokes and explicit val fields (by @dbrattli) * [Beam] Fix mutable record field mutation (by @dbrattli) ## 5.0.0-rc.1 - 2026-02-26 ### Added * [Beam] Add Erlang/BEAM compilation support: Fable2Beam transform, Beam Replacements, ErlangPrinter, and 31 runtime `.erl` modules. 2086 tests passing. (by @dbrattli) ### Fixed * [Beam] Fix object expression self-references, constructor `as self` patterns, and property get/set key collisions in object expressions (by @dbrattli) * [Python] Fix type var scoping for PEP 695 annotations: emit `Any` for type vars outside function scope and prevent non-repeated generic params from leaking into `ScopedTypeParams` (by @dbrattli) * [JS/TS] Ignore extra args in FSharpType functions (by @olivercoad) ## 5.0.0-alpha.23 - 2026-02-13 ### Fixed * [Python] Fix HashSet operations (Count, Contains, Remove, UnionWith, IntersectWith, ExceptWith) to work with both native Python sets and custom MutableSet (by @dbrattli) * [Python] Fix `Array.length`, `.Length`, `Array.isEmpty`, and `ResizeArray.Count` to use `len()` instead of `.length` property for plain Python list interop (by @dbrattli) * [Python] Fix `Task` pass-through returns not being awaited in if/else and try/with branches (by @dbrattli) * [Python] Fix `:? T as x` type test pattern in closures causing `UnboundLocalError` due to `cast()` shadowing outer variable (by @dbrattli) ## 5.0.0-alpha.22 - 2026-02-03 ### Changed * [Python] Changed DU representation to use separate classes for each case (by @dbrattli) * [Python] Fable will no longer auto-generate `__str__` or `__hash__` for custom types. Use the `Py.Stringable` and `Py.Hashable` marker interfaces to generate these methods (by @dbrattli) ### Added * [Python] Added ABC base classes for F# types and Py marker interfaces for Python interop (by @dbrattli) * [Python] Add tuple pattern matching with guards and improve match statement generation (by @dbrattli) * [Python] Add Python 3.10+ match statement support for pattern matching (by @dbrattli) ### Fixed * [Python] Fix curry/uncurry to handle arbitrary number of arguments (by @dbrattli) * [Python] Fix type annotations for protocols, Option casting, and abstract classes (by @dbrattli) * [Python] Fix type annotations for curried functions and numeric types (by @dbrattli) * [Python] Fix type annotations for inref, IList, DateKind, and regex collections (by @dbrattli) * [Python] Fix type annotations for protocols, ABCs, Atom, and Set module (by @dbrattli) * [Python] Fix type annotations for async functions, date operations, and None handling (by @dbrattli) * [Python] Fix type annotations for tuple indexing, generic defaults, and reflection (by @dbrattli) * [All] Fix `StringBuilder.Chars` getter and setter (by @MangelMaxime) ## 5.0.0-alpha.21 - 2025-12-26 ### Fixed * [Python] Use Fable AST for type parameter extraction instead of Python AST heuristics (by @dbrattli) * [Python] Fix library type stubs for parse_int32/64 and from_integer (by @dbrattli) * [Python] Fix missing type parameters on generic methods (by @dbrattli) * [JS/TS] Fix #4305 DateTimeOffset.Now returns wrong time (by @ncave) ## 5.0.0-alpha.20 - 2025-12-15 ### Added * [Python] Support catching Python `BaseException` subclasses (`KeyboardInterrupt`, `SystemExit`, `GeneratorExit`) for Python interop (by @dbrattli) ### Changed * [Python] F# `task { }` expressions now generate Python `async def` functions (by @dbrattli) * [Python] Generate idiomatic `except` clauses for typed exception patterns (by @dbrattli) ### Fixed * [Python] Fix `ResizeArray` compatibility with `Seq`/`Array` functions (by @dbrattli) * [Python] Fix `FSharpList` generic type parameter handling for `IEnumerable_1` compatibility (by @dbrattli) ## 5.0.0-alpha.19 - 2025-12-08 ### Added * [Python] Add `Array.skipWhile` support (by @dbrattli) * [Python] Add `Array.takeWhile` support (by @dbrattli) * [Python] Allow `IEnumerator_1` as base class to fix typing issues (by @dbrattli) * [Python] Add Pythonic import path syntax for relative imports (`.module`, `..parent`, `...grandparent`) (by @dbrattli) * [Python] Add `[]` attribute for creating custom decorator attributes (by @dbrattli) * [Python] Add `[]` attribute for creating custom class attribute shortcuts (by @dbrattli) * [Python] Add `[]` as a built-in shorthand for `[]` (by @dbrattli) ### Fixed * [Python] Fix String.Concat spread operator issue in Python transpilation (by @dbrattli) * [Python] Fix regression `[]` on class types not preventing them from being emitted to Python (by @dbrattli) * [Python] Fix regression `%A` format specifier to output booleans as lowercase `true`/`false` (by @dbrattli) * [Python] Fix various bugs in fable-library numeric types and string operations (by @dbrattli) ### Changed * [Python] `[]` now emits decorator strings verbatim and adds `importFrom` parameter for explicit import control (by @dbrattli) ## 5.0.0-alpha.18 - 2025-12-04 ### Fixed * [Python] Fix `printf.cont()` not applying continuation function when currying (by @dbrattli) ### Added * [Python] Add support for `[]` attribute on methods (previously only worked on classes) (by @dbrattli) * [Python] Add new `[]` attribute to emit @classmethod instead of @staticmethod (by @dbrattli) * [Python] Added support for Pydantic serialization of core numeric and array types (by @dbrattli) ## 5.0.0-alpha.17 - 2025-12-03 ### Fixed * [Python] Fix regression, record member method naming (by @dbrattli) * [Python] Fix regression, named arguments not being converted to snake_case (by @dbrattli) * [Python] Fix regression, erased interfaces should not generate code (#4277) (by @dbrattli) ### Changed * [Rust] Update `fable-library-rust` dependencies (by @ncave) * [All] Update TargetFramework to net10.0 (by @ncave) * [All] Update FCS to latest (commit [cfda5f6](https://github.com/dotnet/fsharp/commits/cfda5f68f781f1b336b7d6c1689d69f2c34da751/)) (by @ncave) ## 5.0.0-alpha.16 - 2025-11-27 ### Fixed * [All] Fix quoted paths resolution by `Util.getExactFullPath` (by @MangelMaxime) ### Changed * [All] Invoke MSBuild from Fable current working directory (by @cr3wdayt5p) * [Python] fable-library for Python is now distributed via PyPI instead of being bundled in the NuGet package (by @dbrattli) ## 5.0.0-alpha.15 - 2025-11-19 ### Added * [TS] Added support for `erasableSyntaxOnly` in TypeScript (by @ncave) * [All] Added some default `System` exception implementations (by @ncave) * [All] Added `ofOption`/`toOption`/`ofValueOption`/`toValueOption` (by @ncave) * [Python] Added `Decorate` attribute to add Python decorators to classes (by @dbrattli) * [Python] Added `ClassAttributes` attribute to control Python class generation (@dbrattli) * [Python] Added support for Python 3.14 (by @dbrattli) ### Changed * [JS/TS] Replace the deprecated `substr` method with `slice` (by @Thorium) ### Fixed * [TS] Fix ObjectExpr tests with multiple interfaces (by @ncave) * [TS] Fix ObjectExpr abstract base constructor type (by @ncave) * [JS/TS] Fix #4240 Missing DateTime constructor (by @ncave) * [PHP] Fix php import extensions (by @MangelMaxime) * [TS] Fix #3973 Typescript imports file extension (by @ncave) * [TS] Fix support for abstract classes and members (by @ncave) * [TS] Fix getters, setters, indexers in interfaces (by @ncave) * [TS] Enable typedArrays flag usage for TypeScript (by @ncave) * [All] Fix #4221 Fable.Type union case arg names (by @ncave) * [All] Erase Nullable Reference Types to inner type (by @ncave) * [Python] Improve Python (e.g. Pydantic) interop (by @dbrattli) * [JS/TS] Fix comparers for non-nullable types (by @ncave) * [Rust] Fix curried object expression getters (by @ncave) * [Rust] Fix compiler-generated generic args (by @ncave) * [All] Fixed #4041 missing unit argument (by @ncave) * [JS/TS/Python] Fixed eq comparer mangling (by @ncave) * [All] Fix all `BitConverter` return types (by @ncave) * [TS] Don't cast union case types to `any` (by @ncave) * [JS/TS] Fix Dictionary.ICollection.Remove (by @ncave) * [TS/Dart] Fixed optional parameter types (by @ncave) * [TS] Initialize un-initialized variables (by @ncave) * [JS/TS] Replace `Error` with `Exception` (by @ncave) * [All] Fix MSBuildResolver to include define when restoring the project (by @MangelMaxime) ## 5.0.0-alpha.14 - 2025-07-25 ### Added * [Python] Support for Nullable Reference Types (by @dbrattli) * [JS/TS] Fix #3533: Add directives prologues supports (by @MangelMaxime) * [JS/TS] Support for Nullable Reference Types (by @ncave and @MangelMaxime) * [Rust] Initial support for Nullable Reference Types (by @ncave) ### Changed * [Python] Use Python 3.12 type parameter syntax. Deprecate Python 3.10 and 3.11 (by @dbrattli) * [Python] Records now snake-cases all member fields (by @dbrattli) * [Python] Anonymous records now preserves the casing of member fields (by @dbrattli) * [Python] Option type is now `Option[T]` instead of `T | None` (by @dbrattli) * [Python] Use [uv](https://docs.astral.sh/uv/) instead of Poetry for package management (by @dbrattli) * [Python] Fable Library for Python is now partially written in Rust (by @dbrattli) * [All] Improve filewatcher error messages (by @goswinr) ### Fixed * [Python] Fixed static properties and are now translated as Python class attributes (by @dbrattli) * [Python] Fixed DateTime with DateTimeKind generates proper enum reference (#3689) (by @dbrattli) * [Python] Fixed Dictionary KeyValuePair enumeration when casting to IEnumerable (#3771) (by @dbrattli) * [Python] Fixed `createEmpty` for interfaces using `SimpleNamespace` with type casting (#3604) (by @dbrattli) * [Python] Fixed EmitMethod + ParamObject losing keyword arguments (#3871) (by @dbrattli) * [Python] Fixed EmitConstructor + ParamObject losing keyword arguments (#3871) (by @dbrattli) * [Python] Fixed DateTimeOffset.TryParse, ToString() and Offset property access (#3854) (by @dbrattli) * [Python] Fixed anonymous records in Maps causing comparison errors (#3869) (by @dbrattli) * [Python] Fixed handling of erased types for Python (#3968) (by @dbrattli) * [Python] Fixed unit function (zero arguments functions) are transpiled inconsistently (#4126) (by @dbrattli) * [Python] Fixed resource managers with empty body (#3912) (by @dbrattli) * [Python] Fixed `Async.Sleep`to handle TimeSpan correctly (#4137) (by @dbrattli) * [Python] Make sure snake-cased Record do not conflict (by @dbrattli) * [Python] Do not return None | None for optional unit types (#4127) (by @dbrattli) * [JS/TS] JSX : Alias `empty` CEs list to `null` when encountered in the `children` list (by @MangelMaxime) * [JS/TS] JSX : Allow usage of `unbox` when definining properties for `JSX.create` (by @MangelMaxime) ## 5.0.0-alpha.13 - 2025-05-04 ### Fixed * [Python] Fixed testing with interfaces leads to incorrect pattern match (#3972) (by @dbrattli) * [Python] Fixed error when type contains multiple generic type parameters (#3986) (by @dbrattli) * [Python] Fixed import path handling for libraries (#4088) (by @dbrattli) * [Python] Reenable type aliasing for imports with name "*" (by @freymauer) * [JS/TS] Optimise JSX output in order to avoid F# list CEs to surface in it (by @MangelMaxime) ### Removed * [All] Remove unused `Fable.Core` copy types from internal module (by @MangelMaxime) ## 5.0.0-alpha.12 - 2025-03-14 ### Added * [Python] Add support for `nullArgCheck`(by @MangelMaxime) * [All] Add support for F# `nullness` (by @MangelMaxime) * [JS/TS] Add support for `Unchecked.nonNull` (by @MangelMaxime) * [All] Add support for `TreatWarningsAsErrors` (by @MangelMaxime) * [JS] Don't generate an import statement for pojos defined in another file (by @shayanhabibi) ### Fixed * [JS/TS] Make `nullArgCheck` report the same error message as on .NET (by @MangelMaxime) * [TS] Sanitize DUs case names when generating constructor function (by @MangelMaxime) ## 5.0.0-alpha.11 - 2025-03-03 ### Added * [JS/TS] Add support for `CaseRules.LowerAll` on `StringEnums` (by @shayanhabibi) * [Rust] Support Rust 2024 language edition (by @ncave) * [JS/TS] Add `C` and `c` format for numeric types (by @MangelMaxime) * [JS/TS] Add `B` and `b` format for numeric types (by @MangelMaxime) * [JS/TS] Add `n` format for numeric types (by @MangelMaxime) * [JS/TS] Generate compiler error when detecting an invalid/unsupported format specifier for numeric types (by @MangelMaxime) ### Fixed * [JS/TS] Fix #4025: No reflection info for pojos (by @alfonsogarciacaro) * [JS/TS] Fix #4049: decimal/bigint to integer conversion checks (by @ncave) * [JS/TS] Fix `decimal` to `char` conversion checks (by @ManngelMaxime) * [JS/TS] Propagate non-captured exception when running `Async.Start` or `Async.StartImmediate` (by @MangelMaxime) * [JS/TS] Report an error at compilation time when trying to use `Async.RunSynchronously` (by @MangelMaxime) * [JS/TS] Fix short `DateTime` and `DateTimeOffset` short format strings (by @MangelMaxime) * [All] Don't scan system packages for plugins (by @MangelMaxime) * [JS/TS] Fix date formatting when repeating a format token more than the known format (example repeating 'd' more than 4 times) (by @MangelMaxime) * [Python] Fix date formatting when repeating a format token more than the known format (example repeating 'd' more than 4 times) (by @MangelMaxime) * [JS/TS] Fix #4010: Supports direct nested types when using `jsOptions` (by @MangelMaxime) ```fs let opts = jsOptions (fun o -> o.level2.level3.valueA <- 10 o.level2.level3.valueB <- 20 o.topValueA <- 20 ) ``` * [JS/TS] Fix numeric formats (by @MangelMaxime) ### Changed * [JS/TS] Throw an error is an invalid Numeric format is provided (mimic .NET behavior) (by @MangelMaxime) ## 5.0.0-alpha.10 - 2025-02-16 ### Added * [Python] - Print root module and module function comments (by @alfonsogarciacaro) * [Rust] Add support for module comments (by @ncave) * [Rust] Add support for null strings (by @ncave) * [TS/JS] `Pojo` attribute support (by @alfonsogarciacaro) ### Fixed * [JS/TS] - Fix anonymous record printing (#4029) (by @alfonsogarciacaro) * [Python] - Fix #3998: PhysicalEquality (by @alfonsogarciacaro) * [Python] Resolve relative paths for non-qualified imports (#3481) (by @alfonsogarciacaro) * [Python] `importSideEffects` shouldn't generate identifier (#3965) (by @alfonsogarciacaro) * [JS/TS] Fix #4031: Hoist vars locally in for and while loops (@alfonsogarciacaro) ### Changed * [JS/TS] In `JSX`, generate self closing element when element has no children (#4037) (by @shayanhabibi) ## 5.0.0-alpha.9 - 2025-01-28 ### Fixed * [All] Add `--realsig+` to fix `Method not found: 'Boolean Fable.CompilerOptions.Equals` (by @nojaf) ## 5.0.0-alpha.8 - 2025-01-27 ### Added * [TS] Include XML Doc comment on interface properties (by @Freymaurer) * [TS] Generate `interface` type when using the "ParamObject" class pattern (by @MangelMaxime) * [Rust] - Initial support for null values (by @ncave) ## 5.0.0-alpha.7 - 2025-01-23 ### Fixed * [All] Disable .NET Welcome message when cracking project (#4014) (by @MangelMaxime) ## 5.0.0-alpha.6 - 2025-01-23 ### Added * [All] Add `StringBuiler.Append(c: char, repeatCount: int)` overload (by @roboz0r) * [All] Added primitive types equality and comparison (by @ncave) * [All] Updated FCS to latest F# 9.0 (by @ncave) * [All] Updated Fable-FCS to latest F# 9.0 (by @ncave) * [All] Updated metadata to latest .NET 9.0 (by @ncave) * [All] Updated FCS type constraints (by @ncave) ### Fixed * [Python] Add missing unicode categories in python library (by @joprice) * [All] Log JSON output if we fail to parse MSBuild result (by @MangelMaxime) ## 5.0.0-alpha.5 - 2025-01-09 ### Added * [JS/TS/Python] Add new `TimeSpan` overloads support coming from .NET 9.0 (by @MangelMaxime) * [Rust] Add new `TimeSpan` overloads support coming from .NET 9.0 (by @ncave) ### Fixed * [JS/TS] Fix `DateTimeOffset.ToLocalTime` (by @MangelMaxime) ## 5.0.0-alpha.4 - 2025-01-03 ### Fixed * [TS] Make discriminated union `.Is*` properties works (@MangelMaxime) * [JS/TS/Python] Fix `h` in `DateTime.ToString` (@MangelMaxime) * [JS/TS] Fix `hh` in `DateTime.ToString` (@MangelMaxime) * [JS/TS] Don't generate the setter code if a property is decorated with `[]` (@MangelMaxime) ## 5.0.0-alpha.3 - 2024-12-18 ### Fixed * [Python] Fix type testing against `uint8`, `uint32`, `uint64`, `decimal` (@MangelMaxime) * [JS/TS] Workaround source map generation bug (deteriorate them a little) (@MangelMaxime) ## 5.0.0-alpha.2 - 2024-11-25 ### Fixed * [All] Allow Fable 5 to be used with Fable 4 plugins (@ncave) ## 5.0.0-alpha.1 - 2024-11-24 ### Added * [All] Add `--legacyCracker` as a fallback (@MangelMaxime) ### Changed * [All] Make MSBuildCracker the default (@MangelMaxime) * [All] Replace `FABLE_COMPILER_4` with `FABLE_COMPILER_5` as the compiler directive (@MangelMaxime) * [All] Move TargetFramework to `net8.0` (@ncave) ## 4.0.0-alpha-016 - 2024-11-19 ### Changed * Fable 4.24.0 ## 4.0.0-alpha-015 - 2024-10-28 ### Changed * Fable 4.23.0 ## 4.0.0-alpha-014 - 2024-10-02 ### Changed * Fable 4.22.0 ## 4.0.0-alpha-013 - 2024-09-19 ### Changed * [All] Don't hide original error when failing to scan an assembly for plugin (#3896) (by @MangelMaxime) ## 4.0.0-alpha-012 - 2024-06-17 ### Fixed * [JS/TS] Fixed unwrapping optional arguments (#3847) (by @ncave) ## 4.0.0-alpha-011 - 2024-06-13 ### Changed * Fable 4.19.1 ## 4.0.0-alpha-010 - 2024-05-24 ### Fixed * [GH-3835](https://github.com/fable-compiler/Fable/pull/3835) [All] Use case insensitive comparison when searching for dependencies between fable packages (by @ThisFunctionalTom) ## 4.0.0-alpha-009 - 2024-05-24 ### Changed * Fable 4.18.0 ## 4.0.0-alpha-008 - 2024-02-27 ### Fixed * [GH-3769](https://github.com/fable-compiler/Fable/pull/3769) The dependent files of the current file should be detected for the signature file if there is one present. (by @nojaf) * [GH-3769](https://github.com/fable-compiler/Fable/pull/3769) Local plugin build does not run indefinably. (by @nojaf) ## 4.0.0-alpha-007 - 2024-02-20 ### Added * [GH-3758](https://github.com/fable-compiler/Fable/pull/3758) Endpoint to get Fable.AST for a file. (by @nojaf) ### Fixed * [GH-3763](https://github.com/fable-compiler/Fable/pull/3763) Redirect plugin build stdout and pass to logger. (by @nojaf) ## 4.0.0-alpha-006 - 2024-02-12 ### Changed * Update to Fable.AST 4.4.0 ## 4.0.0-alpha-005 - 2024-02-12 ### Changed * [GH-3742](https://github.com/fable-compiler/Fable/pull/3742) Return diagnostics in compile response (by @nojaf) * [GH-3746](https://github.com/fable-compiler/Fable/pull/3746) Extract type-checking from compilation (by @nojaf) ## 4.0.0-alpha-004 - 2024-01-30 ### Changed * [GH-3724](https://github.com/fable-compiler/Fable/pull/3724) Internalize `GetFableModulesFromDir` & `GetFableModulesFromProject` (by @nojaf) ## 4.0.0-alpha-003 - 2024-01-30 * [GH-3720](https://github.com/fable-compiler/Fable/pull/3720) Introduce `ProjectCrackerResolver` allowing customizing the project resolution (by @nojaf) ## 4.0.0-alpha-002 - 2024-01-25 ### Changed * Respect file extension from `CliArgs` * Use `Microsoft.Extensions.Logging` * Load Fable plugins ## 4.0.0-alpha-001 - 2023-12-14 * Initial release ## 4.0.0-beta-001 - 2023-12-14 [YANKED] * Initial release