Changelog
July 24, 2026 ยท View on GitHub
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
2.11.0 - 2026-07-24
๐ Bug Fixes
- (all) Eliminate dead bindings left by CE/inline lowering (#4837) (9f694e97)
- (beam) Make reflection metadata agree with record/union codegen (#4849) (ec6a3df0)
- (js/ts) Resolve generic params when reflecting erased union fields (#4851) (619d7afd)
- (js/ts,python) Inline Option/ValueOption combinators to avoid closures and allocations (#4836) (61cac646)
โก Performance Improvements
- (all) Lower constant ยฑ1 step ranges to counted for-loops (#4838) (ab28daec)
2.10.0 - 2026-07-22
๐ Features
- (beam) Render %A in F# syntax instead of dumping Erlang terms (#4814) (218e0c40)
๐ Bug Fixes
- (beam) Correct char-to-string conversion and console Unicode encoding (#4812) (df8e01d6)
- (beam) Isolate each top-level effect's variables in main/0 (#4815) (8d708633)
- (beam) Decode UTF-8 codepoints in ToCharArray and related String functions (b2ce3067)
2.9.0 - 2026-07-17
๐ Features
- (dart) Quotations (#4784) (019a6ade)
๐ Bug Fixes
- (python) Make class declarations and references agree on type names (#4807) (ae4b910b)
2.8.0 - 2026-07-16
๐ Features
-
(beam) Support
Environment.CurrentDirectoryandGetEnvironmentVariable(#4801) (55b9d560) -
(beam) Support setting
Environment.CurrentDirectory(#4783) (7b2a262f) -
(rust) Various codegen and runtime improvements (#4781) (ae10cd2c)
- Cast
boolto integer types; support**via.powf - Add
Decimal.IsInteger/IsEvenInteger/IsOddInteger/IsCanonical - Fix two-switch decision trees dispatching to the wrong target
- Fix reference-typed match bindings panicking via
mem::zeroed - Fix string and non-ident option pattern matches emitting invalid Rust
matcharms - Fix
Convert.ToXxx(bool) - Fix
Char.ToUpper/ToLowertruncating multi-char case mappings - Fix
Random.nextDoublepanic message - Fix
Map.find/tryFindpanicking on reference-typed values
- Cast
๐ Bug Fixes
- (all) Skip translating unreachable branch of constant-condition if/then/else (#4799) (53c06de1)
2.7.0 - 2026-07-15
๐ Features
- (js/ts) Add
System.IO.Directorysupport (Exists, CreateDirectory) (#4798) (6568f35e) - (js/ts/python/beam) Preserve member calls and pattern matches in quotations (#4780) (55482e6b)
๐ Bug Fixes
- (beam) Make Assert.AreEqual/NotEqual raise, and stop emitting reflection calls for erased types (#4775) (d9711d4c)
2.6.2 - 2026-07-13
๐ Bug Fixes
- (beam) Make F# reflection work on the Beam target (#4766) (b15b280d)
- (beam) Give sized integers .NET fixed-width semantics (#4769) (2ed39630)
- (beam) Qualify Erlang module names by their OTP app (#4770) (5516c8d8)
- (beam) Entry point argv and exit code, bigint from float, option reflection (#4772) (ea915541)
2.6.1 - 2026-07-11
๐ Bug Fixes
- (beam) Order discriminated union comparison by declaration order (#4761) (3597a582)
- (beam) Preserve function-value identity for PhysicalEquality (#4762) (727673f3)
- (js/ts) Don't drop unsupported
jsOptionsstatements when inlining as POJO (#4754) (4cbc44fc) - (python) Propagate [
] return value as process exit code (#4763) (a8d9bf5f)
2.6.0 - 2026-07-09
๐ Bug Fixes
- (all) Include original exception message when loading a Fable plugin fails (#4739) (659e73a4)
- (all) Add
Seq.enumerateTryWithfor try/with in seq, list, array comprehensions (#4750) (448c90d7) - (js/ts) Represent union cases with no fields as singletons (3f6e618e)
- (python) Represent union cases with no fields as singletons (0211b4cc)
- (python) Emit forward reference for self-referencing static union members (#4752) (452b85f2)
- (python) Match .NET NaN and signed-zero semantics in comparison, min and max (383bb93c)
- (python)
LastIndexOf(value, startIndex)off-by-one on inclusive boundary (bad6bcac)
โก Performance Improvements
- (python) Use native operators for int64/uint64 arithmetic (#4727) (f062d668)
- (python) Rewrite hot Seq combinators as native Python generators (#4728) (73e0eab9)
- (python) Read union case fields directly instead of rebuilding Array (#4725) (e4eaa80b)
2.5.0 - 2026-07-05
๐ Features
- (all) Allow
[<Emit>]on StringEnum cases (#4711) (0b1f61ee) - (js/ts) Optimize
printfnwith constant string toconsole.log(#4718) (2d6d083a) - (js/ts) Add
Path.Combinesupport (b1b1e273) - (js/ts) Add
System.IO.PathandSystem.IO.FileAPI support (ec99fac5) - (js/ts/python) Warn on duplicate attached member names (#4715) (fd06aa64)
- (js/ts/python) Add Environment and Console.Error support (6e082f95)
- (py) Add
Path.Combinesupport (4c901c65) - (python) Add
Directory.Exists,Directory.CreateDirectory(f4b4eabc) - (ts) [
] interfaces extend parent [ ] type (#4717) (4f4243cd)
๐ Bug Fixes
- Generate an error on erased union case typed as obj (#4710) (bf2134d5)
- (all) Include return type in overload suffix for op_Implicit/op_Explicit (#4712) (a6846010)
- (js/ts) DateTime.ToString() and %A are now consistent across all DateTimeKind values (#4714) (de98b0e4)
- (python) Accept allowAccessToPrivateRepresentation in FSharpType.IsUnion/IsRecord/GetUnionCases (#4722) (7f915f1d)
- (ts) Strip byref annotation from compiler-generated copy-update locals (#4716) (1e072ed2)
โก Performance Improvements
- Split Fable.Transforms into per-target projects for faster incremental builds (#4720) (260c962f)
2.4.0 - 2026-06-30
๐ Features
- (all) Add
Compiler.is*target detection flags for conditional branching (#4692) (621dea31) - (js/ts) Map task { } to Promise
(97f54d36)
๐ Bug Fixes
- (all) Pass raw value for optional arguments of native bindings (#4688) (a4c75483)
- (all) Support .NET format specifiers and alignment in interpolated strings (#4695) (7c50a3af)
- (all) Error on inline function referencing private value (#4701) (cea6806e)
- (beam) Support module-level mutable variables via process dictionary (#4676) (535b9af0)
- (beam) Namespace module-level mutable state keys by module (#4683) (1ec28ab1)
- (js) Respect StringComparison in String.IndexOf/LastIndexOf (#4681) (7cb92d52)
- (js/ts) Implicit DateTime to DateTimeOffset conversion (#4697) (fcbd9b91)
- (js/ts) Hoist emitJsStatement imports with trailing comments (#4702) (e820eb72)
- (js/ts) Uncurry mutable module value alias calls (#4703) (0de0d218)
- (js/ts) Pass TypeInfo to getRecordFields to handle None fields in anonymous records (#4704) (c977d78b)
- (js/ts/python) Drop allowAccessToPrivateRepresentation arg from reflection calls (#4689) (ec3cded7)
- (ts) Use declared type-param names in object expression generic methods (#4685) (1c3e7d99)
- (ts) Use signature type-param names when implementing generic interface methods (#4686) (03e5deee)
- (ts) Bound enum-constrained type parameters with
extends number(#4687) (15daf624) - (ts) Keep enclosing type parameters in scope for nested members (#4691) (f5723a2d)
- (ts) Re-declare class type params on generic static attached members (#4696) (2da50780)
- (ts) Filter class type params from attached let-binding methods (#4700) (d3a6a1dd)
2.3.0 - 2026-06-24
๐ Features
- (all) Support Exception.InnerException across all targets (#4677) (c9b3ee24)
๐ Bug Fixes
- (beam) Make immutable class instances process-portable (#4670) (182eebef)
2.2.0 - 2026-06-16
๐ Features
- (beam) Add !^ erased-cast operator to BeamInterop (#4659) (206776b)
๐ Bug Fixes
- Add type specifiers to interpolated strings (#4646) (512ae4d)
- (all) Align
invalidArgerror message with .NET format (#4662) (e672eb7) - (beam) Preserve element type through Option.Value for interface dispatch (#4661) (e5521b6)
- (python) Emit wildcard default for union or-patterns (#4649) (#4653) (c96f0ec)
2.1.0 - 2026-06-10
๐ Features
- (beam) Support Erlang/BEAM target in standalone compiler (#4644) (30310e4)
๐ Bug Fixes
- (beam) Collapse array-literal process-dict ref round-trips in FFI/Emit calls (#4626) (234ee08)
- (beam) Make Emit $N substitution a single left-to-right pass (#4631) (48af8db)
- (js/ts) Throw an error when trying to set non-property memeber inside of
jsOptions(#4624) (2d9673f) - (python) Avoid union case field name collision with Union.name (#4647) (ff5df24)
- (python) Make [
] union static members work (#4634) (#4636) (15eb83e)
2.0.1 - 2026-05-28
๐ Bug Fixes
- [JS/TS/Tests] Remove mocha to resolve package vulnerabilities (#4604) (092324b)
- [Rust] Update hashing and datetime tests (#4613) (9d39037)
- (all) Duplicate LetRec bindings during inline expansion (#4592) (62612a5)
- (all) Fix super call in multi-level generic class hierarchy using wrong mangled name (#4414) (db1d4d2)
- (js/ts) Fix JSX props with long string values causing compile error (fixes #3839) (#4545) (d828a46)
- (js/ts) Add support for
matchclauses inJSX.create(#4620) (616edca) - (js/ts) Don't spread last arg in String.Concat call (#4621) (3de580e)
- (js/ts) Inline AttachMembers members at call sites (#4622) (63bcd3d)
- (python) Avoid duplicate captured argument in hoisted guards (#4610) (#4611) (90aec48)
2.0.0 - 2025-04-21
- Fable 5
2.0.0-rc.1 - 2025-02-26
- Fable 5.0.0-rc.1
2.0.0-beta.1 - 2025-02-16
- Fable 5.0.0-alpha.10
- Replace
FABLE_COMPILER_4withFABLE_COMPILER_5as the compiler directive
1.2.2 - 2024-05-24
Fixed
- Fixed includes to come from this package internals (by @MangelMaxime)
1.2.1 - 2024-05-24
Fixed
- Fixed includes to come from this package internals and to use
fable-library-jsinstead offable-library-ts(by @ncave)
1.2.0 - 2024-05-23
Changed
- Use
@fable-org/fable-metadatapackage instead offable-metadata(by @MangelMaxime) - Use
@fable-org/fable-standalonepackage instead offable-standalone(by @MangelMaxime) - Make
GetDirectoryNamereturn"."instead of""if the path doesn't contain any directory (by @MangelMaxime)
Fixed
- Fix initialization of
fable-standalonewith the new package format (by @MangelMaxime)
1.1.0 - 2024-02-20
- Add
NPM_PACKAGE_FABLE_COMPILER_JAVASCRIPTcompiler directive (by @MangelMaxime)
1.0.0 - 2024-02-12
- Release stable version
1.0.0-beta-001 - 2024-02-12
Added
- First release as part of
@fable-orgscope