Changelog

May 7, 2026 · View on GitHub

Tags:

  • :boom: [Breaking Change]
  • :eyeglasses: [Spec Compliance]
  • :rocket: [New Feature]
  • :bug: [Bug Fix]
  • :memo: [Documentation]
  • :nail_care: [Polish]
  • :house: [Internal]

13.0.0-alpha.5 (Unreleased)

:boom: Breaking Change

:eyeglasses: Spec Compliance

:rocket: New Feature

:bug: Bug fix

:memo: Documentation

:nail_care: Polish

:house: Internal

13.0.0-alpha.4

:boom: Breaking Change

:rocket: New Feature

:bug: Bug fix

:nail_care: Polish

:house: Internal

13.0.0-alpha.3

:boom: Breaking Change

:rocket: New Feature

:bug: Bug fix

:nail_care: Polish

:house: Internal

13.0.0-alpha.2

:bug: Bug fix

:nail_care: Polish

:house: Internal

13.0.0-alpha.1

:boom: Breaking Change

:rocket: New Feature

:bug: Bug fix

:nail_care: Polish

12.1.0

:rocket: New Feature

:bug: Bug fix

:nail_care: Polish

12.0.2

:rocket: New Feature

:bug: Bug fix

:house: Internal

12.0.1

:bug: Bug fix

:nail_care: Polish

12.0.0

No changes compared to rc.5.

12.0.0-rc.5

:bug: Bug fix

:house: Internal

12.0.0-rc.4

:boom: Breaking Change

  • Fix some Intl bindings (Intl.Collator.supportedLocalesOf, Intl.DateTimeFormat.supportedLocalesOf, Intl.ListFormat.supportedLocalesOf, Intl.NumberFormat.supportedLocalesOf, Intl.PluralRules.supportedLocalesOf, Intl.RelativeTimeFormat.supportedLocalesOf, Intl.Segmenter.supportedLocalesOf) which return array<string> and not their corresponding main type t. Also remove Intl.PluralRules.selectBigInt and Intl.PluralRules.selectRangeBigInt which don't work in many JS runtimes. https://github.com/rescript-lang/rescript/pull/7995

:bug: Bug fix

:nail_care: Polish

:house: Internal

12.0.0-rc.3

:bug: Bug fix

:nail_care: Polish

:house: Internal

12.0.0-rc.2

:boom: Breaking Change

:bug: Bug fix

:house: Internal

12.0.0-rc.1

:nail_care: Polish

:house: Internal

12.0.0-beta.14

:boom: Breaking Change

:bug: Bug fix

:nail_care: Polish

:house: Internal

12.0.0-beta.13

:bug: Bug fix

:nail_care: Polish

12.0.0-beta.12

:boom: Breaking Change

:rocket: New Feature

:bug: Bug fix

:nail_care: Polish

12.0.0-beta.11

:boom: Breaking Change

:rocket: New Feature

:bug: Bug fix

:nail_care: Polish

:house: Internal

12.0.0-beta.10

:rocket: New Feature

:bug: Bug fix

:nail_care: Polish

12.0.0-beta.9

:boom: Breaking Change

:rocket: New Feature

:bug: Bug fix

:nail_care: Polish

:house: Internal

12.0.0-beta.8

Do not use, npm package broken.

12.0.0-beta.7

:rocket: New Feature

:bug: Bug fix

:nail_care: Polish

12.0.0-beta.6

:boom: Breaking Change

:rocket: New Feature

:bug: Bug fix

:nail_care: Polish

:house: Internal

12.0.0-beta.5

:bug: Bug fix

:memo: Documentation

:nail_care: Polish

:house: Internal

12.0.0-beta.4

:bug: Bug fix

:nail_care: Polish

12.0.0-beta.3

:boom: Breaking Change

:rocket: New Feature

:bug: Bug fix

:nail_care: Polish

:house: Internal

12.0.0-beta.2

:boom: Breaking Change

:rocket: New Feature

:bug: Bug fix

:nail_care: Polish

:house: Internal

12.0.0-beta.1

:rocket: New Feature

:nail_care: Polish

:house: Internal

12.0.0-alpha.15

:boom: Breaking Change

:bug: Bug fix

:nail_care: Polish

:house: Internal

12.0.0-alpha.14

