# Install dune with Homebrew, apk, MacPorts, Nix, pacman, dnf

Composable build system for OCaml. Version 3.24.1 via Homebrew; verified 2026-07-21. Also installable with nix: nix profile install nixpkgs#dune.

## Install

```sh
sudo av install brew:dune
```

Additional install commands:

### macOS

- Homebrew (100%):

```sh
brew install dune
```

  Evidence: local Homebrew formula metadata

- MacPorts (94%):

```sh
sudo port install dune
```

  Evidence: MacPorts ports tree: shells/dune/Portfile from https://api.github.com/repos/macports/macports-ports/git/trees/master?recursive=1

### Linux

- apk (92%):

```sh
sudo apk add dune
```

  Evidence: Alpine Linux edge package indexes: dune from https://dl-cdn.alpinelinux.org/alpine/edge/community/x86_64/APKINDEX.tar.gz

- Nix (92%):

```sh
nix profile install nixpkgs#dune
```

  Evidence: nixpkgs package indexes: pkgs/by-name/du/dune/package.nix from https://api.github.com/repos/NixOS/nixpkgs/git/trees/master?recursive=1

- pacman (92%):

```sh
sudo pacman -S dune
```

  Evidence: Arch Linux sync databases: dune from https://geo.mirror.pkgbuild.com/extra/os/x86_64/extra.db.tar.gz

- dnf (92%):

```sh
sudo dnf install ocaml-dune
```

  Evidence: Fedora Rawhide package metadata: ocaml-dune from https://dl.fedoraproject.org/pub/fedora/linux/development/rawhide/Everything/x86_64/os/repodata/07190dc5ae9f35ae73866675fed6d95fe6e8d9fe22c9d7cdf85862cb2ed24a4c-primary.xml.zst

## Package facts

- **Package key:** brew:dune
- **Package manager:** Homebrew
- **Version:** 3.24.1
- **Source summary:** Composable build system for OCaml
- **Homepage:** <https://dune.build/>
- **Repository:** <https://github.com/ocaml/dune>
- **Last updated:** 2026-07-21T09:31:35Z
- **Generated:** 2026-08-03T19:37:03+00:00

## Executables

- dune (alias)

## Install behavior

- Bottle: not available

## Freshness

- Page generated: 2026-08-03
- Package-manager version: 3.24.1
## Project history and usage

Dune is the dominant build system for OCaml projects, with support for OCaml, Reason, and Coq workflows. Its significance is that it standardized a large part of OCaml package building around declarative `dune`, `dune-project`, and `dune-workspace` files rather than per-project build scripts.

### Project history

Dune began as jbuilder, a build system derived from ideas used inside Jane Street and adapted for open-source OCaml projects. The upstream README still frames Dune as inspired by Jane Street's internal build scheme and matured through daily use by hundreds of developers.

The project was renamed from jbuilder to Dune during the 1.x era. The Dune project documented a staged deprecation of the `jbuilder` binary and `jbuild` files, with automatic `dune upgrade` support to migrate projects to `dune` files and `dune-project` metadata.

Dune's public repository is maintained under the OCaml GitHub organization. GitHub metadata records the repository as created in 2016, with OCaml as the main language, MIT licensing, and ongoing 3.x releases through 2026.

### Adoption history

Dune adoption spread through the OCaml packaging ecosystem because opam packages could use a common build invocation, and Dune itself documents recommended package builds such as `dune build -p name -j jobs` and `dune runtest -p name -j jobs`.

The package is distributed across Homebrew, Alpine, Fedora, MacPorts, Nix, and Arch, reflecting its role as a workstation and CI prerequisite for building many OCaml packages outside opam-only environments.

### How it is used

Typical users write `dune` files with S-expression stanzas and let Dune generate build rules, installation metadata, and editor-tool configuration. Dune also supports workspaces, multi-package repositories, multiple build contexts, tests, documentation targets, and cross-compilation workflows.

For package managers, the important interface is the `dune` executable plus the conventional project files it understands. The installed tool is often needed not because users run Dune directly as an application, but because downstream OCaml packages declare Dune as their build system.

### Why package nerds care

Dune is package-nerd important because it turned OCaml builds from a patchwork of ocamlbuild, oasis, makefiles, and custom scripts into a largely uniform package-manager target. A formula for Dune unlocks many other formulae.

Its jbuilder-to-dune migration is also a useful packaging case study: upstream kept compatibility for old names, emitted warnings, and shipped an upgrader, giving distributions and opam packages a path away from historical build files without a flag day.

### Timeline

