- FASTEN Home - https://sites.google.com/site/fastenroot/
- Questions about using and extending FASTEN: fasten-support@googlegroups.com
- If you encounter problems, please open an issue here
- Get the latest release
FASTEN is organized as several MPS projects under code/languages/:
com.mpsbasics— generic MPS-language-development utilities, not specific to any business domain. Also bundles a few broader integrations (JIRA, GenAI/langchain4j, PDF import/export) that aren't purely language-authoring tooling.com.fasten.symo(SYstemsMOdeling) — generic systems-engineering abstractions usable across projects: a base layer plus PlantUML-diagramming and SysML/hardware-modeling extensions.- End-user-facing domain languages —
com.mbeddr.formal.safety(model-based safety engineering and assurance, by far the most active), pluscom.mbeddr.formal.req,cprover,nusmv,prism,smt,spin(requirements and formal-methods backends). com.mbeddr.formal.repo_admin— cross-cutting: linters plus a formal architecture description (com.fasten.meta.architecture) enforcing dependency rules across the projects above. Nothing else is allowed to depend onrepo_admin's own modules.
Three tutorial projects (code/tutorial, code/tutorial-mdcc, code/tutorial-safety) demonstrate
the end-user-facing functionality and contain no language definitions of their own.
The enforced architecture is more granular than this summary — e.g. safety alone is six named
sub-components, symo splits into a base layer with named extensions, and there's a documented
"quarantine" component for known, accepted layering exceptions. Treat com.fasten.meta.architecture
(open it via MPS MCP tools from the repo_admin project) as the authoritative source for the actual
dependency graph — this summary is oriented for newcomers, not a substitute for it.
One known wrinkle: the fasten_base_languages component — a shared foundation
(com.mbeddr.formal.base, .base.arch, .base.analyses, .base.tabular, etc.) used by multiple
domain languages — has no directory of its own; its modules currently live nested inside
code/languages/com.mbeddr.formal.nusmv/.
For building FASTEN we have Gradle-based scripts which automatically manage all needed dependencies including MPS itself and build the languages.
- configure the needed variables in gradle.properties:
- copy the gradle.properties.example as gradle.properties and replace "<...>" with your paths, github-username and a token with rights to access github-packages
- in Windows please note that the paths should use slash instead of back-slash, and they must NOT contain any space character (' ') - e.g.
mpsHomeDir=C:/work/MPS_2025.1 mbeddr.formal.home=C:/work/mbeddr.formal gpr.user=<a github user name> gpr.token=<token for package access>
- in Unix-based systems we have the "unix paths" (nothing changes)
- in Windows please note that the paths should use slash instead of back-slash, and they must NOT contain any space character (' ') - e.g.
- copy the gradle.properties.example as gradle.properties and replace "<...>" with your paths, github-username and a token with rights to access github-packages
- run
gradlew.bat- this starts the default task which downloads dependencies and builds FASTEN languages- if you want to build the standalone distribution (RCP) run
gradlew.bat build_fasten_safety_distribution- you can find the zip in the directory "build\artifacts\com.mbeddr.formal.safetyDistribution"
- if you want to build the standalone distribution (RCP) run
- download and install MPS 2025.1
- run
gradlew.bat setup. You can skip this step if you have built the project with Gradle already. - start MPS
- in 'Settings->Appearance & Behavior->Path Variables', set the path variable
mbeddr.formal.hometo point to the directory which contains the cloned 'mbeddr.formal' repository. - FASTEN sources are organized in several MPS projects. To build FASTEN, each of these projects need to be built. Please open and build the projects in the following order:
code\languages\com.mpsbasicscode\languages\com.mbeddr.formal.nusmv- after this build is successful, you should be able to open the
code\tutorialproject (contains only SMV-based DSLs)
- after this build is successful, you should be able to open the
code\languages\com.mbeddr.formal.reqcode\languages\com.mbeddr.formal.spincode\languages\com.mbeddr.formal.safety
After the above steps you should be able to open code\tutorial-safety project - it contains the DSLs related to safety.