:boom: Breaking Change

  • Iterator.forEach now emits Iterator.prototype.forEach call. https://github.com/rescript-lang/rescript/pull/7506
  • Rename functions ending with Exn to end with OrThrow. The old Exn functions are now deprecated:
    • Bool.fromStringExnBool.fromStringOrThrow
    • BigInt.fromStringExnBigInt.fromStringOrThrow
    • JSON.parseExnJSON.parseOrThrow
    • Changed BigInt.fromFloat to return an option rather than throwing an error.
    • Added BigInt.fromFloatOrThrow
    • Option.getExnOption.getOrThrow
    • Null.getExnNull.getOrThrow
    • Nullable.getExnNullable.getOrThrow
    • Result.getExnResult.getOrThrow
    • List.getExnList.getOrThrow
    • List.tailExnList.tailOrThrow
    • List.headExnList.headOrThrow
    • Old functions remain available but are marked as deprecated with guidance to use the new OrThrow variants.
    • https://github.com/rescript-lang/rescript/pull/7518, https://github.com/rescript-lang/rescript/pull/7554

:rocket: New Feature

:bug: Bug fix

:nail_care: Polish

:house: Internal

12.0.0-alpha.13

:boom: Breaking Change

:rocket: New Feature

:bug: Bug fix

:house: Internal

:nail_care: Polish

12.0.0-alpha.12

:bug: Bug fix

:house: Internal

:nail_care: Polish

12.0.0-alpha.11

:bug: Bug fix

:house: Internal

:nail_care: Polish

12.0.0-alpha.10

:rocket: New Feature

:boom: Breaking Change

:house: Internal

:nail_care: Polish

:bug: Bug fix

12.0.0-alpha.9

:boom: Breaking Change

:nail_care: Polish

:bug: Bug fix

:house: Internal

12.0.0-alpha.8

:bug: Bug fix

:house: Internal

:nail_care: Polish

12.0.0-alpha.7

:bug: Bug fix

:nail_care: Polish

:house: Internal

12.0.0-alpha.6

:rocket: New Feature

:bug: Bug fix

:house: Internal

12.0.0-alpha.5

:rocket: New Feature

:bug: Bug fix

:nail_care: Polish

:house: Internal

12.0.0-alpha.4

:boom: Breaking Change

:rocket: New Feature

:bug: Bug fix

:nail_care: Polish

:house: Internal

12.0.0-alpha.3

:bug: Bug fix

12.0.0-alpha.2

:rocket: New Feature

:bug: Bug Fix

:house: Internal

:nail_care: Polish

12.0.0-alpha.1

:rocket: New Feature

:boom: Breaking Change

:bug: Bug Fix

:house: Internal

:nail_care: Polish

11.1.3

:bug: Bug Fix

11.1.3-rc.1

:bug: Bug Fix

11.1.2

:bug: Bug Fix

11.1.2-rc.1

:rocket: New Feature

:bug: Bug Fix

11.1.1

:bug: Bug Fix

11.1.0

:bug: Bug Fix

11.1.0-rc.8

:rocket: New Feature

:bug: Bug Fix

:nail_care: Polish

11.1.0-rc.7

:bug: Bug Fix

11.1.0-rc.6

:rocket: New Feature

:bug: Bug Fix

11.1.0-rc.5

:bug: Bug Fix

11.1.0-rc.4

:bug: Bug Fix

:nail-care: Polish

11.1.0-rc.3

:nail_care: Polish

:bug: Bug Fix

11.1.0-rc.2

:rocket: New Feature

:bug: Bug Fix

:house: Internal

11.1.0-rc.1

:rocket: New Feature

:bug: Bug Fix

11.0.1

:bug: Bug Fix

:nail_care: Polish

11.0.0

No changes compared to rc.9.

11.0.0-rc.9

:rocket: New Feature

:bug: Bug Fix

:nail_care: Polish

11.0.0-rc.8

:rocket: New Feature

:bug: Bug Fix

:nail_care: Polish

11.0.0-rc.7

:rocket: New Feature

:bug: Bug Fix

11.0.0-rc.6

:rocket: New Feature

:bug: Bug Fix

:nail_care: Polish

11.0.0-rc.5

:rocket: New Feature

:bug: Bug Fix

:house: Internal

:nail_care: Polish

11.0.0-rc.4

:rocket: New Feature

:boom: Breaking Change

:bug: Bug Fix

:nail_care: Polish

11.0.0-rc.3

:bug: Bug Fix

:nail_care: Polish

11.0.0-rc.2

:rocket: New Feature

:boom: Breaking Change

:bug: Bug Fix

11.0.0-rc.1

:rocket: New Feature

:boom: Breaking Change

:nail_care: Polish

11.0.0-beta.4

:rocket: New Feature

:boom: Breaking Change

:bug: Bug Fix

11.0.0-beta.3

:rocket: New Feature

:bug: Bug Fix

11.0.0-beta.2

:rocket: New Feature

:boom: Breaking Change

