Language workbench to create Domain-Specific Languages
Releases
MPS now runs on Linux ARM64, and coding agents can do much more for much less. The UI allows grouping nodes by virtual package, several dialogs have their UIs reworked, editor tests allow for node-matching functions to be customized, and much more.
What’s new
Here are the most noteworthy new features:
Build and distribution
Linux ARM64 support
MPS is now available for Linux on ARM64 (AArch64), bundled with a matching JetBrains Java runtime.
You can also build standalone MPS-based applications (RCPs) for Linux ARM64. The Build Script wizard now includes a Linux ARM64 distribution in its generated build scripts alongside the existing platform distributions.
TAR imports in Build Language
Build Language now supports importing archive contents directly into distribution layouts using the new import files from tar and files from tar entries.
You can import files from plain TAR archives or archives compressed with gzip or bzip2. The source can be an archive file or another TAR layout defined in the build script.
When importing into a TAR layout, symbolic links and file permissions are preserved. This is particularly useful when packaging platform-specific plugins and native libraries, as symbolic links remain links instead of becoming duplicate copies of their targets.
Archive packaging changes
MPS 2026.2 preserves symbolic links and file permissions when packaging platform-specific plugins. Previously, symbolic links were sometimes replaced with copies of their targets, causing large native libraries to be included more than once, particularly on macOS.
macOS archive distributions now use .tar.gz instead of .zip to preserve symbolic links. The Build Script wizard generates the same archive format for standalone macOS applications.
Startup configuration aligned with the IntelliJ Platform
MPS 2026.2 updates the way startup scripts and product metadata are assembled. The MPS build tooling now keeps the platform-provided boot classpath separate from the MPS-specific extension classpath. It also exposes additional JVM arguments as part of the MPS startup script configuration.
This separation allows MPS distributions to consume the boot classpath and JVM options defined by the matching IntelliJ Platform build, while adding only the libraries and settings specific to MPS. Platform updates can therefore be integrated with less manual maintenance and a lower risk of stale launcher configuration.
The generated launchers also apply platform access options more precisely. Shared --add-opens options come from the platform metadata, while operating-system-specific packages are added only to the launcher for the corresponding operating system. This keeps the launch configuration consistent across macOS, Linux, and Windows and helps prevent startup problems caused by outdated or unnecessarily broad JVM arguments.
Together, these changes make the MPS launcher more resilient as the underlying platform evolves and provide a cleaner extension point for teams building custom MPS-based distributions.
Projectional Agent Toolkit enhancements
The Projectional Agent Toolkit has received a major boost in performance and capabilities.
Performance
Your AI agents can now cut down on token usage for common tasks like DSL modeling or implementing language definitions. In our measurements using Claude Code with Opus 5 and 5.5, the savings exceeded 50%.
This improvement is the result of a substantial rework of the MPS MCP API that implemented the following improvements:
- Consistent parameter naming, null and default-value handling, and error reporting.
- More precise skills and more detailed tool descriptions.
- Bulk operations where they provide the greatest benefit, with compact summaries instead of huge payloads.
- Short read results included directly in responses, with large dumps written to files only when needed.
- One-shot model validation to check full models without round-trip overhead.
- Fast concept discovery using lightweight, structure-only metadata views instead of full AST dumps.
- Fail-fast checks that reject invalid search scopes and mutation inputs instead of returning incomplete results.
- Helper scripts included with skills, so agents spend less time reinventing common MPS tasks.
- Clearer project targeting when several MPS or IDE projects are open.
Type system MCP tool
The type system MCP tool enables agents to:
- Understand node types and type system messages.
- Compare types and determine the expected type for a role.
- Trace type calculations and debug type system rules.
- Identify the type system rule responsible for a reported type system error.
Other new MCP tools
In addition to the type system MCP tool, we’ve added several more MCP tools to cover other core aspects of MPS development. The new tools enable agents to:
- Invoke intention actions and quick-fixes.
- Automatically keep their skill databases up to date with the MPS instance they connect to.
- Read and filter the content of MPS logs.
- Open, close, and create MPS projects.
- Automatically correct SModel expressions in parsed Java statements, helping agents author concept functions and behavior methods.
UI enhancements
Virtual packages in Find Usages results
The Find Usages results tree now supports grouping by virtual package. When it’s enabled, usage results are nested under folder nodes corresponding to the virtual package of each root node, mirroring the structure shown in the Project pane. This makes it easier to locate root nodes in large models with many virtual folders.
Dotted virtual package names (e.g. com.example.ui) expand into one tree level per segment, so the nesting in Find Usages matches the nested virtual folders in the Project view.
The new Group by virtual package toggle appears on the Find Usages toolbar, alongside the existing grouping options (module, model, root node, etc.). It is enabled by default for Find Usages. Other tool windows that display usage results – Model Checker, TODO, Dependencies Viewer, and Refactoring View – retain their usual default grouping options.
A more natural way to select lists of nodes
Selecting a larger piece of a model in the MPS editor is now easier with Select Up (Ctrl+Up). When the caret is inside a list of nodes – for example, a sequence of statements in a behavior method or a constraint – Select Up now recognizes the list as a meaningful unit for selection.
Instead of jumping directly from one node to its parent, the action first selects all sibling nodes in the list. The parent is selected in the following step. This gives the selection process an intuitive intermediate level and makes common operations, such as copying and pasting a complete group of statements, faster and more reliable.
This also works correctly when the current selection is already a range of nodes, so repeated Select Up actions provide a consistent path from an individual node, through its containing list, to the surrounding structure.
Reworked Import dialog: Select models and languages to import
The Import dialog has undergone a major overhaul to fix functional issues and bring its appearance in line with the rest of the platform.
- When pasting code between models, only the models and languages you actually select in the dialog are imported. Previously, the dialog ignored your selection.
- If the dialog offers only one suggestion, you can now deselect it. Previously, the single suggestion could not be deselected.
- Both the model and language lists now have checkboxes for individual entries and a header checkbox to select or deselect all entries. The header checkbox shows an indeterminate state when only some entries are selected.
Diff dialog and tab improvements
We’ve made quite a few minor changes to bring the diff dialog’s look and feel in line with the rest of the platform.
- Change markers on the scrollbar now remain in the right position when the dialog or editor is resized. Previously, a marker would sometimes jump to an unrelated location. The fix was made in the shared editor gutter, so regular editor error and warning markers are covered, too.
- We fixed regressions caused by the post-merge child-ordering improvements that were introduced earlier. Applying resolved conflicts now succeeds even when children require reordering.
Testing
Editor tests: Flexible result matching
When an editor test does not need to match the expected result exactly – for example, when the order of child nodes or the value of an attribute is irrelevant – you can now tell MPS which differences to ignore.
There are two ways to customize result matching:
- Node-matching rules: Declare custom matching rules. You can specify which containment roles should be compared, ignored, or excluded, and which properties or references should not be compared.
- Per-node markers: When an exception applies to just one node, add a marker directly to that node in the result fixture using the intention actions menu.
Either way, the parts you don’t care about stop causing false failures – and when a test does fail, the message now points straight at the node and cell responsible, so there’s no more sleuthing through raw assertions.
This improvement is the result of a direct customer request. It ensures fewer brittle editor tests and less fixture babysitting.
More informative test failure messages
Editor test failure messages – such as for a wrong selection, a mismatched editor cell ID, or a wrong selection range – now describe exactly which node and cell are responsible instead of reporting a bare assertion failure. Every node mentioned in a failure message is rendered along with its presentation, concept name, and node ID, making it much easier to locate the problematic node in the result fixture without reproducing the failure in the debugger.
Check out all the new functionality on the What’s New page.
The full list of fixed issues can be found here.
Try the new features and let us know what you think.
The JetBrains MPS team












