Karya is a music sequencer.

Its main goal is to let you write a high level score which is then realized to expressive and idiomatic instrumental parts.

It uses its own score format. One way to look at it is a 2D language for expressing music along with an editor for that language. The score language has a built-in library of notation and has basic means for defining new notation, but more complicated notation is defined in Haskell. The idea is to have a standard library, but also be able to define notation specific to your score. The editor is graphical but also uses a Haskell REPL for configuration, automation, and extension. If you’re familiar with Amiga-style trackers, it looks somewhat similar, but fundamentally it’s closer to a programming language.

The primary backend is MIDI, though it can also produce lilypond if you restrict yourself to the subset of notation that can be translated to staff notation. It doesn’t record audio or host VSTs, but you can use a DAW to host VSTs and record or bounce tracks. You can sync with MTC and MMC to record live audio, but I haven’t tested that much yet. There is an offline synthesis backend, but it’s still in progress.

I develop on OS X. It should theoretically work on linux, and there is a JACK backend, but I haven’t done much testing there.

As far as I know, there are no other sequencers with similar goals and features, but if there are, I’d be interested in hearing about them.

Calligraphy is by 黃世昌 / Samson Huang.

Music, screenshots, examples



It’s source-only. Since it uses a REPL, a binary distribution wouldn’t make much sense.




INSTALL has the usual build instructions. The quickstart covers basic configuration. This is the closest there is to “how to do it” documentation, the rest is reference style and maybe hard to get a big picture from.

For the purposes of documentation, there are several major layers:

more details

Don’t hesitate to look at haddock documentation or the source. Since using karya probably involves writing code that interacts with the internal APIs, you’ll need to be familiar with at least some of the implementation. Sometimes the documentation isn’t exported as haddock, so if the haddock seems sparse try the “source” link. Whenever possible, I try to keep documentation in the haddock, since it’s easier to keep up to date if it’s next to the code that implements it.

My blog has notes I have taken during development. It’s mostly just notes to myself.

Karya is divided into several layers, corresponding to the top level directories in the source tree:

The main program is called seq, but there are a few auxiliary programs: