Skip to content

Spoofax 2.5.10 Migration Guide

A change in Statix need migration for users of the Stratego API.


In an upcoming version of Spoofax 2 it will be required to properly declare sorts in SDF3 syntax definitions. Sorts for which context-free rules are defined should be declared in a context-free sorts block:

context-free sorts
  Stmt Expr

Note: For backward compatibility, sorts declared in a plain sorts block are treated as context-free sorts. So this is equivalent and also fine:

  Stmt Expr

Sorts for which lexical rules are defined should be declared in a lexical sorts block:

lexical sorts

Note: Lexical sorts are not supported in combination with sdf2table: c.


If your metaborg.yaml file still contains mention of Typesmart (e.g. debug: typesmart: false), you can remove it. See the release notes for why Typesmart support was removed.


Spoofax languages used to always generate target/metaborg/stratego-javastrat.jar which contains the compiled Java code from src/main/stratego. Conditional on your settings in the metaborg.yaml file, your Stratego code would be turned into target/metaborg/stratego.ctree or target/metaborg/stratego.jar depending on whether you chose compilation or interpretation. As of this release, there is no longer a separate stratego-javastrat.jar. Instead stratego.jar is always generated and always contains at least the compiled Java code from src/main/stratego. If you choose compilation for your Stratego code, the compiled Stratego code is added to the stratego.jar file as was already the case originally.

What you need to do: Go to your editor/main.esv file and find the provider: ... lines (or search your other ESV files if it's not there). The line provider: target/metaborg/stratego-javastrat.jar should be replaced by provider: target/metaborg/stratego.jar. If you already have a provider: target/metaborg/stratego.jar, one is enough and you can remove the stratego-javastrat.jar provider directive entirely.


The AST property type is now a built-in property. Users of the Stratego API to get this property should change their API calls. Instead of

stx-get-ast-property(|a, "type")

one should now use:



In SPT, parse succeeds tests will now fail when the input parses ambiguously. If this is intended, use parse ambiguous instead.

Last update: July 3, 2024
Created: July 3, 2024