Just released: cabal

Dear cabal users and contributors,

The cabal team is proud to announce the release of cabal This is mainly a bugfix release, but it has some new features and enhancements as well. The changelogs and release notes are at

and, if your code depends on the Cabal library, at


Two backward (in)compatibility notes may be of particular interest: the XDG Base Directory Specification (conditionally) replacing ~/.cabal and the --enable-documentation option by default added to all cabal haddock invocations. Please look them up at the links above.

Let me finish by thanking our esteemed benefactors, past and present, contributing code, devops, testing, feedback, comments. Representing these are the authors of all PRs included in the release, honourably mentioned in the list of fame below.

Alexander Biehl
Alexey Radkov
Andrea Bedini
Andreas Abel
Andreas Klebinger
Artem Pelenitsyn
Ben Gamari
Brandon Chinn
Bryan Richter
Byron Johnson
Cheng Shao
Colton Clemmer
Daniel Gröber
Evgenii Akentev
Francesco Ariis
Francesco Gazzetta
Gautier DI FOLCO
Georgi Lyubenov
Gershom Bazerman
Guillaume Genestier
Hécate Moonlight
Ikko Ashimine
Jade Lovelace
James Hobson
Jan Synáček
Jappie Klooster
Javier Neira
John Ericson
Marcin Szamotulski
Martijn Bastiaan
Matthew Pickering
Max Amanshauser
Mike Pilgrem
Musab Guma’a
Patrick Dougherty
Paweł Dybiec
Pierre Le Marre
Robert Vollmert
Ross Paterson
Saad Ahmed
Sergey Vinokurov
Sören Tempel
Sylvain Henry
Tom McLaughlin
Troels Henriksen
Vilius Panevėžys
Vladislav Zavialov


Here are links to two issues with cabal discovered just after the release, with some discussion and potential workarounds (the latter potentially affects any multi-GHC CI):


There is a third issue we are aware of (`cabal update` is not run? · Issue #203 · haskell/actions · GitHub), manifesting in CI with a cache, namely that due to XDG backward compatibility behaviour it’s safer to perform cabal update after cache is restored, not before.

All the three issues will probably be addressed in cabal (at least via explicit recommendations in release notes, perhaps via fixes), but at this point we don’t know the details yet, so for the time being we offer workarounds and gather feedback.


Some news on the three issues in cabal

  1. cabal run fails on windows due to the long path issue · Issue #8841 · haskell/cabal · GitHub

Thanks to @jneira, this “long paths” crash was determined to affect only cabal run on Windows and only in some circumstances. It turns out it was introduced in cabal We are looking at potential fixes, but I’d downgrade its severity. Please let us know if it affects you and especially if you don’t have a good workaround.

  1. Fresh ~/.cabal/config written by cabal 3.10 crashes any older cabal · Issue #8864 · haskell/cabal · GitHub (originally reported in Choco install of cabal 3.2 fails in connection with ghc 9.6.1 · Issue #202 · haskell/actions · GitHub)

Thanks to @sclv, we now understand the problem that cabal writes ~/.cabal/config file that older cabal versions can’t read. It’s an unintended compatibility break and we want to fix it in cabal It affects people that want to go back to an older cabal version, but preserve their manually edited config file created by cabal (If preserving the config file is not required, wiping it out makes old cabal binaries work fine, since they promptly generate a fresh file they parse without issues.)

The workarounds include not letting cabal write a fresh config file (e.g., one can generate the file with old cabal or copy an old file) and removing the offending “nix” line, after which the old cabal binaries can parse the config file fine.

  1. `cabal update` is not run? · Issue #203 · haskell/actions · GitHub

Thanks to @andreasabel, the missing cabal update in CI problem is now well understood and worked around in Github Actions (and doesn’t seem to affect the CI scripts generated by haskell-ci). We will update cabal release notes with a recommendation to place cabal update after CI cache restoration in any custom CI scripts in order to correctly trigger the XDG backward compatibility mechanism. That’s probably as much as needs to be done here. Please let us know if there are any corner cases we’ve missed.