Babel: Languages

Table of Contents

Babel Languages

Babel supports a growing number of programming languages. Table 1 lists supported languages, indicates how they are identified in Babel, and provides links to documentation and to other software required for full support.

Table 1: Languages supported by Babel.
Language Identifier Documentation Requirements
ABC abc ob-doc-abc abcm2ps, abc-mode
Asymptote asymptote ob-doc-asymptote asymptote, asy-mode
Awk awk ob-doc-awk awk
C C ob-doc-C none
C++ cpp ob-doc-C none
Calc calc   none
Clojure clojure ob-doc-clojure Clojure, Clojure Mode, CIDER, Leiningen
CSS css ob-doc-css none
D D ob-doc-D D
Ditaa ditaa ob-doc-ditaa ditaa (bundled with Org-mode)
Dot (Graphviz) dot og-doc-dot dot
Emacs Lisp emacs-lisp   none
Eukleides eukleides (contrib) ob-doc-eukleides eukleides
Fomus fomus (contrib)   fomus (music notation)
Forth forth   gforth
Fortran F90   fortran
Gnuplot gnuplot ob-doc-gnuplot gnuplot, gnuplot-mode
Groovy groovy (contrib)   Emacs-Groovy-Mode
Haskell haskell   haskell, haskell-mode, inf-haskell, lhs2tex
J J ob-doc-J J, j-mode
Java java   java
Javascript js   node.js
Julia julia (contrib) ob-julia-doc ess
LaTeX latex ob-doc-latex latex, auctex, reftex
Ledger ledger ob-doc-ledger ledger
Lilypond ly ob-doc-lilypond lilypond music notation
Lisp lisp ob-doc-lisp slime
Make makefile ob-doc-makefile none
Mathomatic mathomatic (contrib) ob-doc-mathomatic Mathomatic
Matlab matlab ob-doc-octave-matlab matlab, matlab.el
Maxima max ob-doc-maxima maxima, Common Lisp, gnuplot (optional)
Mscgen mscgen ob-doc-mscgen Mscgen
Objective Caml ocaml   ocaml, tuareg-mode
Octave octave ob-doc-octave-matlab octave
Org org   none
OZ oz (contrib) ob-doc-oz Mozart which includes a major mode
Perl perl   perl, cperl-mode (optional)
Picolisp picolisp ob-doc-picolisp PicoLisp
PlantUML plantuml    
Python python ob-doc-python python, python-mode (optional)
R R ob-doc-R R, ess-mode, tikzDevice
Ruby ruby   ruby, irb, ruby-mode, inf-ruby mode
Sass sass   sass, sass-mode
Scala scala   scala
Scheme scheme   none
Shen shen   shen
shell sh   a shell
SQL sql ob-doc-sql an RDBMS
SQLite sqlite ob-doc-sqlite SQLite, sqlite3, SQL mode
Stata stata ob-doc-stata Stata, ess-mode
Tcl tcl (contrib) ob-doc-tcl tclsh

Note: Many languages in Table 1 still require documentation. A template is provided in the worg git repository for the addition of language documentation.

Configure active languages

To add support for a particular language to your Babel installation first make sure that the requirements of the language are met, then you may customize the org-babel-load-languages variable, update the variable's value manually by adding1

(lang . t)

to its definition. A line like the following to explicitly remove support for a language.

(lang . nil)

Here is an example manual configuration of this variable, which enables support for R, and disables support for emacs-lisp.

;; active Babel languages
 '((R . t)
   (emacs-lisp . nil)

Develop support for new languages

The core Babel functions (viewing, export, tangling, etc…) are language agnostic and will work even for languages that are not explicitly supported. Explicit language-specific support is required only for evaluation of code blocks in a language.

Babel is designed to be easily extended to support new languages. Language support is added by defining language-specific functions using a simple naming convention. The full suite of possible language specific functions need not be implemented all at once, but rather it is possible (and encouraged) to develop language-specific functionality in an incremental fashion – Babel will make use of those functions which are available, and will fail gracefully when functionality has not yet been implemented.

There is a short Emacs Lisp template (ob-template.el) which can be used as a starting point for implementing support for new languages. Developers are encouraged to read the Org-mode contribution instructions in the hope that the language support can be included into the Org-mode core.



Languages in the contrib directory are marked with "(contrib)" in the "Identifier" column of the table. Languages in the contrib directory are not loadable through the org-babel-do-load-languages variable, but rather must be explicitly required (e.g. (require 'ob-oz)) after the contrib directory has been added to your load path.

Documentation from the website (either in its HTML format or in its Org format) is licensed under the GNU Free Documentation License version 1.3 or later. The code examples and css stylesheets are licensed under the GNU General Public License v3 or later.