- 2016: The public GitHub repository now used for Dune is created.
- 2018: Dune 1.0 is announced in the OCaml community after the jbuilder period.
- 2019: Dune enters the second stage of jbuilder deprecation and adds `dune upgrade` migration support.
- 2026: Dune 3.24.0 is published, showing continued active development.

### Related projects

- opam is closely related because Dune's recommended package build commands are designed for opam packaging.
- Merlin is related because Dune generates editor-tool configuration for OCaml development.
- Coq and Reason are related user communities called out in the existing package curation tags and supported by the Dune ecosystem.

### Sources

- <https://raw.githubusercontent.com/ocaml/dune/main/README.md documents Dune's purpose, Jane Street inspiration, project files, workspace features, opam-oriented installation, and build behavior.>
- <https://dune.build/blog/second-step-deprecation/ documents the jbuilder deprecation, `dune upgrade`, and migration of `jbuild` files to Dune files.>
- <https://api.github.com/repos/ocaml/dune documents repository creation, language, license, topics, and public activity.>
- <https://api.github.com/repos/ocaml/dune/releases documents recent 3.x release history.>


## Security Notes

generalized runtime or code generation signal.

- **Geiger risk:** yellow / medium
- generalized runtime or code generation signal


## Configuration and credential file locations

These source-backed paths show where this package keeps local settings or durable credentials. Automic Vault can use them as review targets for secret scanning, migration, and command approval.


## Configuration files

- Unix: dune, dune-project, dune-workspace
## Other Package-Manager Records

- Nix - dune: normalized package name match | nixpkgs package indexes: pkgs/by-name/du/dune/package.nix from https://api.github.com/repos/NixOS/nixpkgs/git/trees/master?recursive=1
- apk - dune - 3.22.2-r2: normalized package name match | Alpine Linux edge package indexes: dune from https://dl-cdn.alpinelinux.org/alpine/edge/community/x86_64/APKINDEX.tar.gz | Composable build system for OCaml (formerly Jbuilder) | https://dune.build/
- apk - dune-build-info - 3.22.2-r2: normalized package name match | Alpine Linux edge package indexes: dune-build-info from https://dl-cdn.alpinelinux.org/alpine/edge/community/x86_64/APKINDEX.tar.gz | Embed build information inside executables | https://dune.build/
- apk - dune-configurator - 3.22.2-r2: normalized package name match | Alpine Linux edge package indexes: dune-configurator from https://dl-cdn.alpinelinux.org/alpine/edge/community/x86_64/APKINDEX.tar.gz | System config helper for the Dune OCaml build system | https://dune.build/
- apk - dune-doc - 3.22.2-r2: normalized package name match | Alpine Linux edge package indexes: dune-doc from https://dl-cdn.alpinelinux.org/alpine/edge/community/x86_64/APKINDEX.tar.gz | Composable build system for OCaml (formerly Jbuilder) (documentation) | https://dune.build/
- apk - dune-emacs - 3.22.2-r2: normalized package name match | Alpine Linux edge package indexes: dune-emacs from https://dl-cdn.alpinelinux.org/alpine/edge/community/x86_64/APKINDEX.tar.gz | Emacs plugins for dune | https://dune.build/
- apk - ocaml-xdg - 3.22.2-r2: normalized package name match | Alpine Linux edge package indexes: ocaml-xdg from https://dl-cdn.alpinelinux.org/alpine/edge/community/x86_64/APKINDEX.tar.gz | XDG Base Directory Specification support for OCaml | https://dune.build/
- dnf - ocaml-dune - 3.24.1-1.fc45: normalized package name match | Fedora Rawhide package metadata: ocaml-dune from https://dl.fedoraproject.org/pub/fedora/linux/development/rawhide/Everything/x86_64/os/repodata/07190dc5ae9f35ae73866675fed6d95fe6e8d9fe22c9d7cdf85862cb2ed24a4c-primary.xml.zst | Composable build system for OCaml and Reason | https://dune.build
- pacman - dune - 3.24.1-1: normalized package name match | Arch Linux sync databases: dune from https://geo.mirror.pkgbuild.com/extra/os/x86_64/extra.db.tar.gz | A composable build system for OCaml (formerly jbuilder) | https://github.com/ocaml/dune
- MacPorts - dune: normalized package name match | MacPorts ports tree: shells/dune/Portfile from https://api.github.com/repos/macports/macports-ports/git/trees/master?recursive=1


## Combined YAML source

View the package source record on GitHub. [combined/dune.yml](https://github.com/mxcl/pkgdb/blob/main/combined/dune.yml)


## Sources

- pkg.so package database
- Geiger risk classifier
- curated configuration and credential file locations
- curated package history
- pkgdb category and tag curation
- external package-manager database matches
- cross-ecosystem install command graph
