Skip to content

bbatsov/neocaml

Repository files navigation

neocaml

MELPA MELPA Stable CI Sponsor

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.

Features

  • Tree-sitter based font-locking (4 levels) for .ml and .mli files
  • Tree-sitter based indentation with cycle-indent support
  • Navigation (beginning-of-defun, end-of-defun, forward-sexp, sentence movement with M-a/M-e)
  • Imenu with language-specific categories for .ml and .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), and comment-dwim (M-;)
  • Electric indentation on delimiter characters
  • opam file editing (neocaml-opam-mode) with font-lock, indentation, imenu, and opam lint integration (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 ocaml and ocaml-interface tree-sitter grammars via M-x neocaml-install-grammars
  • Compilation error regexp for M-x compile (errors, warnings, alerts, backtraces)
  • _build directory 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

Quick Start

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.

Funding

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:

Contributing

See CONTRIBUTING.md for development setup, debugging, and how to run tests. Architecture and design notes live in doc/DESIGN.md.

License

Copyright (c) 2025-2026 Bozhidar Batsov and contributors.

Distributed under the GNU General Public License, version 3 or later. See LICENSE for details.

About

A modern, TreeSitter-powered, Emacs package for programming in OCaml

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors