Welcome to Dune’s Documentation!¶
Getting Started and Core Concepts
- Overview
- Quickstart
- Install Dune
- Initializing Projects
- Building a Hello World Program From Scratch
- Building a Hello World Program Using Lwt
- Building a Hello World Program Using Core and Jane Street PPXs
- Defining a Library Using Lwt and
ocaml-re
- Building a Hello World Program in Bytecode
- Setting the OCaml Compilation Flags Globally
- Using Cppo
- Defining a Library with C Stubs
- Defining a Library with C Stubs using
pkg-config
- Using a Custom Code Generator
- Defining Tests
- Building a Custom Toplevel
- Stanza Reference
- dune-project
- accept_alternative_dune_file_name
- cram
- dialect
- executables_implicit_empty_intf
- expand_aliases_in_sandbox
- explicit_js_mode
- formatting
- generate_opam_files
- implicit_transitive_deps
- name
- opam_file_location
- package
- subst
- use_standard_c_and_cxx_flags
- using
- version
- wrapped_executables
- map_workspace_root
- warnings
- dune
- alias
- cinaps
- copy_files
- coq.theory
- data_only_dirs
- deprecated_library_name
- dirs
- documentation
- env
- executable
- executables
- external_variant
- foreign_library
- generate_sites_module
- ignored_subdirs
- include
- include_subdirs
- install
- jbuild_version
- library
- mdx
- menhir
- ocamllex
- ocamlyacc
- plugin
- rule
- subdir
- test
- tests
- toplevel
- vendored_dirs
- dune-workspace
- config
- dune-project
- Command-Line Interface
- Initializing Components
- Finding the Root
- Interpretation of Targets
- Finding External Libraries
- Running Tests
- Watch Mode
- Launching the Toplevel (REPL)
- Restricting the Set of Packages
- Distributing Projects
- dune subst
- Custom Build Directory
- Installing a Package
- Querying Merlin Configuration
- Running a Coq Toplevel
How-to Guides
- How to Set up Automatic Formatting
- How to Generate Opam Files from
dune-project
- Cross-Compilation
- Dealing with Foreign Libraries
- Generating Documentation
- How to Load Additional Files at Runtime
- Instrumentation
- JavaScript Compilation With Js_of_ocaml
- JavaScript Compilation With Melange
- Toplevel Integration
- Virtual Libraries & Variants
- Writing and Running Tests
- Running Tests
- Inline Tests
- Inline Expectation Tests
- Running a Subset of the Test Suite
- Running Tests in Bytecode or JavaScript
- Specifying Inline Test Dependencies
- Passing Special Arguments to the Test Runner
- Passing Special Arguments to the Test Executable
- Using Additional Libraries in the Test Runner
- Changing the Flags of the Linking Step of the Test Runner
- Defining Your Own Inline Test Backend
- Custom Tests
- Cram Tests
- How to Bundle Resources
Reference Guides
- Lexical Conventions
- Ordered Set Language
- Boolean Language
- Predicate Language
- Library Dependencies
- User Actions
- Foreign Sources, Archives, and Objects
- Command Line Interface
- Preprocessing Specification
- Packages
- Findlib Integration
- Aliases
- Scopes
- Variables
- Dependency Specification
- OCaml Flags
- Sandboxing
- Locks
- Diffing and Promotion
- Package Specification
- Coq
- Dune Cache
- Dune Libraries
- Dune RPC
Advanced topics
Miscellaneous
- FAQ
- Why Do Many Dune Projects Contain a
Makefile
? - How to Add a Configure Step to a Dune Project
- Can I Use
topkg
with Dune? - How Do I Publish My Packages with Dune?
- Where Can I Find Some Examples of Projects Using Dune?
- What is Jenga?
- How to Make Warnings Non-Fatal
- How to Turn Specific Errors into Warnings
- How to Display the Output of Commands as They Run
- How Can I Generate an
mli
File From anml
File - How Can I Build a Single Library?
- Files and Directories Whose Names Begin with “.” (Period) are Ignored by
source_tree
- How Can I Write Inline Tests in a Package Without my Users Needing to Install
ppx_inline_test
?
- Why Do Many Dune Projects Contain a
- Goal of Dune
- Working on the Dune Codebase