Versions Compared


  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Added mentor for 'Clojure code optimizer'


If you are not a developer but have a good idea for a proposal, get in contact with relevant developers first.

Project Ideas


Predicate Dispatch

Brief Explanation: A considerable amount of work has been done towards a viable predicate dispatch implementation for Clojure. However quite a few more enhancements to core.match are required before it can be used for this purpose. The work should account for other Clojure dialects ClojureCLR / ClojureScript.

Expected Results: A usable implementation of predicate dispatch.

Knowledge Prerequisite: Familiarity with Clojure. Familiarity with Chambers / Chen efficient predicate dispatch paper and Luc Maranget's paper on compiling pattern match expressions into good decisions trees.

Skill Level: Medium

Mentor: David Nolen

cKanren extensions to core.logic

Brief Explanation: Adding constraint logic programming facilities to core.logic would widen the scope of problems that core.logic can be applied to - including predicate dispatch. We would like to adapt the cKanren extensions to core.logic with an eye for obvious improvements to the their design in terms of generality as well as performance.

Expected Results: core.logic with cKanren extensions.

Knowledge Prerequisite: Familiarity with Clojure. Familiarity with Chapter 3 of William Byrd's dissertation and the recent cKanren paper.

Skill Level: Medium to High

Mentor: David Nolen

Linter based on Ambrose's analyzer work



Lightweight Clojure editor, repl, and documentation browser ala

Brief explanation: Currently everyone using Overtone must setup a clojure environment and editor, but it would be great if people who are unfamiliar with software development and/or clojure (e.g. musicians, artists, etc...) could download a single application to easily experiment with pre-existing instruments, sequencers, samplers, fx-racks made for guitars or other external instruments, etc.  The app would let someone browse a built-in library of examples, evaluate code, experiment in a repl, open and save text files.  The or SuperCollider applications are examples of this kind of system.

This kind of app would probably be useful for other Clojure projects too, so as part of it there would probably be a number of general purpose elements that could be made available as standalone libraries.

Expected results: An app implemented with the seesaw gui library (and maybe upshot for the JavaFX webkit widget for documentation) with a simplistic text editor that syntax highlights clojure, allows for selecting and evaluating chunks of code, and a repl panel.

Knowledge Prerequisite: Familiarity with Clojure and a bit of swing or other GUI experience.

Mentor: Jeff Rose

Skill Level: Beginner / Intermediate


Node based GUI editor for synthesis and bus routing

Brief explanation: While programming synthesizers and setting up a mixing board system are great in Clojure, visual representations can be great for teaching, learning, and performance, because they represent the flow of audio and control data in a direct way that can be easier to follow than tracing a series of nested function calls.  It would be great if Overtone had a graphical editor similar to Max/MSP, which allowed someone to choose from a library of unit-generators (DSP functions) and then wire them up together.  The ugens in Overtone have extensive meta-data about their types, rates, functionality, and arguments, so this would primarily be a GUI programming and graphic design project.

This widget could also be useful for other projects that want to display or manipulate graph or tree structured data, so some of the underlying functionality could be made available as a separate library.

Expected results: A node editor widget implemented using a 2d scenegraph using Dave Ray's upshot library ( on top of JavaFX 2.  Synth designs could be loaded or saved by the widget.

Knowledge Prerequisite: Programming with Clojure, and ideally some experience using a node based editor (a couple evenings doing Max/MSP or PD tutorials would be sufficient).

Mentor: Jeff Rose

Skill Level: Beginner / Intermediate


Multi effects processor application for guitar, vocals, or any input instrument 

Brief explanation: Create a standalone application that any musician could download and use as a pure software effects processor on their computer.  The idea is to create a simple to use, open-source platform that lets people easily experiment with and contribute new FX to the application by writing effects synthesizers in Overtone.

Expected results: Implement a library of nice sounding audio effects using Overtone, and then package them up in a simple Swing application using seesaw so non-programmers could plug an instrument into their sound-card and easily apply a chain of effects to the audio.

Knowledge Prerequisite: Programming with Clojure, sufficient knowledge of audio DSP to research and implement a collection of audio effects.

Mentor: Jeff Rose

Skill Level: Intermediate / Advanced


Performance enhancements

Brief Explanation: ClojureScript has numerous areas where the performance can be dramatically improved. These include but are not limited to removing use of arguments in multiple arity function dispatch, adding persistent data structures, and using type inference. A benchmark suite similar to test.benchmark for tracking improvements and regressions would be desired, the benchmark suite should provide idiomatic JavaScript as the baseline.

Expected Results: Improved overall performance verified by a benchmark suite.

Knowledge Prerequisite: Familiarity with Clojure.

Skill Level: Medium

Mentor: David Nolen

Introspection support

Brief Explanation: ClojureScript currently has very limited introspection support. Currently it's impossible to view macroexpansion, to examine docstrings, examine vars or namespaces, etc.

Expected Results: Improved introspection facilities more in the line with those provided by Clojure.

Knowledge Prerequisite: Familiarity with Clojure.

Skill Level: Medium

Mentor: David Nolen

Debugger support

Brief Explanation: ClojureScript currently provides very little support for precise debugging. Source mapping would be an initial step. All the mature JavaScript runtimes provide APIs for stepping through JavaScript. A robust interface for integrating with these different APIs is desirable. A concrete implementation for Chromium or Node.js would be extremely useful to ClojureScript developers. An ambitious take on this project would be s-expr level stepping of ClojureScript code.

Expected Results: A clean interface for integrating with existing JavaScript debugging APIs. A concrete implementation for a popular JavaScript platform - Chromium, Node.js.

Knowledge Prerequisite: Familiarity with Clojure.

Skill Level: High

Mentor: David Nolen

Pluggable backend

Brief Explanation: The ClojureScript compiler is currently very JavaScript-centric. It would be beneficial to make the compiler pluggable. This would allow ClojureScript developers to easily target other platforms - Lua, Python, Java, etc.

Expected Results: A compiler that can easily be extended to generate source / bytecode for other languages.

Knowledge Prerequisite: Familiarity with Clojure.

Skill Level: Medium

Mentor: David Nolen