neocaml is a new Emacs package for programming in
OCaml. Built on
Tree-sitter, it provides major
modes for editing OCaml (.ml) and OCaml Interface (.mli) files with
font-locking, indentation, navigation, and toplevel (REPL) integration.
Beyond OCaml source code, neocaml also supports key parts of the OCaml
ecosystem: dune build files,
opam package definitions,
OCamllex lexer definitions (.mll),
Menhir parser definitions (.mly),
and cram test
files (.t) -- each with a dedicated major mode.
You can also view compiled OCaml artifacts (.cmi, .cmo, .cmx, etc.)
directly in Emacs via ocamlobjinfo.
It's also as cool as Neo from "The Matrix". ;-)
Tip
For detailed configuration, usage guides, and migration help, see the full documentation.
- Tree-sitter based font-locking (4 levels) for
.mland.mlifiles - Tree-sitter based indentation with cycle-indent support
- Navigation (
beginning-of-defun,end-of-defun,forward-sexp, sentence movement withM-a/M-e) - Imenu with language-specific categories for
.mland.mli - Toggling between implementation and interface via
ff-find-other-file(C-c C-a) - OCaml toplevel (REPL) integration (
neocaml-repl) - Comment support:
fill-paragraph(M-q), comment continuation (M-j), andcomment-dwim(M-;) - Electric indentation on delimiter characters
- opam file editing (
neocaml-opam-mode) with font-lock, indentation, imenu, andopam lintintegration (flymake and flycheck) - dune file editing (
neocaml-dune-mode) for dune, dune-project, and dune-workspace files - dune build commands (
neocaml-dune-interaction-mode) -- build, test, clean, promote, fmt, exec (with watch mode via prefix arg) - OCamllex file editing (
neocaml-ocamllex-mode) with font-lock, indentation, imenu, and OCaml language injection (Emacs 30+) - Menhir file editing (
neocaml-menhir-mode) with font-lock, indentation, imenu, and OCaml language injection (Emacs 30+) - Cram test file editing (
neocaml-cram-mode) with font-lock for commands, output, modifiers, and prose - Easy installation of
ocamlandocaml-interfacetree-sitter grammars viaM-x neocaml-install-grammars - Compilation error regexp for
M-x compile(errors, warnings, alerts, backtraces) _builddirectory awareness (offers to switch to source when opening build artifacts)- Eglot integration (with ocaml-eglot support)
- Debugging via dape + ocamlearlybird (bytecode)
- Prettify-symbols for common OCaml operators
neocaml is available on MELPA:
(use-package neocaml
:ensure t)If the required tree-sitter grammars are not installed, run
M-x neocaml-install-grammars. Eglot is auto-configured - just run
M-x eglot in an OCaml buffer (requires
ocaml-lsp-server).
See the documentation for alternative installation methods and detailed configuration.
While neocaml is free software and will always be, the project would benefit from some funding. Consider supporting its ongoing development if you find it useful.
You can support the development of neocaml via:
See CONTRIBUTING.md for development setup, debugging, and how to run tests. Architecture and design notes live in doc/DESIGN.md.
Copyright (c) 2025-2026 Bozhidar Batsov and contributors.
Distributed under the GNU General Public License, version 3 or later. See LICENSE for details.