Emacs mode for Stan.
Emacs Lisp Python Makefile Shell
Latest commit 45b8242 Oct 24, 2016 @jrnold jrnold bump version


Emacs support for Stan

Build Status License GPL 3

Example Stan file with font-lock

This repository contains several Emacs packages and tools to make editing Stan files easier.

  • stan-mode is a major mode for editing Stan files. Its current features include:

    • syntax highlighting
    • indentation
    • imenu support for blocks, variables, and user-defined functions.
  • stan-snippets: Adds Stan support for yasnippet. Yasnippet is a template system for Emacs. Snippets are defined for blocks, control structures, and all the built-in functions and distributions.

  • indent-stan-files: A shell script that uses stan-mode to indent a file. See its README.

  • stan-lang: The file stan_lang.json contains all keywords, functions (with their signatures and documentation) in the Stan modeling language. This is used to generate the keyword lists and snippets used by the modes. It could also be useful for developers designing tools for Stan, e.g. other editor modes.



The recommended way to install these packages is using the built-in package manager: package.el. These packages are available from MELPA. If you're not already using MELPA, follow its installation instructions.

You can then install the packages using the following commands:

M-x package-install [RET] stan-mode [RET]

M-x package-install [RET] stan-snippets [RET]

If the installation does not work, try refreshing the package list:

M-x package-refresh-contents [RET]

Or add the following to you init.el:

 (lambda (p)
   (unless (package-installed-p p)
     (package-install p)))
 '(stan-mode stan-snippets))


Another way to manage dependencies is to to use Cask. See its docs for an argument as to why to use Cask to manage your configuration.

Simply add the following to your Cask file:

(source melpa)
(depends-on "stan-mode")
(depends-on "stan-snippets")

and from the command line in the same directory as the Cask file use cask to install the packages,

$ cask install

See the Cask documentation for more information.



To use, add the following to your init.el file:

(require 'stan-mode)



To use, add the following to your init.el file:

(require 'stan-snippets)

To use yasnippet globally:

(yas-global-mode 1)

Else, to use yasnippet only for stan-mode:

(add-hook 'stan-mode-hook '(lambda () (yas-minor-mode)))

See the documenation for yasnippet for more information on using yasnippet-mode.

Auto Complete mode

stan-mode does not directly support autocomplete. However a dictionary compatible with autocomplete-mode is available for stan-mode. To use autocomplete with stan, download the stan-mode, and follow the autocomplete directions for using a major-mode dictionary.

Updating packages

To update stan-mode when a version of the Stan language comes out:

  1. Replace stan-lang/stan-functions-*.txt with the newest version from CmdStan.
  2. Build the emacs files
$ make
  1. Save and commit the changes
  2. Bump the version number of the emacs packages. For example, to bump to 8.0.0. This is different than the Stan language version.
$ ./update-versions.sh 8.0.0
  1. Tag the commit and push the tag
$ git tag v8.0.0
$ git push --tags


All packages are free software under the GPL v3.