Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

Compose Programming Language

Compose is an experimental programming language. It aims to be:

  • teachable: minimize boilerplate and incidental complexity
  • scalable: work well from one liners to million line systems
  • modern: try not to ignore the myriad lessons we've learned in PL over the last fifty years
  • powerful: provide high-level and meta-programming capabilities
  • precise: sane semantics are king, minimize concessions to legacy

Compose also prioritizes a lot of things other programming languages don't even address as problems. For more details, read the goals and FAQ.


Work originally started on C0, the Compose Mark Zero compiler, written in Scala. The original plan was to make a batch compiler for a language similar to the final form of Compose (though with different syntax) and then use that to build an editor/compiler combo, which would work on the real language. But at some point I decided that was a bad idea.

Next, I started on an editor/compiler combo written in PureScript: PCE0. This allowed me to start tackling some of the thorny editor problems earlier, which I was comfortable with, having gotten so far down the road on the type system and compiler. But PureScript turned out to be too annoying to work with (for reasons detailed on the PC0 page). So I took off and nuked everything from orbit again.

I briefly detoured into an editor/compiler combo written in Reason, but abandoned before even making a single commit due to limitations of the tooling and a distaste for the incoherent mishmash of the Ocaml standard library with more web-focused APIs like Reason React.

Presently, I am working on an editor/compiler combo written in TypeScript: TSCE0. The goals here are the same as for PC0: start making progress on the major editor challenges and build the compiler slowly along the way.


Compose is being created by Michael Bayne Feel free to contact me if you like to talk about the utter insanity of trying to foist another programming language on the world.