Close

Understanding Spring Boot Starters

[Last Updated: Oct 13, 2026]

Spring Boot starters are curated sets of dependencies, packaged as dependency descriptors. Instead of finding and declaring many related libraries ourselves, we add a single starter and get everything needed for a given feature, with versions that are known to work together.

In this tutorial we are going to explain different aspects of starters using Maven. The same starters work with Gradle as well. To generate a ready-to-use project with the starters of our choice, we can also use Spring Initializr.


spring-boot-starter-parent

The spring-boot-starter-parent is a special starter that provides useful Maven defaults, such as the default Java version, UTF-8 source encoding, sensible plugin configuration, and dependency management inherited from spring-boot-dependencies. We extend our project POM from this starter. By choosing a specific version of the parent, we implicitly select compatible versions of the Spring modules and the third-party libraries that this Spring Boot release supports.

Spring Boot uses Maven's Dependency Management mechanism to centralize dependency information, so that we can omit version tags for the dependencies it manages. We will see how to find and override those managed versions, and other defaults like the Java version, in the next tutorial.

Using the parent POM is the most convenient approach, but it is optional. We will also see how to get the same dependency management without inheriting from it in an upcoming tutorial.

Official Spring Boot starters are released together with Spring Boot, so they always share its version number. For example, with Spring Boot 4.1.0, spring-boot-starter and every other official starter are also 4.1.0. That is why we can omit the version tag when using the parent POM. The libraries a starter brings in, such as Spring Framework or Logback, have their own versions, which Spring Boot's dependency management selects for us.




Application-specific starter dependencies

We specify the other starters in the <dependencies></dependencies> section of our POM. They provide the dependencies our application actually needs.

For example, let's create a Spring core context application. For that we need to add spring-boot-starter:

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>4.1.1</version>
  </parent>
  <groupId>com.logicbig.example</groupId>
  <artifactId>spring-boot-starter-example</artifactId>
  <version>1.0-SNAPSHOT</version>
  <properties>
    <java.version>25</java.version>
  </properties>
  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter</artifactId>
    </dependency>
  </dependencies>
</project>

That brings in the following dependencies:

$ mvn dependency:tree
[INFO] Scanning for projects...
[INFO]
[INFO] ----------< com.logicbig.example:spring-boot-starter-example >----------
[INFO] Building spring-boot-starter-example 1.0-SNAPSHOT
[INFO] from pom.xml
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- dependency:2.10:tree (default-cli) @ spring-boot-starter-example ---
[INFO] com.logicbig.example:spring-boot-starter-example:jar:1.0-SNAPSHOT
[INFO] \- org.springframework.boot:spring-boot-starter:jar:1.4.2.RELEASE:compile
[INFO] +- org.springframework.boot:spring-boot:jar:1.4.2.RELEASE:compile
[INFO] | \- org.springframework:spring-context:jar:4.3.4.RELEASE:compile
[INFO] | +- org.springframework:spring-aop:jar:4.3.4.RELEASE:compile
[INFO] | +- org.springframework:spring-beans:jar:4.3.4.RELEASE:compile
[INFO] | \- org.springframework:spring-expression:jar:4.3.4.RELEASE:compile
[INFO] +- org.springframework.boot:spring-boot-autoconfigure:jar:1.4.2.RELEASE:compile
[INFO] +- org.springframework.boot:spring-boot-starter-logging:jar:1.4.2.RELEASE:compile
[INFO] | +- ch.qos.logback:logback-classic:jar:1.1.7:compile
[INFO] | | +- ch.qos.logback:logback-core:jar:1.1.7:compile
[INFO] | | \- org.slf4j:slf4j-api:jar:1.7.21:compile
[INFO] | +- org.slf4j:jcl-over-slf4j:jar:1.7.21:compile
[INFO] | +- org.slf4j:jul-to-slf4j:jar:1.7.21:compile
[INFO] | \- org.slf4j:log4j-over-slf4j:jar:1.7.21:compile
[INFO] +- org.springframework:spring-core:jar:4.3.4.RELEASE:compile
[INFO] \- org.yaml:snakeyaml:jar:1.17:runtime
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.375 s
[INFO] Finished at: 2026-10-12T04:30:46-05:00
[INFO] ------------------------------------------------------------------------

Each Spring Boot release comes with a matching, tested set of Spring modules, so upgrading Spring Boot is the usual way to upgrade the Spring modules as well. To see what changed between releases, check the Release Notes.

After including the parent and the starter, we can start using the Spring core context:

package com.logicbig.example;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
public class ApplicationExample {
    @Bean
    public MyBean myBean() {
        return new MyBean();
    }

    public static void main(String[] args) {

        SpringApplication.run(ApplicationExample.class, args)
                         .getBean(MyBean.class)
                         .doSomething();
    }

    private static class MyBean {
        public void doSomething() {
            System.out.println("Doing something in MyBean");
        }
    }
}

Output


. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/

:: Spring Boot :: (v4.1.1)

