<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0"
     xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"
     xml:base="https://specificlanguages.com/">
  <channel>
    <title>What&#39;s New in the MPS Ecosystem on Specific Languages</title>
    <link>https://specificlanguages.com/series/whats-new-in-the-mps-ecosystem/</link>
    <description>Recent content in What&#39;s New in the MPS Ecosystem on Specific Languages</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <managingEditor>sergej@specificlanguages.com (Sergej Koščejev)</managingEditor>
    <webMaster>sergej@specificlanguages.com (Sergej Koščejev)</webMaster>
    <lastBuildDate>Wed, 01 Apr 2026 10:30:36 +0200</lastBuildDate>
    
    <atom:link href="https://specificlanguages.com/series/whats-new-in-the-mps-ecosystem/index.xml" rel="self" type="application/rss+xml" />
    
    
    <item>
      <title>What&#39;s new in the MPS ecosystem: March 2026</title>
      <link>https://specificlanguages.com/posts/2026-04/01-whats-new-in-mps-ecosystem/</link>
      <pubDate>Wed, 01 Apr 2026 10:30:36 +0200</pubDate>
      <author>sergej@specificlanguages.com (Sergej Koščejev)</author>
      <guid>https://specificlanguages.com/posts/2026-04/01-whats-new-in-mps-ecosystem/</guid>
      <description>&lt;p&gt;In this series I go through the commit logs and change logs of MPS and popular MPS libraries and collect notable changes
