Welcome to the home of the Backstage Java (BSJ) project. BSJ is a Java language extension which demonstrates the utility of difference-based metaprogramming, a metaprogramming model in which metaprograms are treated as difference generators rather than program transformation functions. Difference-based metaprogramming lends itself to developing independent metaprogramming modules which are easy to reason about but are powerful enough to express complex object-oriented programming patterns.

For a brief and light tutorial on BSJ, please see the tutorial page.


  • You can download a pre-built copy of the BSJ compiler here.

  • The BSJ git repository is publicly available at git://

  • The OOPSLA 2011 conference paper which introduced BSJ and difference-based metaprogramming can be found here. The slides from the talk are here.


Questions or comments regarding BSJ are welcome! Please send your e-mail to