Bootstrapping a Project with Dune

Dune is recommended for bootstrapping projects using dune init. If opam or dune are not installed, please see Up and Running with OCaml.

dune init --help

dune init {library,executable,test,project} NAME [PATH] initialize a new dune component of the specified kind, named NAME, with fields determined by the supplied options.

As shown above, dune init accepts a kind, NAME, and optional PATH to scaffold new code. Let's try it out:

dune init project hello ~/src/ocaml-projects

Success: initialized project component named hello

In the above example, we use:

  • "project" as the kind
  • "hello" as the name, and
  • "~/src/ocaml-projects" as the path to generate the content in

The project kind creates a library in ./lib, an executable in ./bin, and links them together in bin/dune. Additionally, the command creates a test executable and an opam file.

tree ~/src/ocaml-projects/hello/

/home/user/src/ocaml-projects/hello/
├── bin
│   ├── dune
│   └── main.ml
├── hello.opam
├── lib
│   └── dune
└── test
    ├── dune
    └── hello.ml

At this point, you can build the project and run the binary:

cd /home/user/src/ocaml-projects/hello/
dune exec bin/main.exe

Hello, world!

Thus, dune init can rapidly scaffold new projects, with minimal content. It can also be used to add components (kinds) incrementally to existing projects.

Various community projects offer more comprehensive project scaffolding than dune as well. The following projects are not formally supported by the OCaml Platform, but may be of interest to the reader:

Help Improve Our Documentation

All OCaml docs are open source. See something that's wrong or unclear? Submit a pull request.

Contribute