:bug: Bug Fix

11.0.0-beta.1

:rocket: Main New Feature

:nail_care: Polish

:bug: Bug Fix

11.0.0-alpha.6

:boom: Breaking Change

:bug: Bug Fix

:nail_care: Polish

11.0.0-alpha.5

:rocket: Main New Feature

:boom: Breaking Change

:bug: Bug Fix

11.0.0-alpha.4

:rocket: Main New Feature

:bug: Bug Fix

:nail_care: Polish

11.0.0-alpha.3

:rocket: Main New Feature

:bug: Bug Fix

11.0.0-alpha.2

:rocket: Main New Feature

:bug: Bug Fix

11.0.0-alpha.1

:rocket: Main New Feature

  • Introduce experimental uncurried mode. For experimentation only. PR #5796
  • Customization of runtime representation of variants and introduction of untagged variants PR #6095, PR #6103

:rocket: New Feature

:boom: Breaking Change

  • Remove support for the legacy Reason syntax. Existing Reason code can be converted to ReScript syntax using ReScript 9 as follows:
    • npm i -g rescript@9
    • rescript convert <reason files>
  • Remove obsolete built-in project templates and the "rescript init" functionality. This is replaced by create-rescript-app which is maintained separately.
  • Do not attempt to build ReScript from source on npm postinstall for platforms without prebuilt binaries anymore.
  • Made pinned dependencies transitive: if a is a pinned dependency of b and b is a pinned dependency of c, then a is implicitly a pinned dependency of c. This change is only breaking if your build process assumes non-transitivity.
  • Curried after uncurried is not fused anymore: (. x) => y => 3 is not equivalent to (. x, y) => 3 anymore. It's instead equivalent to (. x) => { y => 3 }. Also, (. int) => string => bool is not equivalen to (. int, string) => bool anymore. These are only breaking changes for unformatted code.
  • Exponentiation operator ** is now right-associative. 2. ** 3. ** 2. now compile to Math.pow(2, Math.pow(3, 2)) and not anymore Math.pow(Math.pow(2, 3), 2). Parentheses can be used to change precedence.
  • Remove unsafe j`$(a)$(b)` interpolation deprecated in compiler version 10 https://github.com/rescript-lang/rescript-compiler/pull/6068
  • Remove deprecated module Printexc
  • @deriving(jsConverter) not supported anymore for variant types https://github.com/rescript-lang/rescript-compiler/pull/6088
  • New representation for variants, where the tag is a string instead of a number. https://github.com/rescript-lang/rescript-compiler/pull/6088
  • GenType: removed support for @genType.as for records and variants which has become unnecessary. Use the language's @as instead to channge the runtime representation without requiring any runtime conversion during FFI. https://github.com/rescript-lang/rescript-compiler/pull/6099 https://github.com/rescript-lang/rescript-compiler/pull/6101

:bug: Bug Fix

:nail_care: Polish

10.1.4

:bug: Bug Fix

:rocket: New Feature

:nail_care: Polish

10.1.3

:rocket: New Feature

:boom: Breaking Change

  • genType: streamline the treatment of optionals as undefined https://github.com/rescript-lang/rescript-compiler/pull/6024
    • Represent option<t> as undefined | t instead of null | undefined | t. This is more permissive when importing functions taking optional values (allows to use option types), but stricter when e.g. exporting ReScript functions taking arguments of option type. Fallback: use Js.undefined<_> instead.
    • Represent {x:option<string>} as {x:(undefined | string)} instead of {x?: string}. This is more in line with TS's behaviour. Fallback: use {x?:string}.

:nail_care: Polish

:bug: Bug Fix

10.1.2

:bug: Bug Fix

10.1.1

:boom: Breaking Change

  • Parse the attributes of labelled argument to the pattern attributes of argument instead of function. https://github.com/rescript-lang/syntax/pull/722
  • The prop names duplicated to keyword are not mangled automatically in JSX v4.
    • Use @as instead

:rocket: New Feature

:bug: Bug Fix

10.1.0

:bug: Bug Fix

10.1.0-rc.5

:bug: Bug Fix

10.1.0-rc.4

:rocket: New Feature

:bug: Bug Fix

10.1.0-rc.3

:rocket: New Feature

:bug: Bug Fix

:nail_care: Polish

10.1.0-rc.2

:bug: Bug Fix

10.1.0-rc.1

:boom: Breaking Change

:rocket: New Feature

:bug: Bug Fix

:eyeglasses: Spec Compliance

  • Functions with consecutive dots now print as multiple arrow functions like in JavaScript.

