Skip to content

Spoofax Development

This is the reference manual for building and developing Spoofax, as well as information about its internals.


Spoofax is the integration of many different tools, compilers, (meta-)languages, (meta-)libraries, and runtime components. This integration is made concrete in the spoofax-releng Git repository on GitHub. This repository contains all components via Git submodules, which are updated by our build farm that builds Spoofax whenever one of its components in a submodule changes.

Spoofax currently contains the following subcomponents as submodules:

  • releng - Release engineering scripts for managing and building the spoofax-releng repostory.
  • Java libraries and runtimes
    • mb-rep — Libraries for program representation such as abstract terms
    • mb-exec — Stratego interpreter and utilities
    • jsglr — JSGLR parser
    • spoofax — Spoofax Core, a cross platform API to Spoofax languages
    • spoofax-maven — Maven integration for Spoofax Core
    • spoofax-sunshine — Command-line integration for Spoofax Core
    • spoofax-eclipse — Eclipse plugin for Spoofax Core
    • spoofax-intellij — IntelliJ plugin for Spoofax Core
  • Meta-languages and libraries
    • esv — Editor service language
    • sdf — Syntax Definition Formalisms, containing the SDF2 and SDF 3 languages
    • stratego and strategoxt — Stratego compiler, runtime, and editor
    • nabl — Name binding languages, containing the NaBL and NaBL2 languages, and support libraries for NaBL2
    • ts — Type system language
    • dynsem — Dynamic semantics language
    • metaborg-coq — Coq signatures and syntax definition
    • spt — Spoofax testing language
    • runtime-libraries — NaBL support libraries, incremental task engine for incremental name and type analysis

Furthermore, this repository contains a Bash script ./b that redirects into the Python release engineering scripts in the releng submodule. These scripts support managing this Git repository, version management, generation of Eclipse instances, building Spoofax, and releasing new versions of Spoofax.

The following how-tos explain how to set up Maven and other required tools for building and developing Spoofax, how to build and develop Spoofax, how to write this documentation, and explains some of the internals of Spoofax components.

Last update: April 19, 2024
Created: April 19, 2024