Semantics and tools for JavaScript
JavaScript Haskell Coq Scheme Scilab Shell Python
Failed to load latest commit information.
Paper Examples Added output from type-checker. Dec 17, 2009
Redex typo May 29, 2012
coq Modules were successfully checked Jul 9, 2012
haskell tweaks to support language-ecmascript Jun 20, 2013
.gitignore LambdaJS in Coq May 25, 2012
AUTHORS Update AUTHORS Aug 9, 2012
LICENSE BSD3 May 15, 2012 renamed dir May 29, 2012


LambdaJS is small, tested, reduction semantics for JavaScript. For a quick introduction, see our blog post:

For a more technical introduction, see our ECOOP 2010 paper on LambdaJS:

  • coq/ contains our mechanized semantics in Coq. Tested with Coq 8.3 and 8.4 beta.

  • Redex/ contains our mechanized semantics in PLT Redex. Tested with Racket 5.2.

  • haskell/ contains an implementation of desugaring. Tested with GHC 7.0.4. This software uses packages available on Hackage.

  • DisableXHR/ contains an implementation of our safe-subset example. Tested with GHC 6.10.4. This tool requires the LambdaJS Haskell package to be built and installed first.

Semantics for ECMAScript 5

LambdaJS roughly models ECMAScript 3. The latest version of JavaScript, ECMAScript 5, is considerably more complex, so we decided to develop it from scratch. The following blog post describes S5, our semantics for ES5:

The code for S5 is also available: