Stepping down as the maintainer of scalamacros/paradise

Dear all,

Today I’m stepping down as the maintainer of scalamacros/paradise.

Almost five years ago, when I started the project, my goal was to push the boundaries of what’s possible in Scala by experimenting with a new flavor of macros - macro annotations.

In order to reduce the strain on the official Scala compiler, I chose to implement macro annotations in a compiler plugin instead of pushing for merging the experimental functionality into scala/scala right away.

This decision allowed early adopters to use macro annotations right away, but it also required me to personally shoulder the costs of continuously updating the compiler plugin to new versions of Scala.

When I joined Twitter in November 2016, macros stopped being my day job. I took on many additional responsibilities that include participation in and maintenance of:

  • The tooling aspect of Scalameta - the library that was created to provide a better macro system for Scala, now refocused to provide a foundation for developer tools.
  • SemanticDB - a data model for semantic information about programs in Scala and other languages.
  • Rsc - an experimental Scala compiler focused on compilation speed.
  • More recently, LSP-WG - a Language Server Protocol working group.

Recognizing that I’m getting less and less time to work on macros, in September 2017, I stepped down from my role as the maintainer of Scala macros. Today, it’s time to do the same for Paradise.

I would like to thank all the users and contributors of Scala macros in general and Macro Paradise in particular. It was an honor to serve the Scala community, and I had a lot of fun together with you all.

My last order of business in Paradise will be releasing the plugin for the recently staged Scala 2.12.5. That will be done today in PDT.



In the case that nobody steps up to maintain macro-paradise, I have already taken the steps to create a helper to allow people to rewrite annotation macros as compiler plugins

It is already better supported in tooling such as ENSIME and ScalaIDE, and the reduced scope of the annotations makes it easier to write IntelliJ plugins, which turn out to be super simple.

Changes must be syntactic, no type information is available. I recommend forwarding to blackbox macros for that.

My only request of the compiler team would be that it would be great if annotations were named so we can match on FQN annotations instead of purely by name.


Thank you for all the hard work and dedicated effort you’ve poured into this, Eugene!


You picked your only request well – that’s the core of the problem :slight_smile: Resolving names of annotations that themselves add more names to the surrounding scope is not an easy thing to spec, implement or optimize.

1 Like

Regarding macro paradise, we intend to keep releasing versions for the 2.12.x series. Given the stability of 2.12 (the diff from 2.12.0 to 2.12.5 is small), that seems like the expedient thing to do.

For 2.13.x, we’ll consider integrating the core of paradise into scalac under -Yyyyyyyymacro-annotations (the number of ys will change with each release to emphasize the experimental nature).

To make this happen, we need your help in defining this core! One approach could be through test cases. To keep the effort focused, we won’t consider anything that’s not already supported, and at least a few popular libraries should be using the feature.


If you’re adopting it, that’s great! Adding some extra tests around presentation compiler support would then be very much appreciated. e.g. simulacrum (which is fairly simple annotation macro) breaks type inference in that compilation unit.

The Scala team at Lightbend now has the needed access for publishing further paradise releases for the 2.12.x series. We published paradise 2.1.1 for 2.12.6 recently. Thanks Eugene for helping with the transition.

For Scala 2.13, Adriaan has made a pull request that folds macro paradise into the compiler, behind a -Ymacro-annotations flag. See It’s heaven on earth.

(What happens in Scala 3 remains a separate question.)


(Scala 2.13.0-M4 is now out and includes the pull request I mentioned.)