{"id":13466957,"url":"https://github.com/ocaml/dune","last_synced_at":"2025-04-10T10:47:14.394Z","repository":{"id":37326461,"uuid":"72368050","full_name":"ocaml/dune","owner":"ocaml","description":"A composable build system for OCaml.","archived":false,"fork":false,"pushed_at":"2025-04-10T08:44:35.000Z","size":98164,"stargazers_count":1715,"open_issues_count":1035,"forks_count":430,"subscribers_count":40,"default_branch":"main","last_synced_at":"2025-04-10T09:41:01.766Z","etag":null,"topics":["build","dune","jbuilder","ocaml","opam"],"latest_commit_sha":null,"homepage":"https://dune.build/","language":"OCaml","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ocaml.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGES.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.md","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-10-30T18:42:23.000Z","updated_at":"2025-04-10T08:30:28.000Z","dependencies_parsed_at":"2024-05-15T14:11:37.738Z","dependency_job_id":"c3fc3493-b9bb-4207-a3ee-0735d9b36fba","html_url":"https://github.com/ocaml/dune","commit_stats":{"total_commits":9029,"total_committers":248,"mean_commits":36.40725806451613,"dds":0.7688559087385093,"last_synced_commit":"557e5089782b2441a5b4dd9198d4ebff11299d85"},"previous_names":[],"tags_count":151,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ocaml%2Fdune","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ocaml%2Fdune/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ocaml%2Fdune/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ocaml%2Fdune/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ocaml","download_url":"https://codeload.github.com/ocaml/dune/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248201892,"owners_count":21064214,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["build","dune","jbuilder","ocaml","opam"],"created_at":"2024-07-31T15:00:51.752Z","updated_at":"2025-04-10T10:47:14.373Z","avatar_url":"https://github.com/ocaml.png","language":"OCaml","readme":"![Dune][logo]\n\n# A Composable Build System for OCaml\n\n[![Main Workflow][workflow-badge]][workflow]\n[![Release][release-badge]][release]\n[![Coverage][coverage-badge]][coverage]\n[![License][license-badge]][license]\n[![Contributors][contributors-badge]][contributors]\n\n[logo]: doc/assets/imgs/dune_logo_459x116.png\n[workflow]: https://github.com/ocaml/dune/actions/workflows/workflow.yml\n[workflow-badge]: https://img.shields.io/github/actions/workflow/status/ocaml/dune/workflow.yml?label=CI\u0026logo=github\n[release]: https://github.com/ocaml/dune/releases/latest\n[release-badge]: https://img.shields.io/github/v/release/ocaml/dune?label=release\n[coverage]: https://coveralls.io/github/ocaml/dune\n[coverage-badge]: https://img.shields.io/coveralls/github/ocaml/dune?logo=coveralls\n[license]: https://github.com/ocaml/dune/blob/main/LICENSE.md\n[license-badge]: https://img.shields.io/github/license/ocaml/dune\n[contributors]: https://github.com/ocaml/dune/graphs/contributors\n[contributors-badge]: https://img.shields.io/github/contributors-anon/ocaml/dune\n\nDune is a build system for OCaml. It provides a consistent experience and takes\ncare of the low-level details of OCaml compilation. You need only to provide a\ndescription of your project, and Dune will do the rest.\n\nDune implements a scheme that's inspired from the one used inside Jane Street\nand adapted to the open source world. It has matured over a long time and is\nused daily by hundreds of developers, meaning it's highly tested and productive.\n\nDune comes with a [manual][manual]. If you want to get started without reading\ntoo much, look at the [quick start guide][quick-start] or watch [this\nintroduction video][video].\n\nThe [example][example] directory contains examples of projects using Dune.\n\n[manual]: https://dune.readthedocs.io/en/latest/\n[quick-start]: https://dune.readthedocs.io/en/latest/quick-start.html\n[example]: https://github.com/ocaml/dune/tree/main/example\n[merlin]: https://github.com/ocaml/merlin\n[opam]: https://opam.ocaml.org\n[issues]: https://github.com/ocaml/dune/issues\n[discussions]: https://github.com/ocaml/dune/discussions\n[dune-release]: https://github.com/ocamllabs/dune-release\n[video]: https://youtu.be/BNZhmMAJarw\n\n# How does it work?\n\nDune reads project metadata from `dune` files, which are static files with a\nsimple S-expression syntax. It uses this information to setup build rules,\ngenerate configuration files for development tools such as [Merlin][merlin],\nhandle installation, etc.\n\nDune itself is fast, has very little overhead, and supports parallel builds on\nall platforms. It has no system dependencies. OCaml is all you need to build\nDune and packages using Dune.\n\nIn particular, one can install OCaml on Windows with a binary installer and then\nuse only the Windows Console to build Dune and packages using Dune.\n\n# Strengths\n\n## Composable\n\nDune is composable, meaning that multiple Dune projects can be arranged\ntogether, leading to a single build that Dune knows how to execute. This allows\nfor monorepos of projects.\n\nDune makes simultaneous development on multiple packages a trivial task.\n\n## Gracefully Handles Multi-Package Repositories\n\nDune knows how to handle repositories containing several packages. When building\nvia [opam][opam], it is able to correctly use libraries that were previously\ninstalled, even if they are already present in the source tree.\n\nThe magic invocation is:\n\n```console\n$ dune build --only-packages \u003cpackage-name\u003e @install\n```\n## Build Against Several Configurations at Once\n\nDune can build a given source code repository against several configurations\nsimultaneously. This helps maintaining packages across several versions of\nOCaml, as you can test them all at once without hassle.\n\nIn particular, this makes it easy to handle\n[cross-compilation][cross-compilation]. This feature requires [opam][opam].\n\n[cross-compilation]: https://dune.readthedocs.io/en/latest/cross-compilation.html\n\n# Installation\n\n## Requirements\n\nDune requires OCaml version 4.08.0 to build itself and can build OCaml projects\nusing OCaml 4.02.3 or greater.\n\n## Installation\n\nWe recommended installing Dune via the [opam package manager][opam]:\n\n```console\n$ opam install dune\n```\n\nIf you are new to opam, make sure to run `eval $(opam config env)` to make\n`dune` available in your `PATH`. The `dune` binary is self-contained and\nrelocatable, so you can safely copy it somewhere else to make it permanently\navailable.\n\nYou can also build it manually with:\n\n```console\n$ make release\n$ make install\n```\n\nIf you do not have `make`, you can do the following:\n\n```console\n$ ocaml boot/bootstrap.ml\n$ ./dune.exe build -p dune --profile dune-bootstrap\n$ ./dune.exe install dune\n```\n\nThe first command builds the `dune.exe` binary. The second builds the additional\nfiles installed by Dune, such as the *man* pages, and the last simply installs\nall of that on the system.\n\n**Please note**: unless you ran the optional `./configure` script, you can\nsimply copy `dune.exe` anywhere and it will just work. `dune` is fully\nrelocatable and discovers its environment at runtime rather than hard-coding it\nat compilation time.\n\n# Support\n\n\n[![Issues][issues-badge]][issues]\n[![Discussions][discussions-badge]][discussions]\n[![Discuss OCaml][discuss-ocaml-badge]][discuss-ocaml]\n[![Discord][discord-badge]][discord]\n\nIf you have questions or issues about Dune, you can ask in [our GitHub\ndiscussions page][discussions] or [open a ticket on GitHub][issues].\n\n[discussions]: https://github.com/ocaml/dune/discussions\n[discussions-badge]: https://img.shields.io/github/discussions/ocaml/dune?logo=github\n[issues]: https://github.com/ocaml/dune/issues\n[issues-badge]: https://img.shields.io/github/issues/ocaml/dune?logo=github\n[discuss-ocaml]: https://discuss.ocaml.org\n[discuss-ocaml-badge]: https://img.shields.io/discourse/topics?server=https%3A%2F%2Fdiscuss.ocaml.org%2F\n[discord]: https://discord.com/invite/cCYQbqN\n[discord-badge]: https://img.shields.io/discord/436568060288172042?logo=discord\n","funding_links":[],"categories":["OCaml","OCaml (14)","\u003ca name='Repositories'\u003e\u003c/a\u003eRepositories","Package Management","\u003ca name=\"OCaml\"\u003e\u003c/a\u003eOCaml"],"sub_categories":["\u003ca name='Tooling'\u003e\u003c/a\u003eTooling"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Focaml%2Fdune","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Focaml%2Fdune","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Focaml%2Fdune/lists"}