Apparatus is a hybrid graphics editor and programming environment for creating interactive diagrams.

The Apparatus Editor runs in the browser and interactive diagrams created with Apparatus can be shared and embedded on the web (coming soon).

Apparatus is free, open-source software.

Launch Apparatus Editor


Joshua Horowitz
Paula Te
Potted Plant
Bret Victor
Quadradic Bezier
Matthias Graf
Matthias Graf
Matthias Graf
Toby Schachman
Arm Linkage
Toby Schachman
Toby Schachman
Toby Schachman
Bret Victor
Toby Schachman
Color Picker
Toby Schachman
Bar Chart
Toby Schachman
Cartesian Plot
Toby Schachman


1. Make a Face

2. Make a Clock

3. Make a Color Picker

4. Make a Bar Chart

5. Make a Plot

6. Make a Polygon


Editor Interface

Javascript in Expressions

One-liners will be evaluated.

4 + 4

If you have a multi-line expression, use return at the end.

var x = 32;
return x * x;

All of the javascript Math constants and methods are in scope.

abs(-3) + sin(PI)

Additionally, the constant TAU (2*PI) is in scope.

cos(TAU / 6)

A color utility function rgba(r, g, b, a) is in scope.

rgba(1.0, 0.5, 0.5, 0.5)
"rgba(255, 128, 128, 0.5)"

Use spread to create spreads.

Create a range:

spread(0, 5)
0, 1, 2, 3, 4

Create a range with an increment:

spread(0, 5, 0.5)
0, 0.5, 1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5

Turn a javascript array into a spread:

spread([0, 2, 3, 5])
0, 2, 3, 5


Apparatus is still an early stage project so there are likely bugs. Please report any issues on the GitHub Issues page. Thanks!

Apparatus aims to support all modern browsers but has been mostly tested in Chrome.

Apparatus will auto-save your diagram. If it crashes (stops working), try refreshing and your diagram will be restored to its last working state.


Apparatus is under active development. Discuss how Apparatus should evolve on the Apparatus Google Group.

Source code is available on GitHub under the MIT license. Contributions are very welcome! Big thanks to all who have contributed code to Apparatus.

Apparatus was originally developed by Toby Schachman as a research project within the Communications Design Group (CDG) sponsored by SAP Labs. Thanks to Bret Victor, Paula Te, Matthias Graf, Michael Nagle, Chaim Gingold, Robert Ochshorn, Glen Chiacchieri, Joshua Horowitz, Ian Johnson, Simon Last, Ivan Zhao, Emily Eiffler, Vi Hart, and Monique DeSalvo for design discussions, beta testing, and encouragement!