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. Note that the table is divided into sections by the location of the language support: the first section includes core languages distributed with Emacs; the second section includes contributed languages that have not assigned copyright to FSF; and the third section includes languages distributed through the Emacs package system.

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
comint comint    
Coq coq    
CSS css ob-doc-css none
D D ob-doc-C D
Ditaa ditaa ob-doc-ditaa ditaa (bundled with Org-mode)
Dot (Graphviz) dot og-doc-dot dot
ebnf ebnf    
Emacs Lisp emacs-lisp   none
Forth forth   gforth
Fortran F90   fortran
Gnuplot gnuplot ob-doc-gnuplot gnuplot, gnuplot-mode
Haskell haskell   haskell, haskell-mode, inf-haskell, lhs2tex
Io io    
J J ob-doc-J J, j-mode
Java java   java
Javascript js   node.js
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 lisp, slime
Make makefile ob-doc-makefile none
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
Perl perl   perl, cperl-mode (optional)
Picolisp picolisp ob-doc-picolisp PicoLisp
PlantUML plantuml    
Processing processing    
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
Screen screen ob-doc-screen  
Sed sed    
shell shell   a shell
Shen shen   shen, shen-mode
SQL sql ob-doc-sql an RDBMS
SQLite sqlite ob-doc-sqlite SQLite, sqlite3, SQL mode
Stan stan ob-doc-stan Stan, Stan mode
Vala vala ob-doc-vala Vala
Language Identifier Documentation Requirements
Eukleides eukleides ob-doc-eukleides eukleides
Fomus fomus   fomus (music notation)
Groovy groovy    
Julia julia ob-julia-doc ess
Mathematica mathematica    
Mathomatic mathomatic ob-doc-mathomatic Mathomatic
OZ oz ob-doc-oz Mozart which includes a major mode
Stata stata ob-doc-stata Stata, ess-mode
Tcl tcl ob-doc-tcl tclsh
Emacs Package      
Language Identifier Documentation Requirements
Axiom axiom, spad ob-axiom on bitbucket axiom, OpenAxiom, or FriCAS, axiom-environment
HTML browser ob-browser on github PhantomJS, ob-browser.js
Neo4j cypher ob-cypher on github neo4j, cypher-mode
Elixir elixir ob-elixir on github elixir, Erlang
http request http ob-http on github cURL
iPython ipython ob-ipython on github ob-python
Kotlin kotlin ob-kotlin on github Kotlin, kotlin-mode
Lisp Flavored Erlang lfe ob-lfe on github lfe
MongoDB mongo ob-mongo on github mongoDB
Prolog prolog ob-prolog on github SWI Prolog
rec rec ob-rec.el on github GNU Recutils
Standard ML sml ob-sml.el on github Standard ML, sml-mode
Google Translate translate ob-translate on github google-translate
Typescript typescript ob-typescript on github node.js, typescript

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. To fetch a copy of this file, please clone Worg:

~$ git clone

You should find org-contrib/babel/ob-template.el.

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.



If you want to load a language in the contrib directory by specifying it in the org-babel-do-load-languages variable, then please follow these instructions. Otherwise, a language in the contrib directory must be explicitly required with e.g. (require 'ob-oz) after a path to the contrib directory has been added to 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.