Graph Origami

A conceptual system and tools for creating websites, documentation, data sets, and other content

Graph Origami is a research project exploring ideas and tools for building a wide variety of software artifacts and digital content. The system encourages you to view creating such things as an exercise in transformation: you take your starting files, data, etc., and transform them step-by-step into a final result you can use and share.

Graph Origami takes its name from the traditional paper folding art of origami, in which you can transform a flat square of paper into something like a heart, flower, or animal.

Every part of the final result is present at the start; the sequence of folds transforms the initial square of paper into the artwork. The steps may be simple but the end result can be complex.

In the same way, Graph Origami lets you take content you write and transform it step-by-step into something to share. The system is intended for designers, developers, and content authors.

Graph Origami is built in a series of layers:

  • At the lowest level, there’s a conceptual programming pattern for representing a wide variety of data types as graphs that can be easily transformed. There’s no code at this level; you can use the ideas without depending on another project.
  • If you’re a programmer and would like to save time and benefit from sharing code, that conceptual pattern is implemented in a small core library written in JavaScript.
  • At the highest level, a framework lets you concisely express transformations that create the software or other content you wish to make.
  • There is also a companion command-line interface (CLI) for using the framework in a command terminal. The CLI is also useful as a general tool in its own right for working with JavaScript in the shell.
  • Both the framework and CLI make use of a small expression language that lets you concisely describe transformations of data using formulas similar to those in a spreadsheet.

These layers are independently useful; you can work at whatever layer you prefer.