Spring Initializr provides an extensible API to generate JVM-based projects with implementations for several common concepts:
Basic language generation for Java, Kotlin and Groovy.
Build system abstraction with implementations for Apache Maven and Gradle.
Various low-level hook-points for custom resources generations.
The various options for the projects are expressed in a metadata model that allows you to configure the list of dependencies, supported JVM and platform versions, etc.
Spring Initializr also exposes web endpoints to generate an actual project and also serve its metadata in a well-known format to allow third-party clients to provide the necessary assistance.
A set of optional conventions for Spring Boot projects is provided and are used in our production instance at https://start.spring.io. To better understand how our service is configured, you may want to check the companion project and, in particular, the configuration of our instance. Such configuration is also described in details in the documentation.
|Check the milestones page for an overview of the changes.|
The reference documentation is available in HTML format.
Spring Initializr has the following modules:
initializr-actuator: optional module to provide additional information and statistics
on project generation.
initializr-bom: provides a Bill of Materials for easier dependency management in your
initializr-generator: core project generation library.
initializr-generator-spring: optional module defining the conventions for a typical
Spring Boot project. Can be reused or replaced by your own conventions.
initializr-metadata: metadata infrastructure for various aspects of the project.
initializr-service-sample: showcases a basic custom instance.
initializr-version-resolver: optional module to extract version numbers for an
initializr-web: web endpoints for third party clients.
Spring Initializr can be used as follows:
There are other command-line integrations out there and you can also build your own!
As Spring Initializr doesn’t come with a Web UI, you can use any of the out-of-the-box
integration to generate a project. For instance, the following
curl command downloads
a project archive with a Maven-based project and the necessary infrastructure to start
a basic Spring Boot app.
$ curl https://start.spring.io/starter.zip -o demo.zip
The project to generate can be customized of course with a number of options:
Basic information for the generated project:
name attribute is also used to generate a default application name. The
logic is that the name of the application is equal to the
name attribute with an
Application suffix (unless said suffix is already present). Of course, if the
specified name contains an invalid character for a java identifier,
used as fallback.
artifactId attribute not only defines the identifier of the project in the
build but also the name of the generated archive.
dependencies: the identifiers of the dependencies to add to the
project. Such identifiers are defined through configuration and are exposed in the
type: the kind of project to generate (e.g.
maven-project). Again, each
service exposes an arbitrary number of supported types and these are available in the
javaVersion: the JVM language level (e.g.
bootVersion: the platform version to use (e.g.
language: the programming language to use (e.g.
packaging: the packaging of the project (e.g.
applicationName: the name of the application class (inferred by the
attribute by default).
baseDir: the name of the base directory to create in the archive. By default, the
project is stored in the root.
You can "curl" an instance to get a usage page with examples (try
This command generates an
another-project directory holding a Gradle web-based
Groovy project using the actuator:
$ curl https://start.spring.io/starter.tgz -d dependencies=web,actuator \ -d language=groovy -d type=gradle-project -d baseDir=another-project | tar -xzvf -
You could use this infrastructure to create your own client since the project is generated via a plain HTTP call.
The service metadata is used by all clients to know which values they should expose for
the standard attributes of a project. For instance, a custom version can specify that the
com.example.acme. You can grab the metadata on the root endpoint
with the appropriate
$ curl -H 'Accept: application/json' https://start.spring.io
As stated above, if you use
HTTPie is also supported:
$ http https://start.spring.io Accept:application/json
The metadata basically lists the capabilities of the service, that is the available
options for all request parameters (
bootVersion, etc.) A client
to the service uses that information to initialize the select options and the tree of
The metadata also lists the default values for simple text parameter (i.e. the
name for the project).
|More details about the structure of the metadata are available in the documentation.|
You can easily run your own instance. The
initializr-web modules uses Spring Boot
so when it is added to a project, it will trigger the necessary auto-configuration to
deploy the service.
initializr-service-sample showcases a basic custom instance with dedicated metadata.
|Spring Initializr is not available on Maven central yet so you will have to either build it from source if you want the latest state or use the latest release that is available on https://repo.spring.io/release.|
Spring Initializr is Open Source software released under the Apache 2.0 license.