Boomerang is a programming language for writing lenses—well-behaved bidirectional transformations—that operate on ad-hoc, textual data formats. Every lens program, when read from left to right, describes a function that maps an input to an output; when read from right to left, the very same program describes a "backwards" function that maps a modified output, together with the original input, back to a modified input.

Lenses have been used to solve problems across a wide range of areas in computing including: in data converters and synchronizers, in parsers and pretty printers, in picklers and unpicklers, in structure editors, in constraint maintainers for user interfaces, in software model transformations, in schema evolution, in tools for managing system configuration files, and in databases where they provide updatable views.

The best way to get started with Boomerang is to download our system and work through the examples in the first few chapters of the manual. Many more details can be found in our research papers.

Mailing List

Team

Discussion of Boomerang and other bidirectional languages takes place on bidirectional transformations wiki and email list

Boomerang is developed by Nate Foster, Benjamin C. Pierce, and Michael Greenberg with major contributions from Davi Barbosa, Aaron Bohannon, Julien Cretin, Alexandre Pilkiewicz, and Alan Schmitt.

Support

Our work is supported by the National Science Foundation under the following grants: