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
  • 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 rest of this manual describes 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.