2026-10-13T03:00:20.875-05:00 INFO 25560 --- [ main] c.logicbig.example.ApplicationExample : Starting ApplicationExample using Java 25 with PID 25560 (D:\LogicBig\example-projects\spring-boot\spring-boot-starter-example\target\classes started by joe2 in D:\LogicBig\example-projects\spring-boot\spring-boot-starter-example)
2026-10-13T03:00:20.877-05:00 INFO 25560 --- [ main] c.logicbig.example.ApplicationExample : No active profile set, falling back to 1 default profile: "default"
2026-10-13T03:00:21.319-05:00 INFO 25560 --- [ main] c.logicbig.example.ApplicationExample : Started ApplicationExample in 0.749 seconds (process running for 1.031)
Doing something in MyBean

In the above example, @SpringBootApplication is a convenience annotation that combines @SpringBootConfiguration (a specialization of @Configuration), @EnableAutoConfiguration and @ComponentScan. We will discuss these in upcoming tutorials.



Spring starter list

Check out the complete list of official starters in the reference documentation. Note that Spring Boot 4 renamed or split many starters into smaller, technology-specific ones (for example, spring-boot-starter-web is now spring-boot-starter-webmvc). See the Spring Boot 4.0 Migration Guide on the project wiki if you are upgrading an older project.




Starters naming convention

All official Spring Boot starters follow the pattern spring-boot-starter-* (for example, spring-boot-starter-webmvc). This prefix is reserved for official Spring Boot artifacts. If we create our own starter, we should use a different naming convention, e.g. mycompany-spring-boot-starter. The same applies to all third-party starters.



What's next?

In the next tutorial, we are going to see how to find the dependency versions managed by Spring Boot, and how to override them and other default properties.


Example Project

