Installation

The fastest way to get March is a prebuilt binary. You can also build from source with OCaml 5.3.0 + dune (managed with opam).


Prebuilt releases for darwin-arm64, linux-x86_64, and linux-aarch64 are published on the releases page. Each archive bundles march, forge, the standard library, and the C runtime sources.

curl -fsSL https://raw.githubusercontent.com/march-language/march/main/install.sh | sh

The installer downloads the latest release into ~/.march, verifies its checksum, and installs march and forge into ~/.march/bin. Add that directory to your PATH (the installer prints the exact line). Use MARCH_VERSION=nightly for the latest nightly or MARCH_VERSION=<tag> to pin a version.

The binaries are self-contained (macOS statically links blake3/zstd/brotli; Linux builds are static), so interpreting programs needs nothing extra. To use march --compile, install a C toolchain — clang + LLVM (macOS: xcode-select --install; Linux: e.g. clang llvm).

Switch between installed versions with forge:

forge toolchain install        # latest stable (or newest nightly)
forge toolchain use <version>  # activate an installed toolchain
forge toolchain list           # show installed versions

See the README for the manual-download alternative and details.


Prerequisites

Tool Version Purpose
opam 2.x OCaml package manager
OCaml 5.3.0 Set up via opam switch
dune 3.7+ Build system (installed by opam)
LLVM / clang 18+ Native code compilation
git any Clone the repository

macOS

brew install opam llvm
opam init --bare -y

Homebrew puts clang on your PATH automatically. LLVM 18+ is required; earlier versions may work but are untested.

Linux (Debian / Ubuntu)

sudo apt-get install -y opam clang-18 llvm-18-dev libllvm18
opam init --bare -y

For other distributions use your package manager to install opam and a recent clang / llvm-dev.


1. Clone

git clone https://github.com/march-language/march.git
cd march

2. Create the opam switch

March uses a dedicated opam switch pinned to OCaml 5.3.0. This keeps its dependencies isolated from other OCaml projects.

opam switch create march 5.3.0

This downloads and compiles OCaml — it takes a few minutes the first time.


3. Install dependencies

opam install . --deps-only -y

Key packages installed:

Package Purpose
menhir Parser generator
ppx_deriving Derivation macros (show, eq, …)
alcotest Test framework
qcheck-core Property-based tests
notty REPL TUI rendering

4. Build

dune build

This compiles everything: the compiler, the stdlib, the C runtime, the forge build tool, and the LSP server.


5. Verify

forge run examples/list_lib.march

Expected output:

range 1..10:   [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
length:        10
sum 1..10:     55
product 1..5:  120
max:           10
reversed:      [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
append [1..3] [4..6]: [1, 2, 3, 4, 5, 6]

6. Run tests (optional)

forge test

All tests should pass. The suite covers the parser, typechecker, evaluator, stdlib, and forge.


Installing forge to PATH (optional)

To use forge directly without a path prefix, install it after building:

dune install forge

This copies the binary to your opam switch’s bin directory, which is already on PATH. After this, forge commands work from anywhere:

forge run my_program.march
forge new my_project

Binary locations after build

_build/default/
├── bin/main.exe          # march compiler / interpreter
├── forge/bin/forge.exe   # forge build tool
└── lsp/bin/march_lsp.exe # LSP server (for editor integration)

Hello, March

Create hello.march:

mod Hello do
  fn main() do
    println("Hello, March!")
  end
end

Run it:

forge run hello.march
# Hello, March!

Troubleshooting

Error: No switch installed
Run opam switch march (or eval $(opam env --switch=march)) to activate the switch in your current shell.

clang: error: unknown target triple 'x86_64-unknown-linux-gnu'
Your LLVM version is too old. Install LLVM 18+.

dune build fails with missing menhir
Run opam install . --deps-only -y again — the switch may not have been active when you first ran it.

Tests fail on Linux with libffi errors

sudo apt-get install libffi-dev

Next Steps