My name is James, and I work on the Firefox Developer Tools. I like to create things and write about technology.

A Prettier JavaScript Formatter

January 10, 2017

Today I am announcing prettier, a JavaScript formatter inspired by refmt with advanced support for language features from ES2017, JSX, and Flow.

Leaving Mozilla

December 13, 2016

Last week I was in Hawaii for a Mozilla work week. I saw many great friends, but I also kept faintly recognizing people without remembering how I knew them. Sometimes I even thought I knew them from other parts of my life. It made me realize just how much Mozilla has become part of my life.

Exploring Continuations: Resumable Exceptions

June 08, 2016

Today we're going to implement resumable exceptions. Common Lisp is known for this feature. Few other languages implement them, but I found an implementation for OCaml by (unsurprisingly) Kiselyov.

Implementing a Stepping Debugger in JavaScript

May 26, 2016

In my previous post I introduced Unwinder, a project which implements continuations (and stepping debuggers) in JavaScript. In this article I explain how the compiler is implemented.

What’s in a Continuation

May 17, 2016

Many people have heard the word “continuation” because it has something to do with node’s callback hell. I don’t think most people understand what continuations really are, though. They aren’t just a callback function used by async functions.


  • LLJS fork of LLJS that compiles to asm.js
  • nunjucks powerful templating system for javascript
  • outlet simple Lisp languange that compiles to javascript
  • dcpu-lisp static Lisp that compiles to DCPU-16 assembly code
  • shade terrible WebGL graphics engine
  • octoshot multiplayer WebGL 3d first person shooter
  • css-animations.js easily use CSS3 keyframe animations from javascript
  • dom3d 3d objects with purely 2d CSS transforms