End-of-life is December 31, 2026.
The announcement at https://discuss.ocaml.org/t/ann-sunsetting-of-dkml-distribution/17530 has full details.
In PowerShell do:
winget remove dkml
You’ll see Uninstall failed with exit code: 4294967295 but otherwise it should succeed.
Then do:
winget install dkml
The installer does not yet check that all OCaml programs are stopped before upgrading or uninstalling. If you get Permission denied then stop OCaml manually: close Visual Studio Code, stop any dune build, and stop any opam install / opam exec. And then forcibly kill the processes in PowerShell:
1..6 | % { @("bash","sh","with-dkml","ocamllsp","git","opam","dune","ocamlrun") | % { taskkill /F /IM "$_.exe" }; Start-Sleep 1 }
During opam install, when a package tries to run a non-OCaml executable (for example, the conf-python-3 package runs python3), the deprecation logic will pause the program for 15 seconds. You might see in the logs:
### output ###
# WARNING: `with-dkml "python3"` is deprecated. Use `dk Ml.Use -- "python3"` instead.
# The program will continue in 15 seconds ...
You will need to wait for the next version for this performance gap to be fixed.
opam-real switch create 5.2.0+msvc. Or continue to use dk Ml.Switch init
(or the deprecated dkml init) to create a DkML 4.14.2 switch which supports
more native MSVC Windows packages (for now) but does not have the latest and
experimental OCaml language features.dkml.exe and with-dkml.exe but both are
deprecated; the new (unified) executable is dk.exe. See
Deprecated Commands in the release notes.dkml init, the replacement dk Ml.Switch init and the with-dkml proxy
commands, and can be disabled with dk Ml.News disable. In particular, use
dk Ml.News to show the news if you are experiencing problems with DkML.opam, dune and other OCaml processes since, on
Windows, in-use executables can’t be deleted or updated.The deprecated commands still work, but will pause for 15 seconds after displaying the new command on the standard error.
| Old Command | New Command | Example |
|---|---|---|
dkml init | dk Ml.Switch | dk Ml.Switch init |
dk Ml.News | dk Ml.News show | |
dkml version | dk Ml.Version | dk Ml.Version show |
with-dkml bash | dk Ml.Use | dk Ml.Use -- bash |
The appropriate host-arch-x86_32/host-arch-x86_64 package is automatically
added during dkml init on Windows. This makes DkML more consistent with opam
2.2.
The appropriate dkml-host-abi-windows_x86_64/windows_x86/... package is
automatically added during dkml init. The former dkml-abi switch variable
is now called dkml-host-abi, and is set by the new dkml-host-abi package.
Multiple target ABIs can be selected with, for example,
dkml-target-abi-darwin_arm64 when the host ABI is
dkml-host-abi-darwin_x86_64.
The msys2-clang64 package is automatically added during dkml init on
Windows. This makes DkML more consistent with opam 2.2.
The Bytecode installer, which was deprecated, has now been removed from the distribution.
The dkml init --system command no longer adds the following Opam global
variables. Instead, the presence of host-arch-x86_32 (etc.) is used for opam
filters in conf-withdkml.2 and conf-sqlite3.3.1+cpkgs, which makes DkML
more consistent with opam 2.2.
| Global Variable | Typical Value |
|---|---|
msystem | CLANG64 |
msystem-carch | x86_64 |
msystem-chost | x86_64-w64-mingw32 |
msystem-prefix | /clang64 |
mingw-chost | x86_64-w64-mingw32 |
mingw-prefix | /clang64 |
mingw-package-prefix | mingw-w64-clang-x86_64 |
| Package | From | To |
|---|---|---|
| opam | 2.2.0-alpha-20221228 | 2.2.0 |
| sqlite3 | 5.1.0+msvc | 5.2.0 |
| msys2 | 0.1.0 | 0.1.0+dkml |
| conf-pkg-config | 2+cpkgs | 3+cpkgs |
| dkml-host-abi-* (1) | 1 |
(1) - windows_x86_64 and the other DkML ABIs defined by dkml-c-probe| Package | What | Issue |
|---|---|---|
ocaml.4.14.2 | Backport: Linear-time closure computation | https://github.com/ocaml/ocaml/pull/12222 |

