How spring-io/initializr works
Spring Initializr is a configurable JVM project-generation service. A client requests metadata or submits project options; web endpoints expose metadata and route generation requests into project creation, returning build files or a downloadable archive. The generator supports Java, Kotlin, and Groovy; Maven and Gradle; and extensible conventions including Spring Boot configuration, properties, Git files, and Docker Compose. Optional actuator endpoints report generation statistics and version ranges. The tree and excerpts establish the web and generator responsibilities, but do not expose every runtime connection, so uncertain links are omitted.
Main entry points: BuildSystem.java Build model · ProjectGenerationController.java Generation API · ServiceCapability.java Metadata capabilities · ProjectMetadataController.java Metadata API
Components 19
Web API
- Generation API
initializr-web/src/main/java/io/spring/initializr/web/controller/ProjectGenerationController.java - Request binding
initializr-web/src/main/java/io/spring/initializr/web/controller/DefaultProjectGenerationController.java - Metadata API
initializr-web/src/main/java/io/spring/initializr/web/controller/ProjectMetadataController.java - CLI help
initializr-web/src/main/java/io/spring/initializr/web/controller/CommandLineMetadataController.java
Metadata
- Metadata capabilities
initializr-metadata/src/main/java/io/spring/initializr/metadata/ServiceCapability.java - Repository metadata
initializr-metadata/src/main/java/io/spring/initializr/metadata/Repository.java
Project generation
- Build model
initializr-generator/src/main/java/io/spring/initializr/generator/buildsystem/BuildSystem.java - Language model
initializr-generator/src/main/java/io/spring/initializr/generator/language/LanguageFactory.java - Spring source
initializr-generator-spring/src/main/java/io/spring/initializr/generator/spring/code/SourceCodeProjectGenerationConfiguration.java - App properties
initializr-generator-spring/src/main/java/io/spring/initializr/generator/spring/properties/ApplicationPropertiesProjectGenerationConfiguration.java - Git files
initializr-generator-spring/src/main/java/io/spring/initializr/generator/spring/scm/git/GitProjectGenerationConfiguration.java - Compose files
initializr-generator-spring/src/main/java/io/spring/initializr/generator/spring/container/docker/compose/ComposeProjectContributor.java - Build writers
initializr-generator/src/main/java/io/spring/initializr/generator/buildsystem/BuildWriter.java
Operations
- Stats configuration
initializr-actuator/src/main/java/io/spring/initializr/actuate/autoconfigure/InitializrStatsAutoConfiguration.java - Generation stats
initializr-actuator/src/main/java/io/spring/initializr/actuate/stat/ProjectGenerationStatPublisher.java - Stats document
initializr-actuator/src/main/java/io/spring/initializr/actuate/stat/ProjectRequestDocumentFactory.java - Dependency ranges
initializr-actuator/src/main/java/io/spring/initializr/actuate/info/DependencyRangesInfoContributor.java - BOM ranges
initializr-actuator/src/main/java/io/spring/initializr/actuate/info/BomRangesInfoContributor.java
Other components
- Client
Connections 19
- Client → Generation API: submits options
- Generation API → Request binding: binds request
- Generation API → Build writers: invokes build generation
- Generation API → Metadata API: requests metadata
- Client → Metadata API: requests capabilities
- Client → CLI help: requests CLI help
- Metadata API → Metadata capabilities: serializes capabilities
- CLI help → Metadata capabilities: renders help from
- Build writers → Build model: writes build model
- Build model → Repository metadata: represents repositories
- Build model → Language model: selects language
- Spring source → Language model: customizes source
- App properties → Build model: contributes settings
- Git files → Build model: contributes project files
- Compose files → Build model: contributes compose file
- Stats configuration → Generation stats: configures publisher
- Generation stats → Stats document: creates document
- Dependency ranges → Metadata capabilities: reports ranges
- BOM ranges → Metadata capabilities: reports ranges