<feed xmlns="http://www.w3.org/2005/Atom"><id>https://ocaml.org/changelog.xml</id><title type="text">OCaml Changelog</title><updated>2026-05-05T00:00:00-00:00</updated><entry><link href="https://ocaml.org/changelog/2026-05-05-dune3230" rel="alternate"/><content type="html">&lt;p&gt;The Dune team is pleased to announce &lt;a href=&quot;https://github.com/ocaml/dune/releases/tag/3.23.0&quot;&gt;the release of dune
3.23.0&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Along with many other fixes and improvements, some highlights include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Add support for &lt;code&gt;c_library_flags&lt;/code&gt; in foreign_stubs
(&lt;a href=&quot;https://github.com/ocaml/dune/pull/13484&quot;&gt;#13484&lt;/a&gt;,
&lt;a href=&quot;https://github.com/madroach&quot;&gt;@madroach&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Many improvements to the promotion and diffing functionality, by
&lt;a href=&quot;https://github.com/rgrinberg&quot;&gt;@rgrinberg&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;As part of the previous, a breaking change to the promotion logic has been
introduced: Dune does not automatically promote generated opam files, which must
now be manually promoted with &lt;code&gt;dune promote&lt;/code&gt;. You can trigger building &lt;code&gt;.opam&lt;/code&gt;
files with the &lt;code&gt;@install&lt;/code&gt;, &lt;code&gt;@runtest&lt;/code&gt;, and &lt;code&gt;@opam&lt;/code&gt; aliases. In release mode,
&lt;code&gt;.opam&lt;/code&gt; files aren't generated at all and whatever is in the source is used
(&lt;a href=&quot;https://github.com/ocaml/dune/pull/14108&quot;&gt;ocaml/dune#14108&lt;/a&gt;,
&lt;a href=&quot;https://github.com/rgrinberg&quot;&gt;@rgrinberg&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;User rules and inline test runners are now sandboxed by default
(&lt;a href=&quot;https://github.com/ocaml/dune/pull/13805&quot;&gt;ocaml/dune#13805&lt;/a&gt; and
&lt;a href=&quot;https://github.com/ocaml/dune/pull/14257&quot;&gt;ocaml/dune#14257&lt;/a&gt;,
&lt;a href=&quot;https://github.com/rgrinberg&quot;&gt;@rgrinberg&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;The minimum OCaml version required to build dune is now 4.14.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;See &lt;a href=&quot;https://github.com/ocaml/dune/releases/tag/3.23.0&quot;&gt;the full changelog&lt;/a&gt;
for all new features and fixes, and for attribution to the contributors who made
it all possible. Thank you, contributors!&lt;/p&gt;
&lt;p&gt;If you encounter a problem with this release, please report it in &lt;a href=&quot;https://github.com/ocaml/dune/issues&quot;&gt;our issue
tracker&lt;/a&gt;.&lt;/p&gt;
</content><id>https://ocaml.org/changelog/2026-05-05-dune3230</id><title type="text">Dune 3.23.0</title><updated>2026-05-05T00:00:00-00:00</updated><author><name>OCaml Changelog</name></author></entry><entry><link href="https://ocaml.org/changelog/2026-05-01-odoc-320-draft" rel="alternate"/><content type="html">&lt;p&gt;CHANGES:&lt;/p&gt;
&lt;h3&gt;Added&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Allow persistent latex macros in HTML/KaTeX backend (&lt;a href=&quot;https://github.com/dlesbre&quot; class=&quot;user-mention notranslate&quot; data-hovercard-type=&quot;user&quot; data-hovercard-url=&quot;/users/dlesbre/hovercard&quot; data-octo-click=&quot;hovercard-link-click&quot; data-octo-dimensions=&quot;link_type:self&quot;&gt;@dlesbre&lt;/a&gt;, &lt;a href=&quot;https://github.com/ocaml/odoc/pull/1391&quot; class=&quot;issue-link js-issue-link&quot; data-error-text=&quot;Failed to load title&quot; data-id=&quot;3637047054&quot; data-permission-text=&quot;Title is private&quot; data-url=&quot;https://github.com/ocaml/odoc/issues/1391&quot; data-hovercard-type=&quot;pull_request&quot; data-hovercard-url=&quot;/ocaml/odoc/pull/1391/hovercard&quot;&gt;#1391&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;markdown-generate&lt;/code&gt; command now accepts multiple &lt;code&gt;.odocl&lt;/code&gt; files in a single&lt;br&gt;
invocation, eliminating the need for shell scripting (&lt;a href=&quot;https://github.com/davesnx&quot; class=&quot;user-mention notranslate&quot; data-hovercard-type=&quot;user&quot; data-hovercard-url=&quot;/users/davesnx/hovercard&quot; data-octo-click=&quot;hovercard-link-click&quot; data-octo-dimensions=&quot;link_type:self&quot;&gt;@davesnx&lt;/a&gt;, &lt;a href=&quot;https://github.com/ocaml/odoc/pull/1387&quot; class=&quot;issue-link js-issue-link&quot; data-error-text=&quot;Failed to load title&quot; data-id=&quot;3516228685&quot; data-permission-text=&quot;Title is private&quot; data-url=&quot;https://github.com/ocaml/odoc/issues/1387&quot; data-hovercard-type=&quot;pull_request&quot; data-hovercard-url=&quot;/ocaml/odoc/pull/1387/hovercard&quot;&gt;#1387&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Support for OxCaml (&lt;a href=&quot;https://github.com/lukemaurer&quot; class=&quot;user-mention notranslate&quot; data-hovercard-type=&quot;user&quot; data-hovercard-url=&quot;/users/lukemaurer/hovercard&quot; data-octo-click=&quot;hovercard-link-click&quot; data-octo-dimensions=&quot;link_type:self&quot;&gt;@lukemaurer&lt;/a&gt;, &lt;a href=&quot;https://github.com/art-w&quot; class=&quot;user-mention notranslate&quot; data-hovercard-type=&quot;user&quot; data-hovercard-url=&quot;/users/art-w/hovercard&quot; data-octo-click=&quot;hovercard-link-click&quot; data-octo-dimensions=&quot;link_type:self&quot;&gt;@art-w&lt;/a&gt;, &lt;a href=&quot;https://github.com/ocaml/odoc/pull/1399&quot; class=&quot;issue-link js-issue-link&quot; data-error-text=&quot;Failed to load title&quot; data-id=&quot;3864454436&quot; data-permission-text=&quot;Title is private&quot; data-url=&quot;https://github.com/ocaml/odoc/issues/1399&quot; data-hovercard-type=&quot;pull_request&quot; data-hovercard-url=&quot;/ocaml/odoc/pull/1399/hovercard&quot;&gt;#1399&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;OCaml 5.5.0 support (&lt;a href=&quot;https://github.com/panglesd&quot; class=&quot;user-mention notranslate&quot; data-hovercard-type=&quot;user&quot; data-hovercard-url=&quot;/users/panglesd/hovercard&quot; data-octo-click=&quot;hovercard-link-click&quot; data-octo-dimensions=&quot;link_type:self&quot;&gt;@panglesd&lt;/a&gt;, &lt;a href=&quot;https://github.com/xvw&quot; class=&quot;user-mention notranslate&quot; data-hovercard-type=&quot;user&quot; data-hovercard-url=&quot;/users/xvw/hovercard&quot; data-octo-click=&quot;hovercard-link-click&quot; data-octo-dimensions=&quot;link_type:self&quot;&gt;@xvw&lt;/a&gt;, &lt;a href=&quot;https://github.com/ocaml/odoc/pull/1406&quot; class=&quot;issue-link js-issue-link&quot; data-error-text=&quot;Failed to load title&quot; data-id=&quot;4136736954&quot; data-permission-text=&quot;Title is private&quot; data-url=&quot;https://github.com/ocaml/odoc/issues/1406&quot; data-hovercard-type=&quot;pull_request&quot; data-hovercard-url=&quot;/ocaml/odoc/pull/1406/hovercard&quot;&gt;#1406&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Fixed&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Fix compile-time crashing bugs &lt;a href=&quot;https://github.com/ocaml/odoc/issues/930&quot; class=&quot;issue-link js-issue-link&quot; data-error-text=&quot;Failed to load title&quot; data-id=&quot;1589480161&quot; data-permission-text=&quot;Title is private&quot; data-url=&quot;https://github.com/ocaml/odoc/issues/930&quot; data-hovercard-type=&quot;issue&quot; data-hovercard-url=&quot;/ocaml/odoc/issues/930/hovercard&quot;&gt;#930&lt;/a&gt; and &lt;a href=&quot;https://github.com/ocaml/odoc/issues/1385&quot; class=&quot;issue-link js-issue-link&quot; data-error-text=&quot;Failed to load title&quot; data-id=&quot;3434621926&quot; data-permission-text=&quot;Title is private&quot; data-url=&quot;https://github.com/ocaml/odoc/issues/1385&quot; data-hovercard-type=&quot;issue&quot; data-hovercard-url=&quot;/ocaml/odoc/issues/1385/hovercard&quot;&gt;#1385&lt;/a&gt; (&lt;a href=&quot;https://github.com/jonludlam&quot; class=&quot;user-mention notranslate&quot; data-hovercard-type=&quot;user&quot; data-hovercard-url=&quot;/users/jonludlam/hovercard&quot; data-octo-click=&quot;hovercard-link-click&quot; data-octo-dimensions=&quot;link_type:self&quot;&gt;@jonludlam&lt;/a&gt;, &lt;a href=&quot;https://github.com/ocaml/odoc/pull/1400&quot; class=&quot;issue-link js-issue-link&quot; data-error-text=&quot;Failed to load title&quot; data-id=&quot;3873198046&quot; data-permission-text=&quot;Title is private&quot; data-url=&quot;https://github.com/ocaml/odoc/issues/1400&quot; data-hovercard-type=&quot;pull_request&quot; data-hovercard-url=&quot;/ocaml/odoc/pull/1400/hovercard&quot;&gt;#1400&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Markdown backend assumes ocaml as langId on declarations&lt;/li&gt;
&lt;li&gt;Markdown backend collects all code snippets and render a single code block with comments, rather than split the variants/records per constructor/field&lt;/li&gt;
&lt;li&gt;Fix URL remapping for page references (&lt;a href=&quot;https://github.com/jonludlam&quot; class=&quot;user-mention notranslate&quot; data-hovercard-type=&quot;user&quot; data-hovercard-url=&quot;/users/jonludlam/hovercard&quot; data-octo-click=&quot;hovercard-link-click&quot; data-octo-dimensions=&quot;link_type:self&quot;&gt;@jonludlam&lt;/a&gt;, &lt;a href=&quot;https://github.com/ocaml/odoc/pull/1395&quot; class=&quot;issue-link js-issue-link&quot; data-error-text=&quot;Failed to load title&quot; data-id=&quot;3716127302&quot; data-permission-text=&quot;Title is private&quot; data-url=&quot;https://github.com/ocaml/odoc/issues/1395&quot; data-hovercard-type=&quot;pull_request&quot; data-hovercard-url=&quot;/ocaml/odoc/pull/1395/hovercard&quot;&gt;#1395&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Fix &lt;a href=&quot;https://github.com/ocaml/odoc/issues/1396&quot; class=&quot;issue-link js-issue-link&quot; data-error-text=&quot;Failed to load title&quot; data-id=&quot;3742842080&quot; data-permission-text=&quot;Title is private&quot; data-url=&quot;https://github.com/ocaml/odoc/issues/1396&quot; data-hovercard-type=&quot;issue&quot; data-hovercard-url=&quot;/ocaml/odoc/issues/1396/hovercard&quot;&gt;#1396&lt;/a&gt;, which broke incrememntal builds (&lt;a href=&quot;https://github.com/jonludlam&quot; class=&quot;user-mention notranslate&quot; data-hovercard-type=&quot;user&quot; data-hovercard-url=&quot;/users/jonludlam/hovercard&quot; data-octo-click=&quot;hovercard-link-click&quot; data-octo-dimensions=&quot;link_type:self&quot;&gt;@jonludlam&lt;/a&gt;, &lt;a href=&quot;https://github.com/ocaml/odoc/pull/1402&quot; class=&quot;issue-link js-issue-link&quot; data-error-text=&quot;Failed to load title&quot; data-id=&quot;3983729100&quot; data-permission-text=&quot;Title is private&quot; data-url=&quot;https://github.com/ocaml/odoc/issues/1402&quot; data-hovercard-type=&quot;pull_request&quot; data-hovercard-url=&quot;/ocaml/odoc/pull/1402/hovercard&quot;&gt;#1402&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Ensure all warnings turn into errors with --warn-error (&lt;a href=&quot;https://github.com/jonludlam&quot; class=&quot;user-mention notranslate&quot; data-hovercard-type=&quot;user&quot; data-hovercard-url=&quot;/users/jonludlam/hovercard&quot; data-octo-click=&quot;hovercard-link-click&quot; data-octo-dimensions=&quot;link_type:self&quot;&gt;@jonludlam&lt;/a&gt;, &lt;a href=&quot;https://github.com/ocaml/odoc/pull/1402&quot; class=&quot;issue-link js-issue-link&quot; data-error-text=&quot;Failed to load title&quot; data-id=&quot;3983729100&quot; data-permission-text=&quot;Title is private&quot; data-url=&quot;https://github.com/ocaml/odoc/issues/1402&quot; data-hovercard-type=&quot;pull_request&quot; data-hovercard-url=&quot;/ocaml/odoc/pull/1402/hovercard&quot;&gt;#1402&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Fix missing parentheses for polymorphic arguments (&lt;a href=&quot;https://github.com/art-w&quot; class=&quot;user-mention notranslate&quot; data-hovercard-type=&quot;user&quot; data-hovercard-url=&quot;/users/art-w/hovercard&quot; data-octo-click=&quot;hovercard-link-click&quot; data-octo-dimensions=&quot;link_type:self&quot;&gt;@art-w&lt;/a&gt;, &lt;a href=&quot;https://github.com/ocaml/odoc/pull/1404&quot; class=&quot;issue-link js-issue-link&quot; data-error-text=&quot;Failed to load title&quot; data-id=&quot;4108930011&quot; data-permission-text=&quot;Title is private&quot; data-url=&quot;https://github.com/ocaml/odoc/issues/1404&quot; data-hovercard-type=&quot;pull_request&quot; data-hovercard-url=&quot;/ocaml/odoc/pull/1404/hovercard&quot;&gt;#1404&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
</content><id>https://ocaml.org/changelog/2026-05-01-odoc-320-draft</id><title type="text">Odoc 3.2.0</title><updated>2026-05-01T00:00:00-00:00</updated><author><name>OCaml Changelog</name></author></entry><entry><link href="https://ocaml.org/changelog/2026-04-30-merlin-v571-504-draft" rel="alternate"/><content type="html">&lt;p&gt;CHANGES:&lt;/p&gt;
&lt;p&gt;Thu Apr 30 14:15:42 CEST 2026&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;merlin library
&lt;ul&gt;
&lt;li&gt;Fix a cache invalidation issue due to the introduction of hidden deps in&lt;br&gt;
OCaml 5.2. (&lt;a href=&quot;https://github.com/ocaml/merlin/pull/2062&quot; class=&quot;issue-link js-issue-link&quot; data-error-text=&quot;Failed to load title&quot; data-id=&quot;4345968170&quot; data-permission-text=&quot;Title is private&quot; data-url=&quot;https://github.com/ocaml/merlin/issues/2062&quot; data-hovercard-type=&quot;pull_request&quot; data-hovercard-url=&quot;/ocaml/merlin/pull/2062/hovercard&quot;&gt;#2062&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;index format
&lt;ul&gt;
&lt;li&gt;Merged indexes now point to each-others. This results in smaller index&lt;br&gt;
files. The index of a project is now defined by all its index files, not&lt;br&gt;
only the final aggregation. (&lt;a href=&quot;https://github.com/ocaml/merlin/pull/2051&quot; class=&quot;issue-link js-issue-link&quot; data-error-text=&quot;Failed to load title&quot; data-id=&quot;4127870072&quot; data-permission-text=&quot;Title is private&quot; data-url=&quot;https://github.com/ocaml/merlin/issues/2051&quot; data-hovercard-type=&quot;pull_request&quot; data-hovercard-url=&quot;/ocaml/merlin/pull/2051/hovercard&quot;&gt;#2051&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
</content><id>https://ocaml.org/changelog/2026-04-30-merlin-v571-504-draft</id><title type="text">Merlin 5.7.1-504</title><updated>2026-04-30T00:00:00-00:00</updated><author><name>OCaml Changelog</name></author></entry><entry><link href="https://ocaml.org/changelog/2026-04-16-opam-2-5-1" rel="alternate"/><content type="html">&lt;p&gt;&lt;em&gt;Feedback on this post is welcomed on &lt;a href=&quot;https://discuss.ocaml.org/t/ann-opam-2-5-1/17997&quot;&gt;Discuss&lt;/a&gt;!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;We are pleased to announce the release of opam 2.5.1 fixing a security issue (&lt;a href=&quot;https://github.com/ocaml/security-advisories/blob/main/advisories/2026/OSEC-2026-03.md&quot;&gt;OSEC-2026-03&lt;/a&gt;) and other minor things.&lt;/p&gt;
&lt;p&gt;We advise everyone to upgrade. Please read on for installation and upgrade instructions.&lt;/p&gt;
&lt;h2&gt;Security fix&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;OSEC-2026-03&lt;/strong&gt;: Invalidate &lt;code&gt;.install&lt;/code&gt; fields containing destination filepath trying to escape their scope. &lt;em&gt;Thanks to &lt;a href=&quot;https://github.com/andrew&quot;&gt;@andrew&lt;/a&gt; for reporting this issue.&lt;/em&gt; (&lt;a href=&quot;https://github.com/ocaml/opam/pull/6897&quot;&gt;#6897&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Distributions maintainers that have not already done so, are invited to either upgrade their opam package to 2.5.1 or backport the fix. For any questions please send an email to the authors of this here blog post as listed above.&lt;/p&gt;
&lt;h2&gt;Other changes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Fix a string injection from the depexts field to nix-build, when &lt;code&gt;os-family=nixos&lt;/code&gt;. &lt;em&gt;Thanks to &lt;a href=&quot;https://github.com/RyanGibb&quot;&gt;@RyanGibb&lt;/a&gt; for this contribution and &lt;a href=&quot;https://github.com/andrew&quot;&gt;@andrew&lt;/a&gt; for the report.&lt;/em&gt; (&lt;a href=&quot;https://github.com/ocaml/opam/pull/6894&quot;&gt;#6894&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Restore the distribution detection on Gentoo. (&lt;a href=&quot;https://github.com/ocaml/opam/issues/6887&quot;&gt;#6887&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add support for single-quoted values of the &lt;code&gt;/etc/os-release&lt;/code&gt; file. (&lt;a href=&quot;https://github.com/ocaml/opam/issues/6887&quot;&gt;#6887&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Fix rare potential GC corruptions. &lt;em&gt;Thanks to &lt;a href=&quot;https://github.com/avsm&quot;&gt;@avsm&lt;/a&gt; for the contribution and &lt;a href=&quot;https://github.com/andrew&quot;&gt;@andrew&lt;/a&gt; for the report.&lt;/em&gt; (&lt;a href=&quot;https://github.com/ocaml/opam/pull/6882&quot;&gt;#6882&lt;/a&gt;, &lt;a href=&quot;https://github.com/ocaml/opam/issues/6880&quot;&gt;#6880&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Try it&lt;/h2&gt;
&lt;p&gt;The upgrade instructions are unchanged:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Either from binaries: run&lt;/p&gt;
&lt;p&gt;For Unix systems&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span class='shell-source'&gt;bash -c &lt;/span&gt;&lt;span class='shell-punctuation-definition-string-begin'&gt;&amp;quot;&lt;/span&gt;&lt;span class='shell-string-quoted-double'&gt;sh &amp;lt;(curl -fsSL https://opam.ocaml.org/install.sh) --version 2.5.1&lt;/span&gt;&lt;span class='shell-punctuation-definition-string-end'&gt;&amp;quot;&lt;/span&gt;&lt;span class='shell-source'&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;or from PowerShell for Windows systems&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-powershell&quot;&gt;Invoke-Expression &amp;quot;&amp;amp; { $(Invoke-RestMethod https://opam.ocaml.org/install.ps1) } -Version 2.5.1&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;or download manually from &lt;a href=&quot;https://github.com/ocaml/opam/releases/tag/2.5.1&quot;&gt;the Github &amp;quot;Releases&amp;quot; page&lt;/a&gt; to your PATH.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Or from source, manually: see the instructions in the &lt;a href=&quot;https://github.com/ocaml/opam/tree/2.5.1#compiling-this-repo&quot;&gt;README&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;You should then run:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span class='shell-source'&gt;opam init --reinit -ni
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Please report any issues to &lt;a href=&quot;https://github.com/ocaml/opam/issues&quot;&gt;the bug-tracker&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Happy hacking!&lt;/p&gt;
</content><id>https://ocaml.org/changelog/2026-04-16-opam-2-5-1</id><title type="text">opam 2.5.1</title><updated>2026-04-16T00:00:00-00:00</updated><author><name>OCaml Changelog</name></author></entry><entry><link href="https://ocaml.org/changelog/2026-04-14-dune3222" rel="alternate"/><content type="html">&lt;p&gt;The Dune team is pleased to announce &lt;a href=&quot;https://github.com/ocaml/dune/releases/tag/3.22.2&quot;&gt;the release of dune
3.22.2&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This is a patch release consisting of bug fixes. See &lt;a href=&quot;https://github.com/ocaml/dune/releases/tag/3.22.2&quot;&gt;the full
changelog&lt;/a&gt; for all the
changes and for attribution to the contributors who made it all possible. Thank
you, contributors!&lt;/p&gt;
&lt;p&gt;If you encounter a problem with this release, please report it in &lt;a href=&quot;https://github.com/ocaml/dune/issues&quot;&gt;our issue
tracker&lt;/a&gt;.&lt;/p&gt;
</content><id>https://ocaml.org/changelog/2026-04-14-dune3222</id><title type="text">Dune 3.22.2</title><updated>2026-04-14T00:00:00-00:00</updated><author><name>OCaml Changelog</name></author></entry><entry><link href="https://ocaml.org/changelog/2026-04-10-ocaml-lsp-1260" rel="alternate"/><content type="html">&lt;p&gt;This new release of OCaml-LSP brings several new features and improvements, including new custom requests, support for range formatting, and enhanced hover capabilities.&lt;/p&gt;
&lt;p&gt;See the related &lt;a href=&quot;https://discuss.ocaml.org/t/ann-new-release-of-ocaml-lsp-1-26-0-merlin-5-7-0-504/17978&quot;&gt;announcement on the Discuss forums&lt;/a&gt;.&lt;/p&gt;
</content><id>https://ocaml.org/changelog/2026-04-10-ocaml-lsp-1260</id><title type="text">OCaml-LSP 1.26.0</title><updated>2026-04-10T00:00:00-00:00</updated><author><name>OCaml Changelog</name></author></entry><entry><link href="https://ocaml.org/changelog/2026-04-10-merlin-570-504" rel="alternate"/><content type="html">&lt;p&gt;We're happy to announce the release of Merlin 5.7.0-504. This release comes with a number of bug fixes and improvements to Merlin.&lt;/p&gt;
&lt;p&gt;For more details, we encourage you to delve into the full changelog.&lt;/p&gt;
&lt;p&gt;See the related &lt;a href=&quot;https://discuss.ocaml.org/t/ann-new-release-of-ocaml-lsp-1-26-0-merlin-5-7-0-504/17978&quot;&gt;announcement on the Discuss forums&lt;/a&gt;.&lt;/p&gt;
</content><id>https://ocaml.org/changelog/2026-04-10-merlin-570-504</id><title type="text">Merlin 5.7.0-504</title><updated>2026-04-10T00:00:00-00:00</updated><author><name>OCaml Changelog</name></author></entry><entry><link href="https://ocaml.org/changelog/2026-04-09-merlin-v570-504-draft" rel="alternate"/><content type="html">&lt;p&gt;CHANGES:&lt;/p&gt;
&lt;p&gt;Thu Apr 09 09:59:38 WAT 2026&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;merlin library
&lt;ul&gt;
&lt;li&gt;Implement new refactor-extract-region command for extracting region to a fresh let binding (warning: this feature is still experimental) (&lt;a href=&quot;https://github.com/ocaml/merlin/pull/1948&quot; class=&quot;issue-link js-issue-link&quot; data-error-text=&quot;Failed to load title&quot; data-id=&quot;3195885573&quot; data-permission-text=&quot;Title is private&quot; data-url=&quot;https://github.com/ocaml/merlin/issues/1948&quot; data-hovercard-type=&quot;pull_request&quot; data-hovercard-url=&quot;/ocaml/merlin/pull/1948/hovercard&quot;&gt;#1948&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Add &quot;Other&quot; variant to locate-types result (&lt;a href=&quot;https://github.com/ocaml/merlin/pull/2025&quot; class=&quot;issue-link js-issue-link&quot; data-error-text=&quot;Failed to load title&quot; data-id=&quot;3842188256&quot; data-permission-text=&quot;Title is private&quot; data-url=&quot;https://github.com/ocaml/merlin/issues/2025&quot; data-hovercard-type=&quot;pull_request&quot; data-hovercard-url=&quot;/ocaml/merlin/pull/2025/hovercard&quot;&gt;#2025&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Don't include &lt;code&gt;option&lt;/code&gt; in locate-types result for optional parameters (&lt;a href=&quot;https://github.com/ocaml/merlin/pull/2027&quot; class=&quot;issue-link js-issue-link&quot; data-error-text=&quot;Failed to load title&quot; data-id=&quot;3842902519&quot; data-permission-text=&quot;Title is private&quot; data-url=&quot;https://github.com/ocaml/merlin/issues/2027&quot; data-hovercard-type=&quot;pull_request&quot; data-hovercard-url=&quot;/ocaml/merlin/pull/2027/hovercard&quot;&gt;#2027&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Fix record field autocompletion (&lt;a href=&quot;https://github.com/ocaml/merlin/pull/2028&quot; class=&quot;issue-link js-issue-link&quot; data-error-text=&quot;Failed to load title&quot; data-id=&quot;3843348670&quot; data-permission-text=&quot;Title is private&quot; data-url=&quot;https://github.com/ocaml/merlin/issues/2028&quot; data-hovercard-type=&quot;pull_request&quot; data-hovercard-url=&quot;/ocaml/merlin/pull/2028/hovercard&quot;&gt;#2028&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Signature help should not loop over the parameters once it is finished (&lt;a href=&quot;https://github.com/ocaml/merlin/pull/2023&quot; class=&quot;issue-link js-issue-link&quot; data-error-text=&quot;Failed to load title&quot; data-id=&quot;3797495603&quot; data-permission-text=&quot;Title is private&quot; data-url=&quot;https://github.com/ocaml/merlin/issues/2023&quot; data-hovercard-type=&quot;pull_request&quot; data-hovercard-url=&quot;/ocaml/merlin/pull/2023/hovercard&quot;&gt;#2023&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Fix bugs on signature help about labelled and optional parameters (&lt;a href=&quot;https://github.com/ocaml/merlin/pull/2032&quot; class=&quot;issue-link js-issue-link&quot; data-error-text=&quot;Failed to load title&quot; data-id=&quot;3906116972&quot; data-permission-text=&quot;Title is private&quot; data-url=&quot;https://github.com/ocaml/merlin/issues/2032&quot; data-hovercard-type=&quot;pull_request&quot; data-hovercard-url=&quot;/ocaml/merlin/pull/2032/hovercard&quot;&gt;#2032&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Add &lt;code&gt;-end-position&lt;/code&gt; parameter for &lt;code&gt;enclosing&lt;/code&gt; (&lt;a href=&quot;https://github.com/ocaml/merlin/pull/2029&quot; class=&quot;issue-link js-issue-link&quot; data-error-text=&quot;Failed to load title&quot; data-id=&quot;3843514728&quot; data-permission-text=&quot;Title is private&quot; data-url=&quot;https://github.com/ocaml/merlin/issues/2029&quot; data-hovercard-type=&quot;pull_request&quot; data-hovercard-url=&quot;/ocaml/merlin/pull/2029/hovercard&quot;&gt;#2029&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Signature help should appear even if the 'in' is not written (&lt;a href=&quot;https://github.com/ocaml/merlin/pull/2036&quot; class=&quot;issue-link js-issue-link&quot; data-error-text=&quot;Failed to load title&quot; data-id=&quot;3963122655&quot; data-permission-text=&quot;Title is private&quot; data-url=&quot;https://github.com/ocaml/merlin/issues/2036&quot; data-hovercard-type=&quot;pull_request&quot; data-hovercard-url=&quot;/ocaml/merlin/pull/2036/hovercard&quot;&gt;#2036&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Improve type enclosing behavior on various class and object related items&lt;br&gt;
(&lt;a href=&quot;https://github.com/ocaml/merlin/pull/2053&quot; class=&quot;issue-link js-issue-link&quot; data-error-text=&quot;Failed to load title&quot; data-id=&quot;4185928082&quot; data-permission-text=&quot;Title is private&quot; data-url=&quot;https://github.com/ocaml/merlin/issues/2053&quot; data-hovercard-type=&quot;pull_request&quot; data-hovercard-url=&quot;/ocaml/merlin/pull/2053/hovercard&quot;&gt;#2053&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;merlin binary
&lt;ul&gt;
&lt;li&gt;Define PATH_MAX to 4096 if undefined (eg. hurd) (&lt;a href=&quot;https://github.com/ocaml/merlin/pull/2039&quot; class=&quot;issue-link js-issue-link&quot; data-error-text=&quot;Failed to load title&quot; data-id=&quot;3995086944&quot; data-permission-text=&quot;Title is private&quot; data-url=&quot;https://github.com/ocaml/merlin/issues/2039&quot; data-hovercard-type=&quot;pull_request&quot; data-hovercard-url=&quot;/ocaml/merlin/pull/2039/hovercard&quot;&gt;#2039&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;test suite
&lt;ul&gt;
&lt;li&gt;Add a reproduction case for &lt;a href=&quot;https://github.com/ocaml/merlin/issues/1214&quot; class=&quot;issue-link js-issue-link&quot; data-error-text=&quot;Failed to load title&quot; data-id=&quot;755193558&quot; data-permission-text=&quot;Title is private&quot; data-url=&quot;https://github.com/ocaml/merlin/issues/1214&quot; data-hovercard-type=&quot;issue&quot; data-hovercard-url=&quot;/ocaml/merlin/issues/1214/hovercard&quot;&gt;#1214&lt;/a&gt;, the issue has been resolved before (&lt;a href=&quot;https://github.com/ocaml/merlin/pull/2022&quot; class=&quot;issue-link js-issue-link&quot; data-error-text=&quot;Failed to load title&quot; data-id=&quot;3776182958&quot; data-permission-text=&quot;Title is private&quot; data-url=&quot;https://github.com/ocaml/merlin/issues/2022&quot; data-hovercard-type=&quot;pull_request&quot; data-hovercard-url=&quot;/ocaml/merlin/pull/2022/hovercard&quot;&gt;#2022&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Add reproduction case for &lt;a href=&quot;https://github.com/ocaml/merlin/issues/1763&quot; class=&quot;issue-link js-issue-link&quot; data-error-text=&quot;Failed to load title&quot; data-id=&quot;2289903593&quot; data-permission-text=&quot;Title is private&quot; data-url=&quot;https://github.com/ocaml/merlin/issues/1763&quot; data-hovercard-type=&quot;issue&quot; data-hovercard-url=&quot;/ocaml/merlin/issues/1763/hovercard&quot;&gt;#1763&lt;/a&gt; but it is not failing anymore (&lt;a href=&quot;https://github.com/ocaml/merlin/pull/2021&quot; class=&quot;issue-link js-issue-link&quot; data-error-text=&quot;Failed to load title&quot; data-id=&quot;3775992373&quot; data-permission-text=&quot;Title is private&quot; data-url=&quot;https://github.com/ocaml/merlin/issues/2021&quot; data-hovercard-type=&quot;pull_request&quot; data-hovercard-url=&quot;/ocaml/merlin/pull/2021/hovercard&quot;&gt;#2021&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Add a test to reproduce &lt;a href=&quot;https://github.com/ocaml/merlin/releases.atom#1987&quot;&gt;Locate command fails on multi-line type definitions&lt;/a&gt; (&lt;a href=&quot;https://github.com/ocaml/merlin/pull/2020&quot; class=&quot;issue-link js-issue-link&quot; data-error-text=&quot;Failed to load title&quot; data-id=&quot;3775880114&quot; data-permission-text=&quot;Title is private&quot; data-url=&quot;https://github.com/ocaml/merlin/issues/2020&quot; data-hovercard-type=&quot;pull_request&quot; data-hovercard-url=&quot;/ocaml/merlin/pull/2020/hovercard&quot;&gt;#2020&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Add a regression test for issue &lt;a href=&quot;https://github.com/ocaml/merlin/issues/2019&quot; class=&quot;issue-link js-issue-link&quot; data-error-text=&quot;Failed to load title&quot; data-id=&quot;3758729293&quot; data-permission-text=&quot;Title is private&quot; data-url=&quot;https://github.com/ocaml/merlin/issues/2019&quot; data-hovercard-type=&quot;issue&quot; data-hovercard-url=&quot;/ocaml/merlin/issues/2019/hovercard&quot;&gt;#2019&lt;/a&gt; (&lt;a href=&quot;https://github.com/ocaml/merlin/pull/2030&quot; class=&quot;issue-link js-issue-link&quot; data-error-text=&quot;Failed to load title&quot; data-id=&quot;3864923805&quot; data-permission-text=&quot;Title is private&quot; data-url=&quot;https://github.com/ocaml/merlin/issues/2030&quot; data-hovercard-type=&quot;pull_request&quot; data-hovercard-url=&quot;/ocaml/merlin/pull/2030/hovercard&quot;&gt;#2030&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
</content><id>https://ocaml.org/changelog/2026-04-09-merlin-v570-504-draft</id><title type="text">Merlin 5.7.0-504</title><updated>2026-04-09T00:00:00-00:00</updated><author><name>OCaml Changelog</name></author></entry><entry><link href="https://ocaml.org/changelog/2026-04-06-dune3221" rel="alternate"/><content type="html">&lt;p&gt;The Dune team is pleased to announce &lt;a href=&quot;https://github.com/ocaml/dune/releases/tag/3.22.1&quot;&gt;the release of dune
3.22.1&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This is a patch release consisting of bug fixes. See &lt;a href=&quot;https://github.com/ocaml/dune/releases/tag/3.22.1&quot;&gt;the full
changelog&lt;/a&gt; for all the
changes and for attribution to the contributors who made it all possible. Thank
you, contributors!&lt;/p&gt;
&lt;p&gt;If you encounter a problem with this release, please report it in &lt;a href=&quot;https://github.com/ocaml/dune/issues&quot;&gt;our issue
tracker&lt;/a&gt;.&lt;/p&gt;
</content><id>https://ocaml.org/changelog/2026-04-06-dune3221</id><title type="text">Dune 3.22.1</title><updated>2026-04-06T00:00:00-00:00</updated><author><name>OCaml Changelog</name></author></entry><entry><link href="https://ocaml.org/changelog/2026-03-26-utop-2170-draft" rel="alternate"/><content type="html">&lt;p&gt;CHANGES:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Add support for OCaml 5.5 (&lt;a href=&quot;https://github.com/ocaml-community/utop/pull/510&quot; class=&quot;issue-link js-issue-link&quot; data-error-text=&quot;Failed to load title&quot; data-id=&quot;3944811782&quot; data-permission-text=&quot;Title is private&quot; data-url=&quot;https://github.com/ocaml-community/utop/issues/510&quot; data-hovercard-type=&quot;pull_request&quot; data-hovercard-url=&quot;/ocaml-community/utop/pull/510/hovercard&quot;&gt;#510&lt;/a&gt; &lt;a href=&quot;https://github.com/anmonteiro&quot; class=&quot;user-mention notranslate&quot; data-hovercard-type=&quot;user&quot; data-hovercard-url=&quot;/users/anmonteiro/hovercard&quot; data-octo-click=&quot;hovercard-link-click&quot; data-octo-dimensions=&quot;link_type:self&quot;&gt;@anmonteiro&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Add support for neocaml or other major modes in utop.el (&lt;a href=&quot;https://github.com/ocaml-community/utop/pull/511&quot; class=&quot;issue-link js-issue-link&quot; data-error-text=&quot;Failed to load title&quot; data-id=&quot;4034135210&quot; data-permission-text=&quot;Title is private&quot; data-url=&quot;https://github.com/ocaml-community/utop/issues/511&quot; data-hovercard-type=&quot;pull_request&quot; data-hovercard-url=&quot;/ocaml-community/utop/pull/511/hovercard&quot;&gt;#511&lt;/a&gt;, &lt;a href=&quot;https://github.com/bbatsov&quot; class=&quot;user-mention notranslate&quot; data-hovercard-type=&quot;user&quot; data-hovercard-url=&quot;/users/bbatsov/hovercard&quot; data-octo-click=&quot;hovercard-link-click&quot; data-octo-dimensions=&quot;link_type:self&quot;&gt;@bbatsov&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
</content><id>https://ocaml.org/changelog/2026-03-26-utop-2170-draft</id><title type="text">Utop 2.17.0</title><updated>2026-03-26T00:00:00-00:00</updated><author><name>OCaml Changelog</name></author></entry><entry><link href="https://ocaml.org/changelog/2026-03-26-dune-release-221-draft" rel="alternate"/><content type="html">&lt;p&gt;CHANGES:&lt;/p&gt;
&lt;h3&gt;Added&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Add support for marking a release as a prerelease. (&lt;a href=&quot;https://github.com/tarides/dune-release/pull/517&quot; class=&quot;issue-link js-issue-link&quot; data-error-text=&quot;Failed to load title&quot; data-id=&quot;4127034322&quot; data-permission-text=&quot;Title is private&quot; data-url=&quot;https://github.com/tarides/dune-release/issues/517&quot; data-hovercard-type=&quot;pull_request&quot; data-hovercard-url=&quot;/tarides/dune-release/pull/517/hovercard&quot;&gt;#517&lt;/a&gt;, &lt;a href=&quot;https://github.com/Sudha247&quot; class=&quot;user-mention notranslate&quot; data-hovercard-type=&quot;user&quot; data-hovercard-url=&quot;/users/Sudha247/hovercard&quot; data-octo-click=&quot;hovercard-link-click&quot; data-octo-dimensions=&quot;link_type:self&quot;&gt;@Sudha247&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
</content><id>https://ocaml.org/changelog/2026-03-26-dune-release-221-draft</id><title type="text">Dune-release 2.2.1</title><updated>2026-03-26T00:00:00-00:00</updated><author><name>OCaml Changelog</name></author></entry><entry><link href="https://ocaml.org/changelog/2026-03-23-mdx-252-draft" rel="alternate"/><content type="html">&lt;p&gt;CHANGES:&lt;/p&gt;
&lt;h4&gt;Added&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Support OCaml 5.5 (&lt;a href=&quot;https://github.com/realworldocaml/mdx/pull/475&quot; class=&quot;issue-link js-issue-link&quot; data-error-text=&quot;Failed to load title&quot; data-id=&quot;3976519752&quot; data-permission-text=&quot;Title is private&quot; data-url=&quot;https://github.com/realworldocaml/mdx/issues/475&quot; data-hovercard-type=&quot;pull_request&quot; data-hovercard-url=&quot;/realworldocaml/mdx/pull/475/hovercard&quot;&gt;#475&lt;/a&gt;, &lt;a href=&quot;https://github.com/anmonteiro&quot; class=&quot;user-mention notranslate&quot; data-hovercard-type=&quot;user&quot; data-hovercard-url=&quot;/users/anmonteiro/hovercard&quot; data-octo-click=&quot;hovercard-link-click&quot; data-octo-dimensions=&quot;link_type:self&quot;&gt;@anmonteiro&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
</content><id>https://ocaml.org/changelog/2026-03-23-mdx-252-draft</id><title type="text">Mdx 2.5.2</title><updated>2026-03-23T00:00:00-00:00</updated><author><name>OCaml Changelog</name></author></entry><entry><link href="https://ocaml.org/changelog/2026-03-20-ppxlib-0380" rel="alternate"/><content type="html">&lt;p&gt;The ppxlib team is happy to announce the release of ppxlib.0.38.0.&lt;/p&gt;
&lt;p&gt;The main features of this release are support for OCaml 5.5 and improved support of OCaml 5.4 and 5.3. It also comes with a few bug fixes and a couple new API entries, you can read the extensive release notes &lt;a href=&quot;https://github.com/ocaml-ppx/ppxlib/releases/tag/0.38.0&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This is our first release since we announced our new approach to supporting new compilers in &lt;a href=&quot;https://discuss.ocaml.org/t/ann-ppxlib-support-for-future-compilers/17430&quot;&gt;this thread&lt;/a&gt;. All support for compilers versions &lt;code&gt;&amp;gt;= 5.3&lt;/code&gt; is implemented using this technique and new language features are encoded into the AST. We've added &lt;code&gt;Ast_builder&lt;/code&gt; and &lt;code&gt;Ast_pattern&lt;/code&gt; functions to allow you to manipulate some of those, such as labeled tuples or effect patterns. You can see those in our API documentation &lt;a href=&quot;https://ocaml-ppx.github.io/ppxlib/ppxlib/Ppxlib/Ast_builder/Default/index.html#future-asts&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;https://ocaml-ppx.github.io/ppxlib/ppxlib/Ppxlib/Ast_pattern/index.html#future-asts&quot;&gt;there&lt;/a&gt;. We've also illustrated how to use them in our &lt;a href=&quot;https://ocaml-ppx.github.io/ppxlib/ppxlib/compatibility.html#future_compilers&quot;&gt;new manual section&lt;/a&gt;. If you're interested in producing or consuming other new language features that cannot be represented with our current internal AST (5.2), please &lt;a href=&quot;https://github.com/ocaml-ppx/ppxlib/issues/new&quot;&gt;open an issue&lt;/a&gt; so we can add the relevant helpers.&lt;/p&gt;
&lt;p&gt;Given the ecosystem hasn't yet recovered from the 5.2 AST bump and &lt;code&gt;ppxlib.0.36.0&lt;/code&gt;, we're glad that we can add support for new compilers without introducing further breakage and keep the maintenance burden within ppxlib's bounds.
We've started &lt;a href=&quot;https://github.com/ocaml/ocaml/issues/14668&quot;&gt;discussions&lt;/a&gt; with the compiler team to make this approach even more viable in the future on our end.&lt;/p&gt;
&lt;p&gt;We'd like to thank @ceastlund who's our only external contributor for this release.&lt;/p&gt;
&lt;p&gt;I'd personally like to thank @patricoferris for his help getting this out the door as well as the OCaml Software Foundation and OCamlPro for funding my work on ppxlib.&lt;/p&gt;
&lt;p&gt;Thank you for reading and happy preprocessing!&lt;/p&gt;
&lt;p&gt;You can comment on &lt;a href=&quot;https://discuss.ocaml.org/t/ann-ppxlib-0-38-0/17948&quot;&gt;this announcement on the OCaml discuss forums&lt;/a&gt;.&lt;/p&gt;
</content><id>https://ocaml.org/changelog/2026-03-20-ppxlib-0380</id><title type="text">Ppxlib 0.38.0</title><updated>2026-03-20T00:00:00-00:00</updated><author><name>OCaml Changelog</name></author></entry><entry><link href="https://ocaml.org/changelog/2026-03-19-dune3220" rel="alternate"/><content type="html">&lt;p&gt;The Dune team is pleased to announce &lt;a href=&quot;https://github.com/ocaml/dune/releases/tag/3.22.0&quot;&gt;the release of dune
3.22.0&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In addition to many fixes and small improvements, notable highlights of this
release include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fixes to the dune cache on Windows, thanks to
&lt;a href=&quot;https://github.com/Nevor&quot;&gt;@Nevor&lt;/a&gt; in
&lt;a href=&quot;https://github.com/ocaml/dune/pull/13713&quot;&gt;ocaml/dune#13713&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;New tracing functionality, to inspect and diagnose the build processes thanks
to &lt;a href=&quot;https://github.com/rgrinberg&quot;&gt;@rgrinberg&lt;/a&gt; across many PRs. See &lt;a href=&quot;https://dune.readthedocs.io/en/stable/hacking.html#inspecting-traces-with-jq&quot;&gt;the
documentation&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Addition of the &lt;code&gt;dune-action-trace&lt;/code&gt; library, to instrument trace emission, thanks
to &lt;a href=&quot;https://github.com/rgrinberg&quot;&gt;@rgrinberg&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Support for generating odoc documentation in markdown via the &lt;code&gt;@doc-markdown&lt;/code&gt;
build alias thanks to &lt;a href=&quot;https://github.com/davesnx&quot;&gt;@davesnx&lt;/a&gt;
&lt;a href=&quot;https://github.com/ocaml/dune/pull/12581&quot;&gt;ocaml/dune#12581&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Full support for OxCaml's parameterised libraries, thanks to
&lt;a href=&quot;https://github.com/art-w&quot;&gt;@art-w&lt;/a&gt; and  &lt;a href=&quot;https://github.com/maiste&quot;&gt;@maiste&lt;/a&gt;.
To learn more, see &lt;a href=&quot;https://dune.readthedocs.io/en/stable/tutorials/oxcaml-parameterized-library/index.html&quot;&gt;the
docs&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;See &lt;a href=&quot;https://github.com/ocaml/dune/releases/tag/3.22.0&quot;&gt;the full changelog&lt;/a&gt;
for all new features and fixes, and for attribution to the contributors who made
it all possible. Thank you, contributors!&lt;/p&gt;
&lt;p&gt;If you encounter a problem with this release, please report it in &lt;a href=&quot;https://github.com/ocaml/dune/issues&quot;&gt;our issue
tracker&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;You can comment on &lt;a href=&quot;https://discuss.ocaml.org/t/ann-dune-3-22/17912&quot;&gt;this announcement on the OCaml discuss forums&lt;/a&gt;.&lt;/p&gt;
</content><id>https://ocaml.org/changelog/2026-03-19-dune3220</id><title type="text">Dune 3.22.0</title><updated>2026-03-19T00:00:00-00:00</updated><author><name>OCaml Changelog</name></author></entry><entry><link href="https://ocaml.org/changelog/2026-03-17-ocamlformat-0290-draft" rel="alternate"/><content type="html">&lt;p&gt;CHANGES:&lt;/p&gt;
&lt;h3&gt;Highlight&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;* Support OCaml 5.5 syntax&lt;br&gt;
(&lt;a href=&quot;https://github.com/ocaml-ppx/ocamlformat/pull/2772&quot; class=&quot;issue-link js-issue-link&quot; data-error-text=&quot;Failed to load title&quot; data-id=&quot;4017434605&quot; data-permission-text=&quot;Title is private&quot; data-url=&quot;https://github.com/ocaml-ppx/ocamlformat/issues/2772&quot; data-hovercard-type=&quot;pull_request&quot; data-hovercard-url=&quot;/ocaml-ppx/ocamlformat/pull/2772/hovercard&quot;&gt;#2772&lt;/a&gt;, &lt;a href=&quot;https://github.com/ocaml-ppx/ocamlformat/pull/2774&quot; class=&quot;issue-link js-issue-link&quot; data-error-text=&quot;Failed to load title&quot; data-id=&quot;4021690050&quot; data-permission-text=&quot;Title is private&quot; data-url=&quot;https://github.com/ocaml-ppx/ocamlformat/issues/2774&quot; data-hovercard-type=&quot;pull_request&quot; data-hovercard-url=&quot;/ocaml-ppx/ocamlformat/pull/2774/hovercard&quot;&gt;#2774&lt;/a&gt;, &lt;a href=&quot;https://github.com/ocaml-ppx/ocamlformat/pull/2775&quot; class=&quot;issue-link js-issue-link&quot; data-error-text=&quot;Failed to load title&quot; data-id=&quot;4022750917&quot; data-permission-text=&quot;Title is private&quot; data-url=&quot;https://github.com/ocaml-ppx/ocamlformat/issues/2775&quot; data-hovercard-type=&quot;pull_request&quot; data-hovercard-url=&quot;/ocaml-ppx/ocamlformat/pull/2775/hovercard&quot;&gt;#2775&lt;/a&gt;, &lt;a href=&quot;https://github.com/ocaml-ppx/ocamlformat/pull/2777&quot; class=&quot;issue-link js-issue-link&quot; data-error-text=&quot;Failed to load title&quot; data-id=&quot;4046551995&quot; data-permission-text=&quot;Title is private&quot; data-url=&quot;https://github.com/ocaml-ppx/ocamlformat/issues/2777&quot; data-hovercard-type=&quot;pull_request&quot; data-hovercard-url=&quot;/ocaml-ppx/ocamlformat/pull/2777/hovercard&quot;&gt;#2777&lt;/a&gt;, &lt;a href=&quot;https://github.com/ocaml-ppx/ocamlformat/pull/2780&quot; class=&quot;issue-link js-issue-link&quot; data-error-text=&quot;Failed to load title&quot; data-id=&quot;4072210803&quot; data-permission-text=&quot;Title is private&quot; data-url=&quot;https://github.com/ocaml-ppx/ocamlformat/issues/2780&quot; data-hovercard-type=&quot;pull_request&quot; data-hovercard-url=&quot;/ocaml-ppx/ocamlformat/pull/2780/hovercard&quot;&gt;#2780&lt;/a&gt;, &lt;a href=&quot;https://github.com/ocaml-ppx/ocamlformat/pull/2781&quot; class=&quot;issue-link js-issue-link&quot; data-error-text=&quot;Failed to load title&quot; data-id=&quot;4072808830&quot; data-permission-text=&quot;Title is private&quot; data-url=&quot;https://github.com/ocaml-ppx/ocamlformat/issues/2781&quot; data-hovercard-type=&quot;pull_request&quot; data-hovercard-url=&quot;/ocaml-ppx/ocamlformat/pull/2781/hovercard&quot;&gt;#2781&lt;/a&gt;, &lt;a href=&quot;https://github.com/ocaml-ppx/ocamlformat/pull/2782&quot; class=&quot;issue-link js-issue-link&quot; data-error-text=&quot;Failed to load title&quot; data-id=&quot;4083594581&quot; data-permission-text=&quot;Title is private&quot; data-url=&quot;https://github.com/ocaml-ppx/ocamlformat/issues/2782&quot; data-hovercard-type=&quot;pull_request&quot; data-hovercard-url=&quot;/ocaml-ppx/ocamlformat/pull/2782/hovercard&quot;&gt;#2782&lt;/a&gt;, &lt;a href=&quot;https://github.com/ocaml-ppx/ocamlformat/pull/2783&quot; class=&quot;issue-link js-issue-link&quot; data-error-text=&quot;Failed to load title&quot; data-id=&quot;4083696723&quot; data-permission-text=&quot;Title is private&quot; data-url=&quot;https://github.com/ocaml-ppx/ocamlformat/issues/2783&quot; data-hovercard-type=&quot;pull_request&quot; data-hovercard-url=&quot;/ocaml-ppx/ocamlformat/pull/2783/hovercard&quot;&gt;#2783&lt;/a&gt;, &lt;a href=&quot;https://github.com/Julow&quot; class=&quot;user-mention notranslate&quot; data-hovercard-type=&quot;user&quot; data-hovercard-url=&quot;/users/Julow/hovercard&quot; data-octo-click=&quot;hovercard-link-click&quot; data-octo-dimensions=&quot;link_type:self&quot;&gt;@Julow&lt;/a&gt;)&lt;br&gt;
The update brings several tiny changes, they are listed below.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;* Update Odoc's parser to 3.0 (&lt;a href=&quot;https://github.com/ocaml-ppx/ocamlformat/pull/2757&quot; class=&quot;issue-link js-issue-link&quot; data-error-text=&quot;Failed to load title&quot; data-id=&quot;3671814954&quot; data-permission-text=&quot;Title is private&quot; data-url=&quot;https://github.com/ocaml-ppx/ocamlformat/issues/2757&quot; data-hovercard-type=&quot;pull_request&quot; data-hovercard-url=&quot;/ocaml-ppx/ocamlformat/pull/2757/hovercard&quot;&gt;#2757&lt;/a&gt;, &lt;a href=&quot;https://github.com/Julow&quot; class=&quot;user-mention notranslate&quot; data-hovercard-type=&quot;user&quot; data-hovercard-url=&quot;/users/Julow/hovercard&quot; data-octo-click=&quot;hovercard-link-click&quot; data-octo-dimensions=&quot;link_type:self&quot;&gt;@Julow&lt;/a&gt;)&lt;br&gt;
The indentation of code-blocks containing OCaml code is reduced by 2 to avoid&lt;br&gt;
changing the generated documentation. The indentation within code-blocks is&lt;br&gt;
now significative in Odoc and shows up in generated documentation.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Added&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Added option &lt;code&gt;letop-punning&lt;/code&gt; (&lt;a href=&quot;https://github.com/ocaml-ppx/ocamlformat/pull/2746&quot; class=&quot;issue-link js-issue-link&quot; data-error-text=&quot;Failed to load title&quot; data-id=&quot;3567679949&quot; data-permission-text=&quot;Title is private&quot; data-url=&quot;https://github.com/ocaml-ppx/ocamlformat/issues/2746&quot; data-hovercard-type=&quot;pull_request&quot; data-hovercard-url=&quot;/ocaml-ppx/ocamlformat/pull/2746/hovercard&quot;&gt;#2746&lt;/a&gt;, &lt;a href=&quot;https://github.com/WardBrian&quot; class=&quot;user-mention notranslate&quot; data-hovercard-type=&quot;user&quot; data-hovercard-url=&quot;/users/WardBrian/hovercard&quot; data-octo-click=&quot;hovercard-link-click&quot; data-octo-dimensions=&quot;link_type:self&quot;&gt;@WardBrian&lt;/a&gt;) to control whether&lt;br&gt;
punning is used in extended binding operators.&lt;br&gt;
For example, the code &lt;code&gt;let+ x = x in ...&lt;/code&gt; can be formatted as&lt;br&gt;
&lt;code&gt;let+ x in ...&lt;/code&gt; when &lt;code&gt;letop-punning=always&lt;/code&gt;. With &lt;code&gt;letop-punning=never&lt;/code&gt;, it&lt;br&gt;
becomes &lt;code&gt;let+ x = x in ...&lt;/code&gt;. The default is &lt;code&gt;preserve&lt;/code&gt;, which will&lt;br&gt;
only use punning when it exists in the source.&lt;br&gt;
This also applies to &lt;code&gt;let%ext&lt;/code&gt; bindings (&lt;a href=&quot;https://github.com/ocaml-ppx/ocamlformat/pull/2747&quot; class=&quot;issue-link js-issue-link&quot; data-error-text=&quot;Failed to load title&quot; data-id=&quot;3571443500&quot; data-permission-text=&quot;Title is private&quot; data-url=&quot;https://github.com/ocaml-ppx/ocamlformat/issues/2747&quot; data-hovercard-type=&quot;pull_request&quot; data-hovercard-url=&quot;/ocaml-ppx/ocamlformat/pull/2747/hovercard&quot;&gt;#2747&lt;/a&gt;, &lt;a href=&quot;https://github.com/WardBrian&quot; class=&quot;user-mention notranslate&quot; data-hovercard-type=&quot;user&quot; data-hovercard-url=&quot;/users/WardBrian/hovercard&quot; data-octo-click=&quot;hovercard-link-click&quot; data-octo-dimensions=&quot;link_type:self&quot;&gt;@WardBrian&lt;/a&gt;).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Support the unnamed functor parameters syntax in module types&lt;br&gt;
(&lt;a href=&quot;https://github.com/ocaml-ppx/ocamlformat/pull/2755&quot; class=&quot;issue-link js-issue-link&quot; data-error-text=&quot;Failed to load title&quot; data-id=&quot;3652137963&quot; data-permission-text=&quot;Title is private&quot; data-url=&quot;https://github.com/ocaml-ppx/ocamlformat/issues/2755&quot; data-hovercard-type=&quot;pull_request&quot; data-hovercard-url=&quot;/ocaml-ppx/ocamlformat/pull/2755/hovercard&quot;&gt;#2755&lt;/a&gt;, &lt;a href=&quot;https://github.com/ocaml-ppx/ocamlformat/pull/2759&quot; class=&quot;issue-link js-issue-link&quot; data-error-text=&quot;Failed to load title&quot; data-id=&quot;3680557537&quot; data-permission-text=&quot;Title is private&quot; data-url=&quot;https://github.com/ocaml-ppx/ocamlformat/issues/2759&quot; data-hovercard-type=&quot;pull_request&quot; data-hovercard-url=&quot;/ocaml-ppx/ocamlformat/pull/2759/hovercard&quot;&gt;#2759&lt;/a&gt;, &lt;a href=&quot;https://github.com/Julow&quot; class=&quot;user-mention notranslate&quot; data-hovercard-type=&quot;user&quot; data-hovercard-url=&quot;/users/Julow/hovercard&quot; data-octo-click=&quot;hovercard-link-click&quot; data-octo-dimensions=&quot;link_type:self&quot;&gt;@Julow&lt;/a&gt;)&lt;/p&gt;
&lt;div class=&quot;highlight highlight-source-ocaml notranslate position-relative overflow-auto&quot; data-snippet-clipboard-copy-content=&quot;module type F = ARG -&gt; S&quot;&gt;&lt;pre&gt;&lt;span class=&quot;pl-k&quot;&gt;module type &lt;/span&gt;&lt;span class=&quot;pl-en&quot;&gt;F&lt;/span&gt; &lt;span class=&quot;pl-k&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;pl-en&quot;&gt;ARG&lt;/span&gt; -&amp;gt; &lt;span class=&quot;pl-en&quot;&gt;S&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The following lines are now formatted as they are in the source file:&lt;/p&gt;
&lt;div class=&quot;highlight highlight-source-ocaml notranslate position-relative overflow-auto&quot; data-snippet-clipboard-copy-content=&quot;module M : (_ : S) -&gt; (_ : S) -&gt; S = N
module M : S -&gt; S -&gt; S = N
(* The preceding two lines are no longer turned into this: *)
module M : (_ : S) (_ : S) -&gt; S = N&quot;&gt;&lt;pre&gt;&lt;span class=&quot;pl-k&quot;&gt;module&lt;/span&gt; &lt;span class=&quot;pl-en&quot;&gt;M&lt;/span&gt; : (_ :&lt;span class=&quot;pl-k&quot;&gt; S&lt;/span&gt;) -&amp;gt; (_ :&lt;span class=&quot;pl-k&quot;&gt; S&lt;/span&gt;) -&amp;gt; &lt;span class=&quot;pl-en&quot;&gt;S&lt;/span&gt; &lt;span class=&quot;pl-k&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;pl-en&quot;&gt;N&lt;/span&gt;
&lt;span class=&quot;pl-k&quot;&gt;module&lt;/span&gt; &lt;span class=&quot;pl-en&quot;&gt;M&lt;/span&gt; : &lt;span class=&quot;pl-en&quot;&gt;S&lt;/span&gt; -&amp;gt; &lt;span class=&quot;pl-en&quot;&gt;S&lt;/span&gt; -&amp;gt; &lt;span class=&quot;pl-en&quot;&gt;S&lt;/span&gt; &lt;span class=&quot;pl-k&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;pl-en&quot;&gt;N&lt;/span&gt;
&lt;span class=&quot;pl-c&quot;&gt;&lt;span class=&quot;pl-c&quot;&gt;(*&lt;/span&gt; The preceding two lines are no longer turned into this: &lt;span class=&quot;pl-c&quot;&gt;*)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;pl-k&quot;&gt;module&lt;/span&gt; &lt;span class=&quot;pl-en&quot;&gt;M&lt;/span&gt; : (_ :&lt;span class=&quot;pl-k&quot;&gt; S&lt;/span&gt;) (_ :&lt;span class=&quot;pl-k&quot;&gt; S&lt;/span&gt;) -&amp;gt; &lt;span class=&quot;pl-en&quot;&gt;S&lt;/span&gt; &lt;span class=&quot;pl-k&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;pl-en&quot;&gt;N&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Fixed&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Fix dropped comment in &lt;code&gt;(function _ -&amp;gt; x (* cmt *))&lt;/code&gt; (&lt;a href=&quot;https://github.com/ocaml-ppx/ocamlformat/pull/2739&quot; class=&quot;issue-link js-issue-link&quot; data-error-text=&quot;Failed to load title&quot; data-id=&quot;3556370479&quot; data-permission-text=&quot;Title is private&quot; data-url=&quot;https://github.com/ocaml-ppx/ocamlformat/issues/2739&quot; data-hovercard-type=&quot;pull_request&quot; data-hovercard-url=&quot;/ocaml-ppx/ocamlformat/pull/2739/hovercard&quot;&gt;#2739&lt;/a&gt;, &lt;a href=&quot;https://github.com/Julow&quot; class=&quot;user-mention notranslate&quot; data-hovercard-type=&quot;user&quot; data-hovercard-url=&quot;/users/Julow/hovercard&quot; data-octo-click=&quot;hovercard-link-click&quot; data-octo-dimensions=&quot;link_type:self&quot;&gt;@Julow&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;* &lt;code&gt;cases-matching-exp-indent=compact&lt;/code&gt; does not impact &lt;code&gt;begin end&lt;/code&gt; nodes that&lt;br&gt;
don't have a match inside. (&lt;a href=&quot;https://github.com/ocaml-ppx/ocamlformat/pull/2742&quot; class=&quot;issue-link js-issue-link&quot; data-error-text=&quot;Failed to load title&quot; data-id=&quot;3566187270&quot; data-permission-text=&quot;Title is private&quot; data-url=&quot;https://github.com/ocaml-ppx/ocamlformat/issues/2742&quot; data-hovercard-type=&quot;pull_request&quot; data-hovercard-url=&quot;/ocaml-ppx/ocamlformat/pull/2742/hovercard&quot;&gt;#2742&lt;/a&gt;, &lt;a href=&quot;https://github.com/EmileTrotignon&quot; class=&quot;user-mention notranslate&quot; data-hovercard-type=&quot;user&quot; data-hovercard-url=&quot;/users/EmileTrotignon/hovercard&quot; data-octo-click=&quot;hovercard-link-click&quot; data-octo-dimensions=&quot;link_type:self&quot;&gt;@EmileTrotignon&lt;/a&gt;)&lt;/p&gt;
&lt;div class=&quot;highlight highlight-source-ocaml notranslate position-relative overflow-auto&quot; data-snippet-clipboard-copy-content=&quot;(* before *)
begin match () with
| () -&gt; begin
  f x
end
end
(* after *)
begin match () with
| () -&gt; begin
    f x
  end
end&quot;&gt;&lt;pre&gt;&lt;span class=&quot;pl-c&quot;&gt;&lt;span class=&quot;pl-c&quot;&gt;(*&lt;/span&gt; before &lt;span class=&quot;pl-c&quot;&gt;*)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;pl-k&quot;&gt;begin&lt;/span&gt; &lt;span class=&quot;pl-k&quot;&gt;match&lt;/span&gt; &lt;span class=&quot;pl-c1&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;pl-k&quot;&gt;with&lt;/span&gt;&lt;span class=&quot;pl-k&quot;&gt;&lt;/span&gt;
| &lt;span class=&quot;pl-c1&quot;&gt;()&lt;/span&gt; -&amp;gt; &lt;span class=&quot;pl-k&quot;&gt;begin&lt;/span&gt;
  f x
&lt;span class=&quot;pl-k&quot;&gt;end&lt;/span&gt;
&lt;span class=&quot;pl-k&quot;&gt;end&lt;/span&gt;
&lt;span class=&quot;pl-c&quot;&gt;&lt;span class=&quot;pl-c&quot;&gt;(*&lt;/span&gt; after &lt;span class=&quot;pl-c&quot;&gt;*)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;pl-k&quot;&gt;begin&lt;/span&gt; &lt;span class=&quot;pl-k&quot;&gt;match&lt;/span&gt; &lt;span class=&quot;pl-c1&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;pl-k&quot;&gt;with&lt;/span&gt;&lt;span class=&quot;pl-k&quot;&gt;&lt;/span&gt;
| &lt;span class=&quot;pl-c1&quot;&gt;()&lt;/span&gt; -&amp;gt; &lt;span class=&quot;pl-k&quot;&gt;begin&lt;/span&gt;
    f x
  &lt;span class=&quot;pl-k&quot;&gt;end&lt;/span&gt;
&lt;span class=&quot;pl-k&quot;&gt;end&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;Ast_mapper&lt;/code&gt; now iterates on &lt;em&gt;all&lt;/em&gt; locations inside of Longident.t,&lt;br&gt;
instead of only some.&lt;br&gt;
(&lt;a href=&quot;https://github.com/ocaml-ppx/ocamlformat/pull/2737&quot; class=&quot;issue-link js-issue-link&quot; data-error-text=&quot;Failed to load title&quot; data-id=&quot;3551324654&quot; data-permission-text=&quot;Title is private&quot; data-url=&quot;https://github.com/ocaml-ppx/ocamlformat/issues/2737&quot; data-hovercard-type=&quot;pull_request&quot; data-hovercard-url=&quot;/ocaml-ppx/ocamlformat/pull/2737/hovercard&quot;&gt;#2737&lt;/a&gt;, &lt;a href=&quot;https://github.com/v-gb&quot; class=&quot;user-mention notranslate&quot; data-hovercard-type=&quot;user&quot; data-hovercard-url=&quot;/users/v-gb/hovercard&quot; data-octo-click=&quot;hovercard-link-click&quot; data-octo-dimensions=&quot;link_type:self&quot;&gt;@v-gb&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Remove line break in &lt;code&gt;M with module N = N (* cmt *)&lt;/code&gt; (&lt;a href=&quot;https://github.com/ocaml-ppx/ocamlformat/pull/2779&quot; class=&quot;issue-link js-issue-link&quot; data-error-text=&quot;Failed to load title&quot; data-id=&quot;4059567995&quot; data-permission-text=&quot;Title is private&quot; data-url=&quot;https://github.com/ocaml-ppx/ocamlformat/issues/2779&quot; data-hovercard-type=&quot;pull_request&quot; data-hovercard-url=&quot;/ocaml-ppx/ocamlformat/pull/2779/hovercard&quot;&gt;#2779&lt;/a&gt;, &lt;a href=&quot;https://github.com/Julow&quot; class=&quot;user-mention notranslate&quot; data-hovercard-type=&quot;user&quot; data-hovercard-url=&quot;/users/Julow/hovercard&quot; data-octo-click=&quot;hovercard-link-click&quot; data-octo-dimensions=&quot;link_type:self&quot;&gt;@Julow&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Internal&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Added information on writing tests to &lt;code&gt;CONTRIBUTING.md&lt;/code&gt; (#2838, &lt;a href=&quot;https://github.com/WardBrian&quot; class=&quot;user-mention notranslate&quot; data-hovercard-type=&quot;user&quot; data-hovercard-url=&quot;/users/WardBrian/hovercard&quot; data-octo-click=&quot;hovercard-link-click&quot; data-octo-dimensions=&quot;link_type:self&quot;&gt;@WardBrian&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Changed&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;indentation of the &lt;code&gt;end&lt;/code&gt; keyword in a match-case is now always at least 2. (&lt;a href=&quot;https://github.com/ocaml-ppx/ocamlformat/pull/2742&quot; class=&quot;issue-link js-issue-link&quot; data-error-text=&quot;Failed to load title&quot; data-id=&quot;3566187270&quot; data-permission-text=&quot;Title is private&quot; data-url=&quot;https://github.com/ocaml-ppx/ocamlformat/issues/2742&quot; data-hovercard-type=&quot;pull_request&quot; data-hovercard-url=&quot;/ocaml-ppx/ocamlformat/pull/2742/hovercard&quot;&gt;#2742&lt;/a&gt;, &lt;a href=&quot;https://github.com/EmileTrotignon&quot; class=&quot;user-mention notranslate&quot; data-hovercard-type=&quot;user&quot; data-hovercard-url=&quot;/users/EmileTrotignon/hovercard&quot; data-octo-click=&quot;hovercard-link-click&quot; data-octo-dimensions=&quot;link_type:self&quot;&gt;@EmileTrotignon&lt;/a&gt;)&lt;/p&gt;
&lt;div class=&quot;highlight highlight-source-ocaml notranslate position-relative overflow-auto&quot; data-snippet-clipboard-copy-content=&quot;(* before *)
begin match () with
| () -&gt; begin
  match () with
  | () -&gt; ()
end
end
(* after *)
begin match () with
| () -&gt; begin
  match () with
  | () -&gt; ()
&quot;&gt;&lt;pre&gt;&lt;span class=&quot;pl-c&quot;&gt;&lt;span class=&quot;pl-c&quot;&gt;(*&lt;/span&gt; before &lt;span class=&quot;pl-c&quot;&gt;*)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;pl-k&quot;&gt;begin&lt;/span&gt; &lt;span class=&quot;pl-k&quot;&gt;match&lt;/span&gt; &lt;span class=&quot;pl-c1&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;pl-k&quot;&gt;with&lt;/span&gt;&lt;span class=&quot;pl-k&quot;&gt;&lt;/span&gt;
| &lt;span class=&quot;pl-c1&quot;&gt;()&lt;/span&gt; -&amp;gt; &lt;span class=&quot;pl-k&quot;&gt;begin&lt;/span&gt;
  &lt;span class=&quot;pl-k&quot;&gt;match&lt;/span&gt; &lt;span class=&quot;pl-c1&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;pl-k&quot;&gt;with&lt;/span&gt;&lt;span class=&quot;pl-k&quot;&gt;&lt;/span&gt;
  &lt;span class=&quot;pl-k&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;pl-c1&quot;&gt;()&lt;/span&gt; -&amp;gt; &lt;span class=&quot;pl-c1&quot;&gt;()&lt;/span&gt;
&lt;span class=&quot;pl-k&quot;&gt;end&lt;/span&gt;
&lt;span class=&quot;pl-k&quot;&gt;end&lt;/span&gt;
&lt;span class=&quot;pl-c&quot;&gt;&lt;span class=&quot;pl-c&quot;&gt;(*&lt;/span&gt; after &lt;span class=&quot;pl-c&quot;&gt;*)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;pl-k&quot;&gt;begin&lt;/span&gt; &lt;span class=&quot;pl-k&quot;&gt;match&lt;/span&gt; &lt;span class=&quot;pl-c1&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;pl-k&quot;&gt;with&lt;/span&gt;&lt;span class=&quot;pl-k&quot;&gt;&lt;/span&gt;
| &lt;span class=&quot;pl-c1&quot;&gt;()&lt;/span&gt; -&amp;gt; &lt;span class=&quot;pl-k&quot;&gt;begin&lt;/span&gt;
  &lt;span class=&quot;pl-k&quot;&gt;match&lt;/span&gt; &lt;span class=&quot;pl-c1&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;pl-k&quot;&gt;with&lt;/span&gt;&lt;span class=&quot;pl-k&quot;&gt;&lt;/span&gt;
  &lt;span class=&quot;pl-k&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;pl-c1&quot;&gt;()&lt;/span&gt; -&amp;gt; &lt;span class=&quot;pl-c1&quot;&gt;()&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;* use shortcut &lt;code&gt;begin end&lt;/code&gt; in &lt;code&gt;match&lt;/code&gt; cases and &lt;code&gt;if then else&lt;/code&gt; body. (&lt;a href=&quot;https://github.com/ocaml-ppx/ocamlformat/pull/2744&quot; class=&quot;issue-link js-issue-link&quot; data-error-text=&quot;Failed to load title&quot; data-id=&quot;3566683668&quot; data-permission-text=&quot;Title is private&quot; data-url=&quot;https://github.com/ocaml-ppx/ocamlformat/issues/2744&quot; data-hovercard-type=&quot;pull_request&quot; data-hovercard-url=&quot;/ocaml-ppx/ocamlformat/pull/2744/hovercard&quot;&gt;#2744&lt;/a&gt;, &lt;a href=&quot;https://github.com/EmileTrotignon&quot; class=&quot;user-mention notranslate&quot; data-hovercard-type=&quot;user&quot; data-hovercard-url=&quot;/users/EmileTrotignon/hovercard&quot; data-octo-click=&quot;hovercard-link-click&quot; data-octo-dimensions=&quot;link_type:self&quot;&gt;@EmileTrotignon&lt;/a&gt;)&lt;/p&gt;
&lt;div class=&quot;highlight highlight-source-ocaml notranslate position-relative overflow-auto&quot; data-snippet-clipboard-copy-content=&quot;(* before *)
match () with
| () -&gt; begin
    match () with
    | () -&gt;
  end
end
(* after *)
match () with
| () -&gt;
  begin match () with
    | () -&gt;
  end
end&quot;&gt;&lt;pre&gt;&lt;span class=&quot;pl-c&quot;&gt;&lt;span class=&quot;pl-c&quot;&gt;(*&lt;/span&gt; before &lt;span class=&quot;pl-c&quot;&gt;*)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;pl-k&quot;&gt;match&lt;/span&gt; &lt;span class=&quot;pl-c1&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;pl-k&quot;&gt;with&lt;/span&gt;&lt;span class=&quot;pl-k&quot;&gt;&lt;/span&gt;
| &lt;span class=&quot;pl-c1&quot;&gt;()&lt;/span&gt; -&amp;gt; &lt;span class=&quot;pl-k&quot;&gt;begin&lt;/span&gt;
    &lt;span class=&quot;pl-k&quot;&gt;match&lt;/span&gt; &lt;span class=&quot;pl-c1&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;pl-k&quot;&gt;with&lt;/span&gt;&lt;span class=&quot;pl-k&quot;&gt;&lt;/span&gt;
    &lt;span class=&quot;pl-k&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;pl-c1&quot;&gt;()&lt;/span&gt; -&amp;gt;
  &lt;span class=&quot;pl-k&quot;&gt;end&lt;/span&gt;
end
&lt;span class=&quot;pl-c&quot;&gt;&lt;span class=&quot;pl-c&quot;&gt;(*&lt;/span&gt; after &lt;span class=&quot;pl-c&quot;&gt;*)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;pl-k&quot;&gt;match&lt;/span&gt; &lt;span class=&quot;pl-c1&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;pl-k&quot;&gt;with&lt;/span&gt;&lt;span class=&quot;pl-k&quot;&gt;&lt;/span&gt;
| &lt;span class=&quot;pl-c1&quot;&gt;()&lt;/span&gt; -&amp;gt;
  &lt;span class=&quot;pl-k&quot;&gt;begin&lt;/span&gt; &lt;span class=&quot;pl-k&quot;&gt;match&lt;/span&gt; &lt;span class=&quot;pl-c1&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;pl-k&quot;&gt;with&lt;/span&gt;&lt;span class=&quot;pl-k&quot;&gt;&lt;/span&gt;
    &lt;span class=&quot;pl-k&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;pl-c1&quot;&gt;()&lt;/span&gt; -&amp;gt;
  &lt;span class=&quot;pl-k&quot;&gt;end&lt;/span&gt;
end&lt;/pre&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;* Set the &lt;code&gt;ocaml-version&lt;/code&gt; to &lt;code&gt;5.4&lt;/code&gt; by default (&lt;a href=&quot;https://github.com/ocaml-ppx/ocamlformat/pull/2750&quot; class=&quot;issue-link js-issue-link&quot; data-error-text=&quot;Failed to load title&quot; data-id=&quot;3629291619&quot; data-permission-text=&quot;Title is private&quot; data-url=&quot;https://github.com/ocaml-ppx/ocamlformat/issues/2750&quot; data-hovercard-type=&quot;pull_request&quot; data-hovercard-url=&quot;/ocaml-ppx/ocamlformat/pull/2750/hovercard&quot;&gt;#2750&lt;/a&gt;, &lt;a href=&quot;https://github.com/EmileTrotignon&quot; class=&quot;user-mention notranslate&quot; data-hovercard-type=&quot;user&quot; data-hovercard-url=&quot;/users/EmileTrotignon/hovercard&quot; data-octo-click=&quot;hovercard-link-click&quot; data-octo-dimensions=&quot;link_type:self&quot;&gt;@EmileTrotignon&lt;/a&gt;)&lt;br&gt;
The main difference is that the &lt;code&gt;effect&lt;/code&gt; keyword is recognized without having&lt;br&gt;
to add &lt;code&gt;ocaml-version=5.3&lt;/code&gt; to the configuration.&lt;br&gt;
In exchange, code that use &lt;code&gt;effect&lt;/code&gt; as an identifier must use&lt;br&gt;
&lt;code&gt;ocaml-version=5.2&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The work to support OCaml 5.5 come with several improvements:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Improve the indentation of &lt;code&gt;let structure-item&lt;/code&gt; with the&lt;br&gt;
&lt;code&gt;[@ocamlformat &quot;disable&quot;]&lt;/code&gt; attribute.&lt;br&gt;
&lt;code&gt;let structure-item&lt;/code&gt; means &lt;code&gt;let module&lt;/code&gt;, &lt;code&gt;let open&lt;/code&gt;, &lt;code&gt;let include&lt;/code&gt; and&lt;br&gt;
&lt;code&gt;let exception&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;(let open M in e)[@a]&lt;/code&gt; is turned into &lt;code&gt;let[@a] open M in e&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Long &lt;code&gt;let open ... in&lt;/code&gt; no longer exceed the margin.&lt;/li&gt;
&lt;li&gt;Improve indentation of &lt;code&gt;let structure-item&lt;/code&gt; within parentheses:
&lt;div class=&quot;highlight highlight-source-ocaml notranslate position-relative overflow-auto&quot; data-snippet-clipboard-copy-content=&quot;(* before *)
(let module M = M in
M.foo)
(* after *)
(let module M = M in
 M.foo)&quot;&gt;&lt;pre&gt;&lt;span class=&quot;pl-c&quot;&gt;&lt;span class=&quot;pl-c&quot;&gt;(*&lt;/span&gt; before &lt;span class=&quot;pl-c&quot;&gt;*)&lt;/span&gt;&lt;/span&gt;
(&lt;span class=&quot;pl-k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;pl-k&quot;&gt;module&lt;/span&gt; &lt;span class=&quot;pl-c1&quot;&gt;M&lt;/span&gt; = &lt;span class=&quot;pl-en&quot;&gt;M&lt;/span&gt; &lt;span class=&quot;pl-k&quot;&gt;in&lt;/span&gt;
&lt;span class=&quot;pl-c1&quot;&gt;M.&lt;/span&gt;foo)
&lt;span class=&quot;pl-c&quot;&gt;&lt;span class=&quot;pl-c&quot;&gt;(*&lt;/span&gt; after &lt;span class=&quot;pl-c&quot;&gt;*)&lt;/span&gt;&lt;/span&gt;
(&lt;span class=&quot;pl-k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;pl-k&quot;&gt;module&lt;/span&gt; &lt;span class=&quot;pl-c1&quot;&gt;M&lt;/span&gt; = &lt;span class=&quot;pl-en&quot;&gt;M&lt;/span&gt; &lt;span class=&quot;pl-k&quot;&gt;in&lt;/span&gt;
 &lt;span class=&quot;pl-c1&quot;&gt;M.&lt;/span&gt;foo)&lt;/pre&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
</content><id>https://ocaml.org/changelog/2026-03-17-ocamlformat-0290-draft</id><title type="text">OCamlFormat 0.29.0</title><updated>2026-03-17T00:00:00-00:00</updated><author><name>OCaml Changelog</name></author></entry><entry><link href="https://ocaml.org/changelog/2026-02-20-opam-publish-300-draft" rel="alternate"/><content type="html">&lt;p&gt;CHANGES:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;No longer allow option names to be specified by a prefix if the prefix is unambiguous [&lt;a href=&quot;https://github.com/ocaml-opam/opam-publish/pull/202&quot; class=&quot;issue-link js-issue-link&quot; data-error-text=&quot;Failed to load title&quot; data-id=&quot;3968758393&quot; data-permission-text=&quot;Title is private&quot; data-url=&quot;https://github.com/ocaml-opam/opam-publish/issues/202&quot; data-hovercard-type=&quot;pull_request&quot; data-hovercard-url=&quot;/ocaml-opam/opam-publish/pull/202/hovercard&quot;&gt;#202&lt;/a&gt; &lt;a href=&quot;https://github.com/kit-ty-kate&quot; class=&quot;user-mention notranslate&quot; data-hovercard-type=&quot;user&quot; data-hovercard-url=&quot;/users/kit-ty-kate/hovercard&quot; data-octo-click=&quot;hovercard-link-click&quot; data-octo-dimensions=&quot;link_type:self&quot;&gt;@kit-ty-kate&lt;/a&gt;]&lt;/li&gt;
&lt;li&gt;Query upstream repo for default branch instead of defaulting to &lt;code&gt;master&lt;/code&gt; [&lt;a href=&quot;https://github.com/ocaml-opam/opam-publish/pull/201&quot; class=&quot;issue-link js-issue-link&quot; data-error-text=&quot;Failed to load title&quot; data-id=&quot;3886165217&quot; data-permission-text=&quot;Title is private&quot; data-url=&quot;https://github.com/ocaml-opam/opam-publish/issues/201&quot; data-hovercard-type=&quot;pull_request&quot; data-hovercard-url=&quot;/ocaml-opam/opam-publish/pull/201/hovercard&quot;&gt;#201&lt;/a&gt; &lt;a href=&quot;https://github.com/mbarbin&quot; class=&quot;user-mention notranslate&quot; data-hovercard-type=&quot;user&quot; data-hovercard-url=&quot;/users/mbarbin/hovercard&quot; data-octo-click=&quot;hovercard-link-click&quot; data-octo-dimensions=&quot;link_type:self&quot;&gt;@mbarbin&lt;/a&gt;]&lt;/li&gt;
&lt;li&gt;Query fork name from GitHub to support users whose fork of opam-repository isn't named &lt;code&gt;opam-repository&lt;/code&gt; [&lt;a href=&quot;https://github.com/ocaml-opam/opam-publish/pull/199&quot; class=&quot;issue-link js-issue-link&quot; data-error-text=&quot;Failed to load title&quot; data-id=&quot;3859395878&quot; data-permission-text=&quot;Title is private&quot; data-url=&quot;https://github.com/ocaml-opam/opam-publish/issues/199&quot; data-hovercard-type=&quot;pull_request&quot; data-hovercard-url=&quot;/ocaml-opam/opam-publish/pull/199/hovercard&quot;&gt;#199&lt;/a&gt; &lt;a href=&quot;https://github.com/mbarbin&quot; class=&quot;user-mention notranslate&quot; data-hovercard-type=&quot;user&quot; data-hovercard-url=&quot;/users/mbarbin/hovercard&quot; data-octo-click=&quot;hovercard-link-click&quot; data-octo-dimensions=&quot;link_type:self&quot;&gt;@mbarbin&lt;/a&gt;]&lt;/li&gt;
&lt;li&gt;Fix an infinit loop if the user repeatedly provided an invalid token [&lt;a href=&quot;https://github.com/ocaml-opam/opam-publish/pull/186&quot; class=&quot;issue-link js-issue-link&quot; data-error-text=&quot;Failed to load title&quot; data-id=&quot;3638396146&quot; data-permission-text=&quot;Title is private&quot; data-url=&quot;https://github.com/ocaml-opam/opam-publish/issues/186&quot; data-hovercard-type=&quot;pull_request&quot; data-hovercard-url=&quot;/ocaml-opam/opam-publish/pull/186/hovercard&quot;&gt;#186&lt;/a&gt; &lt;a href=&quot;https://github.com/filipeom&quot; class=&quot;user-mention notranslate&quot; data-hovercard-type=&quot;user&quot; data-hovercard-url=&quot;/users/filipeom/hovercard&quot; data-octo-click=&quot;hovercard-link-click&quot; data-octo-dimensions=&quot;link_type:self&quot;&gt;@filipeom&lt;/a&gt;]&lt;/li&gt;
&lt;li&gt;Remove the deprecated &lt;code&gt;--split&lt;/code&gt; option [&lt;a href=&quot;https://github.com/ocaml-opam/opam-publish/pull/194&quot; class=&quot;issue-link js-issue-link&quot; data-error-text=&quot;Failed to load title&quot; data-id=&quot;3707115741&quot; data-permission-text=&quot;Title is private&quot; data-url=&quot;https://github.com/ocaml-opam/opam-publish/issues/194&quot; data-hovercard-type=&quot;pull_request&quot; data-hovercard-url=&quot;/ocaml-opam/opam-publish/pull/194/hovercard&quot;&gt;#194&lt;/a&gt; &lt;a href=&quot;https://github.com/kit-ty-kate&quot; class=&quot;user-mention notranslate&quot; data-hovercard-type=&quot;user&quot; data-hovercard-url=&quot;/users/kit-ty-kate/hovercard&quot; data-octo-click=&quot;hovercard-link-click&quot; data-octo-dimensions=&quot;link_type:self&quot;&gt;@kit-ty-kate&lt;/a&gt;]&lt;/li&gt;
&lt;li&gt;Remove the &lt;code&gt;github-unix&lt;/code&gt; dependency [&lt;a href=&quot;https://github.com/ocaml-opam/opam-publish/pull/196&quot; class=&quot;issue-link js-issue-link&quot; data-error-text=&quot;Failed to load title&quot; data-id=&quot;3715287737&quot; data-permission-text=&quot;Title is private&quot; data-url=&quot;https://github.com/ocaml-opam/opam-publish/issues/196&quot; data-hovercard-type=&quot;pull_request&quot; data-hovercard-url=&quot;/ocaml-opam/opam-publish/pull/196/hovercard&quot;&gt;#196&lt;/a&gt; &lt;a href=&quot;https://github.com/kit-ty-kate&quot; class=&quot;user-mention notranslate&quot; data-hovercard-type=&quot;user&quot; data-hovercard-url=&quot;/users/kit-ty-kate/hovercard&quot; data-octo-click=&quot;hovercard-link-click&quot; data-octo-dimensions=&quot;link_type:self&quot;&gt;@kit-ty-kate&lt;/a&gt;]&lt;/li&gt;
&lt;li&gt;Upgrade to cmdliner 2.0 [&lt;a href=&quot;https://github.com/ocaml-opam/opam-publish/pull/202&quot; class=&quot;issue-link js-issue-link&quot; data-error-text=&quot;Failed to load title&quot; data-id=&quot;3968758393&quot; data-permission-text=&quot;Title is private&quot; data-url=&quot;https://github.com/ocaml-opam/opam-publish/issues/202&quot; data-hovercard-type=&quot;pull_request&quot; data-hovercard-url=&quot;/ocaml-opam/opam-publish/pull/202/hovercard&quot;&gt;#202&lt;/a&gt; &lt;a href=&quot;https://github.com/kit-ty-kate&quot; class=&quot;user-mention notranslate&quot; data-hovercard-type=&quot;user&quot; data-hovercard-url=&quot;/users/kit-ty-kate/hovercard&quot; data-octo-click=&quot;hovercard-link-click&quot; data-octo-dimensions=&quot;link_type:self&quot;&gt;@kit-ty-kate&lt;/a&gt;]&lt;/li&gt;
&lt;/ul&gt;
</content><id>https://ocaml.org/changelog/2026-02-20-opam-publish-300-draft</id><title type="text">Opam-publish 3.0.0</title><updated>2026-02-20T00:00:00-00:00</updated><author><name>OCaml Changelog</name></author></entry><entry><link href="https://ocaml.org/changelog/2026-02-17-ocaml-541-and-4143" rel="alternate"/><content type="html">&lt;p&gt;We have the pleasure of announcing the dual releases of OCaml 4.14.3 and OCaml 5.4.1, dedicated to the memory of Nicolaas Govert de Bruijn on the anniversary of his death.&lt;/p&gt;
&lt;p&gt;Those releases are a collection of safe and valuable runtime bugfixes.
The OCaml 5.4.1 release also contains a fix for the &lt;code&gt;-pack&lt;/code&gt; mode for macOs and various TSAN fixes.&lt;/p&gt;
&lt;p&gt;More importantly, those new versions harden the Marshal module against malicious inputs as described in the security announcement &lt;a href=&quot;https://osv.dev/vulnerability/OSEC-2026-01&quot;&gt;OSEC-2026-01&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We are encouraging you to switch to those new releases whenever possible.&lt;/p&gt;
&lt;p&gt;Don't hesitate to &lt;a href=&quot;https://github.com/ocaml/ocaml/issues&quot;&gt;report any bugs&lt;/a&gt; on the OCaml issue tracker and to &lt;a href=&quot;https://discuss.ocaml.org/t/ocaml-5-4-1-and-4-14-3-released/17822&quot;&gt;leave comments&lt;/a&gt; on the discuss announcement.&lt;/p&gt;
&lt;p&gt;See the list of changes below for more details.&lt;/p&gt;
&lt;p&gt;Happy hacking,
-- Florian Angeletti for the OCaml team.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Installation Instructions&lt;/h2&gt;
&lt;p&gt;The base compiler can be installed as an opam switch with the following commands:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span class='bash-source'&gt;opam update
&lt;/span&gt;&lt;span class='bash-source'&gt;opam switch create 4.14.3
&lt;/span&gt;&lt;span class='bash-source'&gt;opam switch create 5.4.1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The source code for the release is also directly available on:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;GitHub:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ocaml/ocaml/archive/4.14.3.tar.gz&quot;&gt;https://github.com/ocaml/ocaml/archive/4.14.3.tar.gz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ocaml/ocaml/archive/5.4.1.tar.gz&quot;&gt;https://github.com/ocaml/ocaml/archive/5.4.1.tar.gz&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Inria archive:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://caml.inria.fr/pub/distrib/ocaml-4.14/ocaml-4.14.3.tar.gz&quot;&gt;https://caml.inria.fr/pub/distrib/ocaml-4.14/ocaml-4.14.3.tar.gz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://caml.inria.fr/pub/distrib/ocaml-5.4/ocaml-5.4.1.tar.gz&quot;&gt;https://caml.inria.fr/pub/distrib/ocaml-5.4/ocaml-5.4.1.tar.gz&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
</content><id>https://ocaml.org/changelog/2026-02-17-ocaml-541-and-4143</id><title type="text">Release of OCaml 5.4.1 and 4.14.3</title><updated>2026-02-17T00:00:00-00:00</updated><author><name>OCaml Changelog</name></author></entry></feed>
