By default, a workspace has only one build context named default which corresponds to the environment, in which dune is run. You can define more contexts by writing a dune-workspace file.

You can point Dune to an explicit dune-workspace file with the --workspace option. For instance, it’s good practice to write a dune-workspace.dev in your project with all the OCaml versions your projects support, so developers can test that the code builds with all OCaml versions by simply running:

$ dune build --workspace dune-workspace.dev @all @runtest

The dune-workspace file uses the S-expression syntax. This is what a typical dune-workspace file looks like:

(lang dune 3.14)
(context (opam (switch 4.07.1)))
(context (opam (switch 4.08.1)))
(context (opam (switch 4.11.1)))

The rest of this section describe the stanzas available.

Note that an empty dune-workspace file is interpreted the same as one containing exactly:

(lang dune 3.2)
(context default)

This allows you to use an empty dune-workspace file to mark the root of your project.