MPS can be extended using plugins. There are multiple plugins available on the Marketplace, for example Kolja Dummann’s Durchblick or Fernsprecher, Build Script Notifier from yours truly, or grammar cells (de.itemis.mps.grammarcells) from itemis.

One of these is not like the others.

Let’s say you have all of these plugins installed in your MPS and are developing your language. You use grammar cells to save on the effort of writing editors, Durchblick to have a better view of generators, Fernsprecher to view MPS logs, and Build Script Notifier to remember to update build script dependencies.

Now the time comes to distribute your language to the users. Which plugins do you need to include in the final package so that the consumers will be able to use the language?

The answer is: only grammar cells.

All the other plugins improve your “working conditions” by enhancing the development environment. Whether you used those plugins or not, generating and compiling your language produces the same result. Your users do not need these plugins to use your language.

With grammar cells it is a different story. This plugin is a reusable library. The language you write is tied to it and will not work without the library available.

It is not important whether the language was developed with version X or Y of Durchblick or Fernsprecher. On the other hand, knowing and using a specific version of grammar cells can be very important. Version Y may contain a fix for a particular bug or a feature you want to use that is not part of version X.

Automatically updating the IDE-enhancement plugins is usually desirable. Automatically updating the libraries? Usually not.

In the world of non-meta IDEs this distinction is quite clear: you get a JSON file plugin from JetBrains Marketplace but you get Gson or Jackson JSON parser library from a Maven repository.

In the world of MPS this distinction is unfortunately less clear, and it is made worse by the fact that MPS-extensions are available on JetBrains Marketplace.

I recommend you avoid using library plugins from the JetBrains Marketplace, except for initial small experiments or demos (a single person trying out things on a single machine). As soon as you need to distribute your language to others, even if it is just a proof of concept, consider setting up a Maven or Gradle build to download the specific versions of libraries from a package repository. This investment will save you some headaches.