Boomerang v0.2

A bidirectional programming language for ad-hoc, textual data.

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

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.


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

Boomerang is free software; you may redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation.

Github Access

The Boomerang sources are maintained at GitHub. You can clone your own copy like this:

git clone

Boomerang Manual

J. Nathan Foster and Benjamin C. Pierce. Boomerang Programmer's Manual. [ pdf ]

Research papers on Boomerang

Aaron Bohannon, J. Nathan Foster, Benjamin C. Pierce, Alexandre Pilkiewicz, and Alan Schmitt. Boomerang: Resourceful Lenses for String Data. In ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages (POPL), San Francisco, California, January 2008.
[ conference version | tech report | slides ]
J. Nathan Foster, Alexandre Pilkiewcz, and Benjamin C. Pierce. Quotient Lenses. To appear in ACM SIGPLAN International Conference on Functional Programming (ICFP), Victoria, British Columbia, September, 2008.
[ conference version ]

Research papers on lenses in general

Aaron Bohannon, Jeffrey A. Vaughan, and Benjamin C. Pierce. Relational Lenses: A Language for Updateable Views. In ACM SIGMOD-SIGACT-SIGART Symposium on Principles of Database Systems (PODS), Chicago, Illinois, June 2006. Also available as Technical Report MS-CIS-05-27, Department of Computer and Information Science, University of Pennsylvania, December 2005.
[ conference version | tech report ]
J. Nathan Foster, Michael B. Greenwald, Jonathan T. Moore, Benjamin C. Pierce, and Alan Schmitt. Combinators for bidirectional tree transformations: A linguistic approach to the view-update problem. ACM Transactions on Programming Languages and Systems, 29(3):17, May 2007. Preliminary version presented at the Workshop on Programming Language Technologies for XML (PLAN-X), 2004; extended abstract presented at Principles of Programming Languages (POPL), 2005.
[ conference version | journal version | slides ]

©2008 The Boomerang Team.

Valid XHTML 1.0 Strict Valid CSS!