:nail_care: Polish

  • Add loading, aria-* DOM element attributes in JsxDOM.domProps: ariaCurrent, ariaInvalid, ariaAutocomplete, etc.
  • Change the internal representation of props for the lowercase components to record. https://github.com/rescript-lang/syntax/pull/665
  • Add JsxPPXReactSupport module to relocate the helper functions for JSX v4 from rescript-react

10.1.0-alpha.2

:rocket: New Feature

:bug: Bug Fix

:nail_care: Polish

10.1.0-alpha.1

:boom: Breaking Change

  • Pipe -> does not support a code block on the right-hand side e.g. x->{ open A; get("test") }

:rocket: New Feature

:bug: Bug Fix

:nail_care: Polish

10.0.1

:bug: Bug Fix

10.0.0

Compiler

:boom: Breaking Change

  • bsconfig.json does not support // line comments anymore.
    • Example: "suffix": ".bs.js" // determine the suffix
    • Fix: remove the comment and use standard json.
  • Changed return type of Js.String.match_ as it was wrong. #5070
    • Example: any use of Js.String.match_ and Js.String2.match_
    • Fix: follow the type errors
  • GenType is now vendored in the compiler and drops support for the Flow and untyped back-ends to focus on providing a better experience for TypeScript.
    • Fix: keep on using the older version of the compiler and the separate genType package if Flow support is required. Migrate to TS if one wants to upgrade the compiler version.

:rocket: New Feature

:bug: Bug Fix

  • Classify bigint correctly #5351
  • Fixed crash in rescript build on Windows #5516
  • Fixed rescript init command not working #5526
  • Fix issue with compiler log not terminated that causes problems with editor extension not clearing issues when fixed #5545
:nail_care: Polish
  • Changed Linux build to depend on GLIBC 2.28 again for compatibility with Debian 10.

  • Proper M1 support (CI now supports M1 native builds)

Syntax

:boom: Breaking Change

  • @bs.send.pipe is now removed. Earlier it was deprecated.
  • Missing labels in function application is now an error (https://forum.rescript-lang.org/t/ann-more-strict-checks-in-missed-labels/2117).
    • Example: let f = (x, ~z) => x + z; f(1, 2)
    • Fix: do let f = (x, ~z) => x + z; f(1, ~z=2) instead
  • Externals without @val annotations do not work anymore, and externals with = "" give an error.
    • Example: external setTimeout: (unit => unit, int) => float = "setTimeout" is not supported anymore.
    • Fix: use @val external setTimeout: (unit => unit, int) => float = "setTimeout" instead.
    • Example2: @val external setTimeout: (unit => unit, int) => float = "" is not supported anymore.
    • Fix2: use @val external setTimeout: (unit => unit, int) => float = "setTimeout" instead.
  • Strings processed at compile-time don't need escaping anymore.
    • Example: let blockCommentsRe = %re("/\\/\\*([^*]|[\\r\\n]|(\\*+([^*/]|[\\r\\n])))*\\*+\\//g").
    • Fix: use let blockCommentsRe = %re("/\/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+\//g") instead.
  • Remove parsing of "import" and "export" which was never officially supported https://github.com/rescript-lang/syntax/pull/597 https://github.com/rescript-lang/syntax/pull/599
    • Example: export type t = int
    • Fix: @genType type t = int
    • Example2: import realValue: complexNumber => float from "./MyMath"
    • Fix2: @genType.import("./MyMath") external realValue: complexNumber => float = "realValue"

:rocket: New Feature

  • Unicode is now supported in regular strings and chars (when the symbol fits). This is now going to work: let str = "Σ". And, you'll be able to pattern match on unicode chars: switch c { | 'Σ' => "what a fine unicode char" | _ => "unicode is fun" }
  • Doc comments /** ... */ are now supported. Inernally, they are attributes, so are only valid at positions where @foo is allowed, or a syntax error is given. Similarly for module-level /*** comments */ that can go where @@attributes go.

:bug: Bug Fix

  • Fix printing for inline nullary functor types #477
  • Fix stripping of quotes for empty poly variants #474
  • Implement syntax for arity zero vs arity one in uncurried application in #139
  • Fix parsing of first class module exprs as part of binary/ternary expr in #256
  • Fix formatter hanging on deeply nested function calls #261

Libraries

:boom: Breaking Change

:bug: Bug Fix

:nail_care: Polish

  • Several Belt / Js libraries are now converted to ReScript syntax, with corresponding comments in Markdown format suitable for hovering. See #5361.

Playground

:house: Internal

  • Added jsoo_playground_main.ml as the rescript-lang.org playground bundle entrypoint

:boom: Breaking Change


You can find more old changelog from docs/changelog