from their master branches.&lt;/p&gt;
&lt;h1 id=&#34;mps&#34;&gt;MPS&lt;/h1&gt;
&lt;p&gt;The list below only mentions user-visible changes and does not include refactorings such as dead-code removal or moving
functionality around.&lt;/p&gt;
&lt;h2 id=&#34;baselanguage&#34;&gt;BaseLanguage&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;🆕 &lt;code&gt;IForEachLoop&lt;/code&gt; interface to capture commonalities between various foreach loops.&lt;/li&gt;
&lt;li&gt;↗️ Intention &amp;lsquo;Add Field For Unused Param&amp;rsquo; got a slightly nicer name&lt;/li&gt;
&lt;li&gt;↗️ BaseLanguage no longer depends on the behavior language&lt;/li&gt;
&lt;li&gt;↗️ Resolution of unknown elements during Java parsing will not add a used language when it already comes from a used
devkit.&lt;/li&gt;
&lt;li&gt;🐞 Fixed a few NPEs when accessing scope or class hierarchy for a detached node&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;behavior-language&#34;&gt;Behavior language&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;↗️ Generated code changes to improve diagnostics: parameter names are now tracked, no code is generated for empty
constructors, and invoking some internal implementation methods directly to shorten stack traces.&lt;/li&gt;
&lt;li&gt;↗️ Removed the dependency of the behavior language on the kernel subsystem.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;core&#34;&gt;Core&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;↗️ Diagnostics improvements (better printout from ClassLoaderManager, extra trace from EDTExecutor).&lt;/li&gt;
&lt;li&gt;↗️ Continued internal refactoring towards per-project repositories.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;editor&#34;&gt;Editor&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;↗️ The &lt;code&gt;:&lt;/code&gt; cell was made non-selectable in Boolean style items.&lt;/li&gt;
&lt;li&gt;↗️ Avoid auto-fixing references in nodes that are no longer open in the editor.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;find-usages&#34;&gt;Find Usages&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;↗️ A nicer tab name for module dependency usages.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;make&#34;&gt;Make&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;↗️ The RCP build script wizard was updated to reflect the fact that the MPS Make plugin now depends on the Java plugin.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;migrations&#34;&gt;Migrations&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;↗️ Minor improvements in the migration notification (&amp;ldquo;Some languages in the project are not deployed&amp;hellip;&amp;rdquo;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;mps-extensions&#34;&gt;MPS-extensions&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;🆕 &lt;code&gt;blutil&lt;/code&gt; language was extended with several additional operations, such as &amp;rsquo;elvis&amp;rsquo; operator &lt;code&gt;?:&lt;/code&gt;, integer ranges
(&lt;code&gt;[2..5]&lt;/code&gt;), &lt;code&gt;select&lt;/code&gt; with index, and more. For more details, see
the &lt;a href=&#34;https://github.com/JetBrains/MPS-extensions/blob/master/CHANGELOG.md&#34;&gt;changelog&lt;/a&gt;.&lt;/p&gt;</description>
      <content:encoded xml:base="https://specificlanguages.com/posts/2026-04/01-whats-new-in-mps-ecosystem/"><![CDATA[ <p>In this series I go through the commit logs and change logs of MPS and popular MPS libraries and collect notable changes
from their master branches.</p>
<h1 id="mps">MPS</h1>
<p>The list below only mentions user-visible changes and does not include refactorings such as dead-code removal or moving
functionality around.</p>
<h2 id="baselanguage">BaseLanguage</h2>
<ul>
<li>🆕 <code>IForEachLoop</code> interface to capture commonalities between various foreach loops.</li>
<li>↗️ Intention &lsquo;Add Field For Unused Param&rsquo; got a slightly nicer name</li>
<li>↗️ BaseLanguage no longer depends on the behavior language</li>
<li>↗️ Resolution of unknown elements during Java parsing will not add a used language when it already comes from a used
devkit.</li>
<li>🐞 Fixed a few NPEs when accessing scope or class hierarchy for a detached node</li>
</ul>
<h2 id="behavior-language">Behavior language</h2>
<ul>
<li>↗️ Generated code changes to improve diagnostics: parameter names are now tracked, no code is generated for empty
constructors, and invoking some internal implementation methods directly to shorten stack traces.</li>
<li>↗️ Removed the dependency of the behavior language on the kernel subsystem.</li>
</ul>
<h2 id="core">Core</h2>
<ul>
<li>↗️ Diagnostics improvements (better printout from ClassLoaderManager, extra trace from EDTExecutor).</li>
<li>↗️ Continued internal refactoring towards per-project repositories.</li>
</ul>
<h2 id="editor">Editor</h2>
<ul>
<li>↗️ The <code>:</code> cell was made non-selectable in Boolean style items.</li>
<li>↗️ Avoid auto-fixing references in nodes that are no longer open in the editor.</li>
</ul>
<h2 id="find-usages">Find Usages</h2>
<ul>
<li>↗️ A nicer tab name for module dependency usages.</li>
</ul>
<h2 id="make">Make</h2>
<ul>
<li>↗️ The RCP build script wizard was updated to reflect the fact that the MPS Make plugin now depends on the Java plugin.</li>
</ul>
<h2 id="migrations">Migrations</h2>
<ul>
<li>↗️ Minor improvements in the migration notification (&ldquo;Some languages in the project are not deployed&hellip;&rdquo;)</li>
</ul>
<h1 id="mps-extensions">MPS-extensions</h1>
<ul>
<li>
<p>🆕 <code>blutil</code> language was extended with several additional operations, such as &rsquo;elvis&rsquo; operator <code>?:</code>, integer ranges
(<code>[2..5]</code>), <code>select</code> with index, and more. For more details, see
the <a href="https://github.com/JetBrains/MPS-extensions/blob/master/CHANGELOG.md">changelog</a>.</p>
</li>
<li>
<p>🆕 <code>EditorTestLifecycleMethods</code> attribute and related intentions were added to the <code>nl.f1re.testing</code> language. With these
intentions you can add before/after tests methods to editor tests.</p>
</li>
<li>
<p>🐞 <code>de.itemis.mps.linenumbers</code> Improve line numbers position in diff editors where the line numbers appear to the
right of the editor.</p>
</li>
<li>
<p>🐞 <code>de.itemis.mps.linenumbers</code> Fix a NullPointerException that would occur after application shutdown and would be
logged e.g. by command line tools. The NPE was caused by failing to properly dispose a Swing timer.</p>
</li>
<li>
<p>🐞 <code>de.itemis.mps.editor.celllayout.runtime</code> Grid layout was broken after previous performance optimization</p>
</li>
</ul>
<h1 id="mbeddr-platform">mbeddr platform</h1>
<p>Bugfixes to several languages:</p>
<ul>
<li>🐞 com.mbeddr.mpsutil.filepicker: Solution-relative pickers now work correctly during generation.</li>
<li>🐞 com.mbeddr.mpsutil.hyperlink: random exceptions should no longer occur after module reload.</li>
<li>🐞 com.mbeddr.mpsutil.interpreter: Throw a more detailed exception when TypedChildConstraint cannot determine
the type of a node.</li>
<li>🐞 com.mbeddr.mpsutil.interpreter: Generated node URLs now correctly point to the input model instead of the transient
model.</li>
</ul>
<h1 id="kernelf">KernelF</h1>
<ul>
<li>no changes in March</li>
</ul>
<h1 id="mbeddrmps-gradle-plugin">mbeddr/mps-gradle-plugin</h1>
<ul>
<li>🐞 A minor fix to the <code>MpsMigrate</code>: pass an additional <code>--add-open</code> argument to MPS so that versions 2025.1 and above
do not complain at run time.</li>
</ul>
<h1 id="mps-build-backends">mps-build-backends</h1>
<ul>
<li>🐞 A few fixes to get fewer stack traces logged during backend execution.</li>
<li>🆕 The <code>execute</code> backend can now exit with a custom error code: if the executed method returns an integer value, this
value is used as the backend exit code.</li>
</ul>
<h1 id="other-projects">Other projects</h1>
<ul>
<li>
<p>Eugen Schindler from <a href="https://dslfoundry.com">DSLFoundry</a> wrote in to mention that he recently migrated two DSLFoundry
projects to MPS 2025.1: <a href="https://github.com/DSLFoundry/mps-UMLRT">mps-UMLRT</a>
and <a href="https://github.com/DSLFoundry/mps-metabnf">mps-metabnf</a>.</p>
</li>
<li>
<p>MetaBNF seems to be a catchy name because this is also the name
of <a href="https://github.com/porscheofficial/MetaBNF">a new project open-sourced by Porsche</a>. Both projects appear to be
focused on generating MPS DSLs from a Backus-Naur Form (BNF) description.</p>
</li>
</ul>
]]></content:encoded>
    </item>
    
    <item>
      <title>What&#39;s new in the MPS ecosystem: February 2026</title>
      <link>https://specificlanguages.com/posts/2026-03/10-whats-new-in-mps-ecosystem/</link>
      <pubDate>Tue, 10 Mar 2026 08:34:12 +0100</pubDate>
      <author>sergej@specificlanguages.com (Sergej Koščejev)</author>
      <guid>https://specificlanguages.com/posts/2026-03/10-whats-new-in-mps-ecosystem/</guid>
      <description>&lt;p&gt;In this series I go through the commit logs and change logs of MPS and popular MPS libraries and collect notable changes
