A modular Java build system that infers what to do by inspecting project structure — no build scripts required.
spin discovers pluggable Extensions via ServiceLoader, each of which auto-detects what it applies
to and declares task dependencies via annotations. It then executes a dependency-ordered graph of
tasks to compile, test, package, and deploy modular Java applications. See overview.md
for a deeper look at the design.
| Module | Purpose |
|---|---|
spin-api |
All public interfaces and annotations |
spin-common |
DefaultProgram: program inference and execution |
spin-engine |
DefaultEngine: ServiceLoader discovery, workspace and project tree |
spin |
Spin.main() CLI entry point; produces jlink runtime image |
spin-modules |
Pluggable extension modules: java, maven, junit, git, config, and more |
spin-testing |
WorkspaceDiscovery JUnit 5 extension for integration tests |
spin-collider |
Subprocess launcher for integration tests requiring a running server |
- Java 8 and Java 25 (both required — see note below)
- Maven (wrapper included — no separate install needed)
~/.m2/settings.xmlconfigured with a Maven repository (e.g. Maven Central)
spinis written in Java 25 and built and tested against Java 25. It is also designed to build Java 8 projects, so a Java 8 JDK must be installed for the test suite to pass.spinwill locate both JDKs automatically but will not install them for you. We recommend Azul Zulu builds for both.
Add individual modules as dependencies. All modules share the same version:
<dependency>
<groupId>build.spin</groupId>
<artifactId>spin-api</artifactId>
<version>VERSION</version>
</dependency>Replace VERSION with the latest version shown in the Maven Central badge above.
Bootstrap using the Maven wrapper (required before spin can build itself):
./mvnw clean installThis produces a distributable zip at spin/target/spin-<version>-bin.zip. To install it locally and
add spin to your PATH in one step:
./install-dev.shOr to rebuild and install in one go:
./install-dev.sh --buildCode style is enforced by Checkstyle: no tabs, no star imports, final locals and parameters, braces
required on all blocks, no assert statements. Import order: third-party, standard Java, then
static. IntelliJ configuration is at config/intellij/CodeStyle.xml.
Commit messages follow Conventional Commits.
Apache 2.0 — see LICENSE