Dependencies and Technologies Used:

  • Spring Boot 4.1.1
    Corresponding Spring Version 7.0.9
     Version Compatibility: 1.2.0.RELEASE - 4.1.1Version List
    ×

    Version compatibilities of spring-boot-starter-parent with this example:

    • 1.2.0.RELEASE
    • 1.2.1.RELEASE
    • 1.2.2.RELEASE
    • 1.2.3.RELEASE
    • 1.2.4.RELEASE
    • 1.2.5.RELEASE
    • 1.2.6.RELEASE
    • 1.2.7.RELEASE
    • 1.2.8.RELEASE
    • 1.3.0.RELEASE
    • 1.3.1.RELEASE
    • 1.3.2.RELEASE
    • 1.3.3.RELEASE
    • 1.3.4.RELEASE
    • 1.3.5.RELEASE
    • 1.3.6.RELEASE
    • 1.3.7.RELEASE
    • 1.3.8.RELEASE
    • 1.4.0.RELEASE
    • 1.4.1.RELEASE
    • 1.4.2.RELEASE
    • 1.4.3.RELEASE
    • 1.4.4.RELEASE
    • 1.4.5.RELEASE
    • 1.4.6.RELEASE
    • 1.4.7.RELEASE
    • 1.5.0.RELEASE
    • 1.5.1.RELEASE
    • 1.5.2.RELEASE
    • 1.5.3.RELEASE
    • 1.5.4.RELEASE
    • 1.5.5.RELEASE
    • 1.5.6.RELEASE
    • 1.5.7.RELEASE
    • 1.5.8.RELEASE
    • 1.5.9.RELEASE
    • 1.5.10.RELEASE
    • 1.5.11.RELEASE
    • 1.5.12.RELEASE
    • 1.5.13.RELEASE
    • 1.5.14.RELEASE
    • 1.5.15.RELEASE
    • 1.5.16.RELEASE
    • 1.5.17.RELEASE
    • 1.5.18.RELEASE
    • 1.5.19.RELEASE
    • 1.5.20.RELEASE
    • 1.5.21.RELEASE
    • 1.5.22.RELEASE
    • 2.0.0.RELEASE
    • 2.0.1.RELEASE
    • 2.0.2.RELEASE
    • 2.0.3.RELEASE
    • 2.0.4.RELEASE
    • 2.0.5.RELEASE
    • 2.0.6.RELEASE
    • 2.0.7.RELEASE
    • 2.0.8.RELEASE
    • 2.0.9.RELEASE
    • 2.1.0.RELEASE
    • 2.1.1.RELEASE
    • 2.1.2.RELEASE
    • 2.1.3.RELEASE
    • 2.1.4.RELEASE
    • 2.1.5.RELEASE
    • 2.1.6.RELEASE
    • 2.1.7.RELEASE
    • 2.1.8.RELEASE
    • 2.1.9.RELEASE
    • 2.1.10.RELEASE
    • 2.1.11.RELEASE
    • 2.1.12.RELEASE
    • 2.1.13.RELEASE
    • 2.1.14.RELEASE
    • 2.1.15.RELEASE
    • 2.1.16.RELEASE
    • 2.1.17.RELEASE
    • 2.1.18.RELEASE
    • 2.2.0.RELEASE
    • 2.2.1.RELEASE
    • 2.2.2.RELEASE
    • 2.2.3.RELEASE
    • 2.2.4.RELEASE
    • 2.2.5.RELEASE
    • 2.2.6.RELEASE
    • 2.2.7.RELEASE
    • 2.2.8.RELEASE
    • 2.2.9.RELEASE
    • 2.2.10.RELEASE
    • 2.2.11.RELEASE
    • 2.2.12.RELEASE
    • 2.2.13.RELEASE
    • 2.3.0.RELEASE
    • 2.3.1.RELEASE
    • 2.3.2.RELEASE
    • 2.3.3.RELEASE
    • 2.3.4.RELEASE
    • 2.3.5.RELEASE
    • 2.3.6.RELEASE
    • 2.3.7.RELEASE
    • 2.3.8.RELEASE
    • 2.3.9.RELEASE
    • 2.3.10.RELEASE
    • 2.3.11.RELEASE
    • 2.3.12.RELEASE
    • 2.4.0
    • 2.4.1
    • 2.4.2
    • 2.4.3
    • 2.4.4
    • 2.4.5
    • 2.4.6
    • 2.4.7
    • 2.4.8
    • 2.4.9
    • 2.4.10
    • 2.4.11
    • 2.4.12
    • 2.4.13
    • 2.5.0
    • 2.5.1
    • 2.5.2
    • 2.5.3
    • 2.5.4
    • 2.5.5
    • 2.5.6
    • 2.5.7
    • 2.5.8
    • 2.5.9
    • 2.5.10
    • 2.5.11
    • 2.5.12
    • 2.5.13
    • 2.5.14
    • 2.5.15
    • 2.6.0
    • 2.6.1
    • 2.6.2
    • 2.6.3
    • 2.6.4
    • 2.6.5
    • 2.6.6
    • 2.6.7
    • 2.6.8
    • 2.6.9
    • 2.6.10
    • 2.6.11
    • 2.6.12
    • 2.6.13
    • 2.6.14
    • 2.6.15
    • 2.7.0
    • 2.7.1
    • 2.7.2
    • 2.7.3
    • 2.7.4
    • 2.7.5
    • 2.7.6
    • 2.7.7
    • 2.7.8
    • 2.7.9
    • 2.7.10
    • 2.7.11
    • 2.7.12
    • 2.7.13
    • 2.7.14
    • 2.7.15
    • 2.7.16
    • 2.7.17
    • 2.7.18
    • Java 17 min
    • 3.0.0
    • 3.0.1
    • 3.0.2
    • 3.0.3
    • 3.0.4
    • 3.0.5
    • 3.0.6
    • 3.0.7
    • 3.0.8
    • 3.0.9
    • 3.0.10
    • 3.0.11
    • 3.0.12
    • 3.0.13
    • 3.1.0
    • 3.1.1
    • 3.1.2
    • 3.1.3
    • 3.1.4
    • 3.1.5
    • 3.1.6
    • 3.1.7
    • 3.1.8
    • 3.1.9
    • 3.1.10
    • 3.1.11
    • 3.1.12
    • 3.2.0
    • 3.2.1
    • 3.2.2
    • 3.2.3
    • 3.2.4
    • 3.2.5
    • 3.2.6
    • 3.2.7
    • 3.2.8
    • 3.2.9
    • 3.2.10
    • 3.2.11
    • 3.2.12
    • 3.3.0
    • 3.3.1
    • 3.3.2
    • 3.3.3
    • 3.3.4
    • 3.3.5
    • 3.3.6
    • 3.3.7
    • 3.3.8
    • 3.3.9
    • 3.3.10
    • 3.3.11
    • 3.3.12
    • 3.3.13
    • 3.4.0
    • 3.4.1
    • 3.4.2
    • 3.4.3
    • 3.4.4
    • 3.4.5
    • 3.4.6
    • 3.4.7
    • 3.4.8
    • 3.4.9
    • 3.4.10
    • 3.4.11
    • 3.4.12
    • 3.4.13
    • 3.5.0
    • 3.5.1
    • 3.5.2
    • 3.5.3
    • 3.5.4
    • 3.5.5
    • 3.5.6
    • 3.5.7
    • 3.5.8
    • 3.5.9
    • 3.5.10
    • 3.5.11
    • 3.5.12
    • 3.5.13
    • 3.5.14
    • 3.5.15
    • 3.5.16
    • 4.0.0
    • 4.0.1
    • 4.0.2
    • 4.0.3
    • 4.0.4
    • 4.0.5
    • 4.0.6
    • 4.0.7
    • 4.0.8
    • 4.1.0
    • 4.1.1

    Versions in green have been tested.

  • spring-boot-starter (Core starter, including auto-configuration support, logging and YAML)
  • JDK 25
  • Maven 3.9.11

Spring Boot - Starter Example Select All Download
  • spring-boot-starter-example
    • src
      • main
        • java
          • com
            • logicbig
              • example
    • pom.xml

    See Also

    Join