from their master branches.&lt;/p&gt;
&lt;h1 id=&#34;mps&#34;&gt;MPS&lt;/h1&gt;
&lt;p&gt;The main areas of work in February were:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;closer integration with the IDEA platform and being a good citizen of it,&lt;/li&gt;
&lt;li&gt;refactorings and improvements towards replacing the global repository with per-project repositories (a long-term
effort),&lt;/li&gt;
&lt;li&gt;deadlock hunting,&lt;/li&gt;
&lt;li&gt;removal of deprecated code,&lt;/li&gt;
&lt;li&gt;various minor bug fixes in areas such as base language data flow with commented out nodes, proper cleanup in editor
tests in case of failure, and handling of Java source stubs (MPS models created based on Java sources, as opposed to
compiled class files).&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;mps-extensions&#34;&gt;MPS-extensions&lt;/h1&gt;
&lt;p&gt;Optimizing performance of editors showing many similar kinds of images (e.g. checkboxes) and editors using the
celllayout language which installs a layout interceptor to modify how MPS lays out its editors.&lt;/p&gt;</description>
      <content:encoded xml:base="https://specificlanguages.com/posts/2026-03/10-whats-new-in-mps-ecosystem/"><![CDATA[ <p>In this series I go through the commit logs and change logs of MPS and popular MPS libraries and collect notable changes
from their master branches.</p>
<h1 id="mps">MPS</h1>
<p>The main areas of work in February were:</p>
<ul>
<li>closer integration with the IDEA platform and being a good citizen of it,</li>
<li>refactorings and improvements towards replacing the global repository with per-project repositories (a long-term
effort),</li>
<li>deadlock hunting,</li>
<li>removal of deprecated code,</li>
<li>various minor bug fixes in areas such as base language data flow with commented out nodes, proper cleanup in editor
tests in case of failure, and handling of Java source stubs (MPS models created based on Java sources, as opposed to
compiled class files).</li>
</ul>
<h1 id="mps-extensions">MPS-extensions</h1>
<p>Optimizing performance of editors showing many similar kinds of images (e.g. checkboxes) and editors using the
celllayout language which installs a layout interceptor to modify how MPS lays out its editors.</p>
<p>Line numbers now properly appear when a new editor is opened.</p>
<h1 id="mbeddr">mbeddr</h1>
<p>A new language to visualize generator plans, <code>com.mbeddr.mpsutil.genplandiagram</code>.</p>
<h1 id="iets3-opensource">IETS3 Opensource</h1>
<ul>
<li>Variability-related improvements</li>
</ul>
<h1 id="mps-build-backends">mps-build-backends</h1>
<p>In the <code>execute</code> backend (which is a replacement/improvement over the <code>run mps code</code> MPS functionality and the
corresponding <code>runMPS</code> Ant task) if the executed method returns an integer value, it will be used as the exit code of
the backend. This allows the caller to distinguish between several error conditions.</p>
<p>Additionally, <code>project-loader</code> got some workarounds so that a few scary-looking but harmless stack traces that appeared
during MPS startup and shutdown will no longer be logged.</p>
<h1 id="mbeddrmps-gradle-plugin">mbeddr/mps-gradle-plugin</h1>
<p>The plugin had a minor update to upgrade the dependencies it uses. It will now work with the current MPS prerelease.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>What&#39;s new in the MPS ecosystem: January 2026</title>
      <link>https://specificlanguages.com/posts/2026-02/05-whats-new-in-mps-ecosystem/</link>
      <pubDate>Thu, 05 Feb 2026 10:00:00 +0100</pubDate>
      <author>sergej@specificlanguages.com (Sergej Koščejev)</author>
      <guid>https://specificlanguages.com/posts/2026-02/05-whats-new-in-mps-ecosystem/</guid>
      <description>&lt;p&gt;In this series I go through the commit logs of MPS itself and popular MPS libraries and collect notable changes from
their master branches.&lt;/p&gt;
&lt;h1 id=&#34;mps&#34;&gt;MPS&lt;/h1&gt;
&lt;p&gt;There have been quite a lot of changes in January, so I am splitting them by subsystem.&lt;/p&gt;
&lt;h2 id=&#34;ai&#34;&gt;AI&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Include the mcp-server plugin from IDEA in MPS.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;base-language&#34;&gt;Base Language&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Refactoring: moving code around to reduce the number of cyclic dependencies in the subsystem.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Classifier.isDescendant()&lt;/code&gt; optimized to avoid loading stubs unnecessarily and walk the class hierarchy more
efficiently.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;editor&#34;&gt;Editor&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Cleanup: a deprecated 2-argument cell factory method in the editor language generator was removed, only the
no-argument version remains. This affects authors of custom editor cells.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;migrations&#34;&gt;Migrations&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Cleanup: removed unused code, old project migrations (2020 and earlier).&lt;/li&gt;
&lt;li&gt;Refactoring of internals to improve the internal API and reduce the need for model read lock.&lt;/li&gt;
&lt;li&gt;Changes around how language versions and module dependencies are computed - less guessing, version -1 will be used if
not stored.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;model-persistence&#34;&gt;Model Persistence&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;New version of binary model persistence (.mpb files). The format now stores versions of languages used by the model.
This is related to the changes in the migration subsystem.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;project&#34;&gt;Project&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Continued preparations for closer integration with the IDEA platform (workspace model)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;structure&#34;&gt;Structure&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Cleanup: &lt;code&gt;EnumDataTypeDeclaration_Old&lt;/code&gt; and related concepts deprecated several years ago were removed.&lt;/li&gt;
&lt;li&gt;Internal: show &amp;lsquo;concept scope&amp;rsquo; in developer mode (concept scope is an experimental, internal feature to designate some
concepts as non-referenceable or only referenceable from within the same root node).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;testing&#34;&gt;Testing&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Cleanup: drop previously deprecated concepts for node tests (&lt;code&gt;NodeTypeSystemWarningCheckOperation&lt;/code&gt; and
&lt;code&gt;CheckNodeForErrors&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;vcs&#34;&gt;VCS&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;UI improvements around conflict resolution&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;mps-extensions&#34;&gt;MPS-extensions&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;diagrams: to support custom SVG export, the SVGGenerator class is now an object with options (TextAsShape, UseCSS,
SetViewBox).&lt;/li&gt;
&lt;li&gt;rich text: Generic placeholders like generic comments can&amp;rsquo;t be inserted into words anymore (an exception was thrown).&lt;/li&gt;
&lt;li&gt;tables: Prevent inserting a new row node before/after a singular cardinality child node&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;mbeddr&#34;&gt;mbeddr&lt;/h1&gt;
&lt;p&gt;An exception was fixed in the mpsutil filepicker.&lt;/p&gt;</description>
      <content:encoded xml:base="https://specificlanguages.com/posts/2026-02/05-whats-new-in-mps-ecosystem/"><![CDATA[ <p>In this series I go through the commit logs of MPS itself and popular MPS libraries and collect notable changes from
their master branches.</p>
<h1 id="mps">MPS</h1>
<p>There have been quite a lot of changes in January, so I am splitting them by subsystem.</p>
<h2 id="ai">AI</h2>
<ul>
<li>Include the mcp-server plugin from IDEA in MPS.</li>
</ul>
<h2 id="base-language">Base Language</h2>
<ul>
<li>Refactoring: moving code around to reduce the number of cyclic dependencies in the subsystem.</li>
<li><code>Classifier.isDescendant()</code> optimized to avoid loading stubs unnecessarily and walk the class hierarchy more
efficiently.</li>
</ul>
<h2 id="editor">Editor</h2>
<ul>
<li>Cleanup: a deprecated 2-argument cell factory method in the editor language generator was removed, only the
no-argument version remains. This affects authors of custom editor cells.</li>
</ul>
<h2 id="migrations">Migrations</h2>
<ul>
<li>Cleanup: removed unused code, old project migrations (2020 and earlier).</li>
<li>Refactoring of internals to improve the internal API and reduce the need for model read lock.</li>
<li>Changes around how language versions and module dependencies are computed - less guessing, version -1 will be used if
not stored.</li>
</ul>
<h2 id="model-persistence">Model Persistence</h2>
<ul>
<li>New version of binary model persistence (.mpb files). The format now stores versions of languages used by the model.
This is related to the changes in the migration subsystem.</li>
</ul>
<h2 id="project">Project</h2>
<ul>
<li>Continued preparations for closer integration with the IDEA platform (workspace model)</li>
</ul>
<h2 id="structure">Structure</h2>
<ul>
<li>Cleanup: <code>EnumDataTypeDeclaration_Old</code> and related concepts deprecated several years ago were removed.</li>
<li>Internal: show &lsquo;concept scope&rsquo; in developer mode (concept scope is an experimental, internal feature to designate some
concepts as non-referenceable or only referenceable from within the same root node).</li>
</ul>
<h2 id="testing">Testing</h2>
<ul>
<li>Cleanup: drop previously deprecated concepts for node tests (<code>NodeTypeSystemWarningCheckOperation</code> and
<code>CheckNodeForErrors</code>)</li>
</ul>
<h2 id="vcs">VCS</h2>
<ul>
<li>UI improvements around conflict resolution</li>
</ul>
<h1 id="mps-extensions">MPS-extensions</h1>
<ul>
<li>diagrams: to support custom SVG export, the SVGGenerator class is now an object with options (TextAsShape, UseCSS,
SetViewBox).</li>
<li>rich text: Generic placeholders like generic comments can&rsquo;t be inserted into words anymore (an exception was thrown).</li>
<li>tables: Prevent inserting a new row node before/after a singular cardinality child node</li>
</ul>
<h1 id="mbeddr">mbeddr</h1>
<p>An exception was fixed in the mpsutil filepicker.</p>
<h1 id="iets3-opensource">IETS3 Opensource</h1>
<h2 id="kernelf">KernelF</h2>
<ul>
<li>Physical units:
<ul>
<li>The units Joule, Coulomb and Watt can now have also prefixes with negative metric scaling, e.g., mW (milliwatt).
Additionally, some typos have been corrected in the physical units documentation.</li>
<li>The precision of number types with prefixed units (e.g. mW or km) was always set to infinite by the typesystem.
Now, the precision is as precise as possible.</li>
</ul>
</li>
<li>ShortLambda Interpreter: Fixed a bug which resulted in a <code>RuntimeErrorType</code> when interpreting ShortLambdas.</li>
</ul>
<h2 id="variability">Variability</h2>
<ul>
<li>Viewer for skeleton trees has been improved (better error reporting, more stable, does not break on nodes which are
string literals).</li>
</ul>
<h1 id="specificlanguagesmps-gradle-plugin">specificlanguages/mps-gradle-plugin</h1>
<p>I have finally <a href="https://specificlanguages.com/posts/2026-01/14-mps-gradle-plugin-2-0-0/">released version 2.0.0 of the plugin</a>, after replacing the buggy artifact transforms with a
custom caching solution. A few days later, I released version 2.0.1 which improves compatibility with Gradle
configuration cache.</p>
<p>My goal now is to improve the plugin so that it can be used for the build of mbeddr. The main missing features are 1)
dependencies on other subprojects and 2) sharing external libraries among several MPS projects in the same repository.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>What&#39;s new in the MPS ecosystem: December 2025</title>
      <link>https://specificlanguages.com/posts/2026-01/09-whats-new-in-mps-ecosystem-december-2025/</link>
      <pubDate>Mon, 12 Jan 2026 15:00:00 +0100</pubDate>
      <author>sergej@specificlanguages.com (Sergej Koščejev)</author>
      <guid>https://specificlanguages.com/posts/2026-01/09-whats-new-in-mps-ecosystem-december-2025/</guid>
      <description>&lt;p&gt;The MPS community is quite active but talks little about their work. I went through Git commit logs for the last month
and collected notable changes in MPS and the most prominent MPS libraries.&lt;/p&gt;
&lt;h1 id=&#34;mps-master-version-20261&#34;&gt;MPS master (version 2026.1)&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;Fix for Java stubs being loaded incorrectly sometimes (&lt;a href=&#34;https://youtrack.jetbrains.com/issue/MPS-39316&#34;&gt;MPS-39316&lt;/a&gt;,
also in 2025.3), along with a few improvements to Java
stubs (&lt;a href=&#34;https://youtrack.jetbrains.com/issue/MPS-39356&#34;&gt;MPS-39356&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Support for multi-line binary expressions (MPSSPRT-474, not accessible publicly).&lt;/li&gt;
&lt;li&gt;UI color fixes and a new splash screen (&lt;a href=&#34;https://youtrack.jetbrains.com/issue/MPS-39266&#34;&gt;MPS-39266&lt;/a&gt; - editor
gutter color, &lt;a href=&#34;https://youtrack.jetbrains.com/issue/MPS-39257&#34;&gt;MPS-39257&lt;/a&gt; - red color in dependency
analyzer tool for the Islands theme, &lt;a href=&#34;https://youtrack.jetbrains.com/issue/MPS-39370&#34;&gt;MPS-39370&lt;/a&gt; - the new splash
screen).&lt;/li&gt;
&lt;li&gt;Migration listeners were changed from extension points to ModuleRuntime.Extensions (a newer way of implementing
extensions with an API that is supposed to be more safe in the face of reloading classes).&lt;/li&gt;
&lt;li&gt;Accommodating the updates of the underlying IDEA platform: fixes related to the product-info.json file, RCP boot
classpath, converting a component to a service.&lt;/li&gt;
&lt;li&gt;The HTML page that appears when opening a node by URL now shows international characters in the node name
correctly (&lt;a href=&#34;https://youtrack.jetbrains.com/issue/MPS-39352&#34;&gt;MPS-39352&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;(Ongoing) Updating the generator_demo sample project to the current best practices (ongoing,
&lt;a href=&#34;https://youtrack.jetbrains.com/issue/MPS-39192&#34;&gt;MPS-39192&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;(Ongoing) integration of the MPS in-IDE build with JPS (the IntelliJ Platform build system). This should help with
implementing a background build in the future. MPS used to be able to build in the background, but this option was
disabled because with newer MPS versions it led to deadlocks.&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;mps-extensions&#34;&gt;MPS-extensions&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;Line numbers are now updated asynchronously for better performance&lt;/li&gt;
&lt;li&gt;The assertions of the &amp;lsquo;compare&amp;rsquo; language can now be configured to ignore annotations (as they previously did by
default).&lt;/li&gt;
&lt;li&gt;An experimental extension point for customizing concept aliases. This feature is implemented using MPS internals and
can break in future MPS versions, but you can try it out and give feedback.&lt;/li&gt;
&lt;li&gt;An extension point to customize intentions (e.g. disable intentions from libraries or change their descriptions).
Works with the custom intentions menu.&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;mbeddr&#34;&gt;mbeddr&lt;/h1&gt;
&lt;p&gt;No changes except integrating the MPS-extensions updates above.&lt;/p&gt;</description>
      <content:encoded xml:base="https://specificlanguages.com/posts/2026-01/09-whats-new-in-mps-ecosystem-december-2025/"><![CDATA[ <p>The MPS community is quite active but talks little about their work. I went through Git commit logs for the last month
and collected notable changes in MPS and the most prominent MPS libraries.</p>
<h1 id="mps-master-version-20261">MPS master (version 2026.1)</h1>
<ul>
<li>Fix for Java stubs being loaded incorrectly sometimes (<a href="https://youtrack.jetbrains.com/issue/MPS-39316">MPS-39316</a>,
also in 2025.3), along with a few improvements to Java
stubs (<a href="https://youtrack.jetbrains.com/issue/MPS-39356">MPS-39356</a>).</li>
<li>Support for multi-line binary expressions (MPSSPRT-474, not accessible publicly).</li>
<li>UI color fixes and a new splash screen (<a href="https://youtrack.jetbrains.com/issue/MPS-39266">MPS-39266</a> - editor
gutter color, <a href="https://youtrack.jetbrains.com/issue/MPS-39257">MPS-39257</a> - red color in dependency
analyzer tool for the Islands theme, <a href="https://youtrack.jetbrains.com/issue/MPS-39370">MPS-39370</a> - the new splash
screen).</li>
<li>Migration listeners were changed from extension points to ModuleRuntime.Extensions (a newer way of implementing
extensions with an API that is supposed to be more safe in the face of reloading classes).</li>
<li>Accommodating the updates of the underlying IDEA platform: fixes related to the product-info.json file, RCP boot
classpath, converting a component to a service.</li>
<li>The HTML page that appears when opening a node by URL now shows international characters in the node name
correctly (<a href="https://youtrack.jetbrains.com/issue/MPS-39352">MPS-39352</a>).</li>
<li>(Ongoing) Updating the generator_demo sample project to the current best practices (ongoing,
<a href="https://youtrack.jetbrains.com/issue/MPS-39192">MPS-39192</a>).</li>
<li>(Ongoing) integration of the MPS in-IDE build with JPS (the IntelliJ Platform build system). This should help with
implementing a background build in the future. MPS used to be able to build in the background, but this option was
disabled because with newer MPS versions it led to deadlocks.</li>
</ul>
<h1 id="mps-extensions">MPS-extensions</h1>
<ul>
<li>Line numbers are now updated asynchronously for better performance</li>
<li>The assertions of the &lsquo;compare&rsquo; language can now be configured to ignore annotations (as they previously did by
default).</li>
<li>An experimental extension point for customizing concept aliases. This feature is implemented using MPS internals and
can break in future MPS versions, but you can try it out and give feedback.</li>
<li>An extension point to customize intentions (e.g. disable intentions from libraries or change their descriptions).
Works with the custom intentions menu.</li>
</ul>
<h1 id="mbeddr">mbeddr</h1>
<p>No changes except integrating the MPS-extensions updates above.</p>
<h1 id="iets3-opensource">IETS3 Opensource</h1>
<ul>
<li>
<p>Improvements in feature modeling. I do not have enough knowledge to describe them or comment on them.</p>
</li>
<li>
<p>The typesystem rules now use nullable &lsquo;as&rsquo; casts instead of strict (&rsquo;:&rsquo;) casts and KernelF should produce fewer
exceptions in unforeseen cases.</p>
</li>
</ul>
<h1 id="mps-build-backends-mbeddrmps-gradle-plugin">mps-build-backends, mbeddr/mps-gradle-plugin</h1>
<p>No changes in December.</p>
<h1 id="specificlanguagesmps-gradle-plugin">specificlanguages/mps-gradle-plugin</h1>
<p>No changes in December.</p>
<p><a href="https://specificlanguages.com/posts/2025-11/28-whats-new-in-mps-ecosystem/">The artifact transforms story from November</a> turned out to
be more complicated. As pointed out by Sascha Lißon, artifact transforms will not let users share MPS or JBR versions
among unrelated projects. The key under which the result of an artifact transform is cached takes into account the
complete classpath of the Gradle build script that performs the transform (not just the classpath of the transform
itself). This classpath depends on the set of applied plugins and their versions and is likely to be different for
different build scripts.</p>
<p>IntelliJ Platform Gradle Plugin hit this problem as well and solved it by implementing its own caching of the extracted
distributions. I am almost finished implementing this for the MPS Gradle plugin and I&rsquo;m going to release the final
version 2.0.0 soon.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>What&#39;s new in the MPS ecosystem: November 2025</title>
      <link>https://specificlanguages.com/posts/2025-11/28-whats-new-in-mps-ecosystem/</link>
      <pubDate>Fri, 28 Nov 2025 12:47:18 +0100</pubDate>
      <author>sergej@specificlanguages.com (Sergej Koščejev)</author>
      <guid>https://specificlanguages.com/posts/2025-11/28-whats-new-in-mps-ecosystem/</guid>
      <description>&lt;p&gt;The MPS community is quite active but talks little about their work. I decided to help improve the situation, so I went
through Git commit logs for the last month and collected notable changes in MPS itself and the most prominent libraries.&lt;/p&gt;
&lt;p&gt;I list changes on master/main branches only. Some, but not all, of these changes are backported to older versions as
well.&lt;/p&gt;
&lt;h1 id=&#34;mps-master-version-20261&#34;&gt;MPS master (version 2026.1)&lt;/h1&gt;
&lt;h2 id=&#34;ide&#34;&gt;IDE&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Update to the latest IDEA platform.&lt;/li&gt;
&lt;li&gt;Various minor UI improvements. For example, an annoying bug where the project pane selection would jump to the
‘Transient Models’ on every build (if transient models are enabled) was fixed.&lt;/li&gt;
&lt;li&gt;UI performance improvements.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;version-control&#34;&gt;Version Control&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Merge driver improvements (‘do not generate’ flag is now merged properly).&lt;/li&gt;
&lt;li&gt;Merge UI improvements.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;generator&#34;&gt;Generator&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;An initial implementation of conditional generation (&lt;a href=&#34;https://youtrack.jetbrains.com/issue/MPS-38672&#34;&gt;MPS-38762&lt;/a&gt;).&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;editor&#34;&gt;Editor&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Intentions are now enabled on read-only cells (&lt;a href=&#34;https://youtrack.jetbrains.com/issue/MPS-33716&#34;&gt;MPS-33716&lt;/a&gt;)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;This should make the corresponding hack in MPS-extensions unnecessary.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;java&#34;&gt;Java&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Javadoc improvements:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;The javadoc language now uses the text language for its text content, including text in various tags such as
&lt;code&gt;@param&lt;/code&gt; or &lt;code&gt;@deprecated&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Text can now be pasted &amp;lsquo;as Javadoc&amp;rsquo; (in addition to &amp;lsquo;as Java statement&amp;rsquo; and &amp;lsquo;as Java class content&amp;rsquo;).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;building-and-packaging&#34;&gt;Building and Packaging&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;All JARs from mps_home/lib/modules are added to the IDEA layout, making the MPS.ThirdParty module in MPS-extensions
unnecessary (the module was removed as a consequence, see MPS-extensions changes below).&lt;/li&gt;
&lt;li&gt;MPS build scripts now have a property, &lt;code&gt;mps.log.dir&lt;/code&gt;, that can be used to specify a directory where logs will be
written, so that they are not written into the MPS home directory. This allows using one MPS installation in multiple
parallel builds.&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;mps-extensions&#34;&gt;MPS-extensions&lt;/h1&gt;
&lt;p&gt;Based on the &lt;a href=&#34;https://github.com/JetBrains/MPS-extensions/blob/master/CHANGELOG.md&#34;&gt;changelog&lt;/a&gt; and commit logs:&lt;/p&gt;</description>
      <content:encoded xml:base="https://specificlanguages.com/posts/2025-11/28-whats-new-in-mps-ecosystem/"><![CDATA[ <p>The MPS community is quite active but talks little about their work. I decided to help improve the situation, so I went
through Git commit logs for the last month and collected notable changes in MPS itself and the most prominent libraries.</p>
<p>I list changes on master/main branches only. Some, but not all, of these changes are backported to older versions as
well.</p>
<h1 id="mps-master-version-20261">MPS master (version 2026.1)</h1>
<h2 id="ide">IDE</h2>
<ul>
<li>Update to the latest IDEA platform.</li>
<li>Various minor UI improvements. For example, an annoying bug where the project pane selection would jump to the
‘Transient Models’ on every build (if transient models are enabled) was fixed.</li>
<li>UI performance improvements.</li>
</ul>
<h2 id="version-control">Version Control</h2>
<ul>
<li>Merge driver improvements (‘do not generate’ flag is now merged properly).</li>
<li>Merge UI improvements.</li>
</ul>
<h2 id="generator">Generator</h2>
<ul>
<li><strong>An initial implementation of conditional generation (<a href="https://youtrack.jetbrains.com/issue/MPS-38672">MPS-38762</a>).</strong></li>
</ul>
<h2 id="editor">Editor</h2>
<ul>
<li><strong>Intentions are now enabled on read-only cells (<a href="https://youtrack.jetbrains.com/issue/MPS-33716">MPS-33716</a>)</strong>
<ul>
<li>This should make the corresponding hack in MPS-extensions unnecessary.</li>
</ul>
</li>
</ul>
<h2 id="java">Java</h2>
<ul>
<li><strong>Javadoc improvements:</strong>
<ul>
<li>The javadoc language now uses the text language for its text content, including text in various tags such as
<code>@param</code> or <code>@deprecated</code>.</li>
<li>Text can now be pasted &lsquo;as Javadoc&rsquo; (in addition to &lsquo;as Java statement&rsquo; and &lsquo;as Java class content&rsquo;).</li>
</ul>
</li>
</ul>
<h2 id="building-and-packaging">Building and Packaging</h2>
<ul>
<li>All JARs from mps_home/lib/modules are added to the IDEA layout, making the MPS.ThirdParty module in MPS-extensions
unnecessary (the module was removed as a consequence, see MPS-extensions changes below).</li>
<li>MPS build scripts now have a property, <code>mps.log.dir</code>, that can be used to specify a directory where logs will be
written, so that they are not written into the MPS home directory. This allows using one MPS installation in multiple
parallel builds.</li>
</ul>
<h1 id="mps-extensions">MPS-extensions</h1>
<p>Based on the <a href="https://github.com/JetBrains/MPS-extensions/blob/master/CHANGELOG.md">changelog</a> and commit logs:</p>
<ul>
<li>Tables: copy-paste support for tables was added.</li>
<li>Diagrams: there is now a flag to suppress autolayout-on-init functionality, useful when laying out multiple diagrams
in a batch.</li>
<li>Improvements to spell checking functionality (support for custom dictionaries).</li>
<li>MPS.ThirdParty solution with stubs of libraries bundled with MPS was removed, MPS.IDEA or MPS.IDEA.Modules can now be
used instead.</li>
</ul>
<h1 id="mbeddr">mbeddr</h1>
<p>Based on the <a href="https://github.com/mbeddr/mbeddr.core/blob/master/CHANGELOG.md">changelog</a> and commit logs:</p>
<h2 id="assessments">Assessments</h2>
<ul>
<li>Performance improvement when updating results of previously run queries.</li>
<li>A new option, &lsquo;always show checkboxes&rsquo;, to let users check off individual entries without marking the entire
containing assessment with an error.</li>
<li>API change to make the current MPS project available in assessments and assessment scopes.</li>
</ul>
<h2 id="action-filter">Action Filter</h2>
<ul>
<li>UI fixes to make sure the selected action profile stays selected after a restart.</li>
<li>Filtering now works without having to install an IDEA plugin.</li>
</ul>
<h2 id="small-improvements">Small improvements</h2>
<ul>
<li>The search tool has got a new icon to distinguish it from the built-in Find Usages tool window.</li>
<li><code>CommandButton#perform</code> got an overload accepting the current project as a parameter.</li>
</ul>
<h1 id="iets3-opensource-kernelf">IETS3 Opensource (KernelF)</h1>
<p>Based on the <a href="https://github.com/IETS3/iets3.opensource/blob/master/CHANGELOG.md">changelog</a> and commit logs. These
changes are only present on the MPS 2025.1 branch and haven’t been merged to master yet, but hopefully will be soon.</p>
<h2 id="added">Added</h2>
<ul>
<li>The Maven POM now contains all bundled JARs as dependencies with <code>provided</code> scope to help with automated license and
vulnerability scanning.</li>
<li>The Grammar Cells of KernelF editors can now be customized through the extension point <code>EditorCustomization</code>. Optional
cells, flag cells, constant cells, substitute cells and side transformations can be customized (activation of
substitutions, side transformations, description text, post-processing</li>
</ul>
<h2 id="fixed">Fixed</h2>
<ul>
<li>NumberLiteral editor no longer breaks if a property macro was used for its value.</li>
<li>Added missing support for IndexExpr for the operations findFirst and forEach.</li>
<li>Some editor action descriptions were improved.</li>
</ul>
<h1 id="mps-build-backends">mps-build-backends</h1>
<p>Added support for the current MPS master (2025.3/2026.1). This required passing an additional <code>--add-opens</code> flag to the
JVM when launching MPS and making the <code>remigrate</code> backend (for executing re-runnable migrations) properly wait until MPS
is done building its indices.</p>
<h1 id="mbeddrmps-gradle-plugin">mbeddr/mps-gradle-plugin</h1>
<p>No changes in November, but I am working on a simple change to bump the dependency on mps-build-backends launcher from
above. However, this leads to dropping support for older MPS versions, at least in tests.</p>
<h1 id="specificlanguagesmps-gradle-plugin">specificlanguages/mps-gradle-plugin</h1>
<p>I wanted to release the final version 2.0.0, but unfortunately my clever use of artifact transforms to share a single
MPS installation among multiple projects got derailed.</p>
<p>Gradle 9.1 has begun checking the transformed artifacts to make sure they are not changed after transformation, and
since MPS likes to write its logs into its home directory, we did not pass the check. JetBrains has implemented a fix
for this issue, but the fix did not work correctly on older MPS versions. So now I am waiting for <a href="https://youtrack.jetbrains.com/issue/MPS-39193">the fix to the
fix</a> to be released and hoping that I will not have to implement
a workaround.</p>
]]></content:encoded>
    </item>
    
  </channel>
</rss>
