CLI tool
spring-projects/spring-boot avatar
spring-projects/spring-boot

Spring Boot: What the Repository Actually Contains and How to Start

Spring Boot helps you to create Spring-powered, production-grade applications and services with absolute minimum fuss.

81,497 stars43,174 forksJavaApache-2.0

At a glance

What is it?
Spring Boot is a Java framework for stand-alone Spring applications with embedded servers and externalized configuration. This review covers how the project is structured, how to get a first application running, and where the defaults stop helping.
Who is it for?
Adopt Spring Boot if you are building a Java service and want embedded servers, externalized configuration and health checks without assembling that stack yourself. Do not adopt it if you need a non-JVM runtime, or if you want to avoid Spring's dependency graph entirely.
Can I use it commercially?
Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 4 days ago.
What is it written in?
Mainly Java, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 25, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

What Spring Boot is for, and who it is not for

Spring Boot targets a specific kind of work: Java services that need to start as a single artifact. The README states the project takes "an opinionated view of the Spring platform so that new and existing users can quickly get to the bits they need." In practice that means you get an embedded server, a configuration system, security, metrics and health checks without wiring each one by hand. The README lists exactly these as non-functional features common to large classes of projects.

The intended user is a Java developer who already knows, or is willing to learn, the Spring programming model. Spring Boot is a layer on top of other Spring projects, not a replacement for them. The README says so directly: "Spring Boot builds on many other Spring projects." If you have never written a Spring bean, the framework's own getting-started guide exists because the Boot layer assumes that base.

It is backend tooling. Nothing in the repository suggests a frontend story. Applications are Java programs started with java -jar, or deployed as WAR files to a servlet container. The README also mentions a command-line tool that runs Spring scripts, which is a smaller, separate surface.

Two explicit design commitments are worth noting because they constrain what you can do. The README says there is "absolutely no code generation and no requirement for XML configuration." That is a real boundary: if your organization's tooling depends on generated sources or XML descriptors, Spring Boot will not produce them for you.

How auto-configuration and starters fit together

The mechanism visible in the repository is a set of modules rather than one monolith. The top-level entries include core, autoconfigure-related configuration metadata, loader, cli, starter, buildpack, platform and test-support. The starter directory is where the dependency bundles live. A starter is not code you call; it is a curated set of dependencies that a build tool resolves.

The configuration-metadata directory is the other half. It describes the properties that auto-configuration classes read, which is how an IDE can offer completion for keys in application.properties or application.yml. This is the part of the design that makes the defaults discoverable rather than magic.

At runtime the flow is conventional: your class is annotated, SpringApplication.run boots the context, auto-configuration classes inspect what is on the classpath and register beans accordingly. The README's teaser application shows the whole shape in about fifteen lines, with a single annotation combining configuration, auto-configuration and component scanning.

The loader directory points at a detail that matters for deployment. Spring Boot applications are typically packaged as executable jars with a nested structure, which is why the loader module exists at all. That packaging is what lets java -jar work on a fat archive. If you have ever wondered why a Boot jar cannot be unzipped and run like a plain archive, the loader is the answer.

The opinionated part is the trade-off. Auto-configuration decides for you until you override it. The README frames this as a goal: be opinionated but "get out of the way quickly as requirements start to diverge from the defaults." Getting out of the way is done by declaring your own bean, which wins over the auto-configured one. That works, but it means debugging a misconfiguration often starts with finding which auto-configuration class made the choice you did not want.

Install and a first real application

The README does not give a package-manager install. It points at the reference documentation for installation instructions and a getting-started guide, and it says you can use Spring Boot to create stand-alone Java applications started with java -jar. The practical entry point people use is the project's Initializr, which generates a build file and skeleton. The repository itself does not document that flow beyond linking to spring.io guides.

If you want to build the framework from source, the README is explicit: you need JDK 25, and you use the Gradle wrapper. This is not required to use Spring Boot, only to build it.

bash
$ ./gradlew publishToMavenLocal

The README says this builds all modules and publishes them to your local Maven cache, and that it will not run any of the tests. If you want everything including tests, the documented alternative is the build task.

bash
$ ./gradlew build

For an actual application, the README gives this complete example. It is a single class with a REST endpoint, and it is the smallest thing that runs.

java
import org.springframework.boot.*;
import org.springframework.boot.autoconfigure.*;
import org.springframework.web.bind.annotation.*;

@RestController
@SpringBootApplication
public class Example {

	@RequestMapping("/")
	String home() {
		return "Hello World!";
	}

	public static void main(String[] args) {
		SpringApplication.run(Example.class, args);
	}

}

What you should see is a process that starts, logs its startup, and serves a response at the root path. The README does not state a default port here; the reference documentation is where that lives. The guides it links are the actuator guide for adding management endpoints and the introductory guide for creating, running and adding management services to an application.

Where the opinionated defaults stop helping

The strongest limitation is the one the README states as a virtue. No code generation and no XML configuration means every integration that expects a generated artifact or a descriptor has to be adapted. Annotation processors and schema-first toolchains do not disappear because Spring Boot ignores them; you still have to configure them in your build.

Auto-configuration is conditional on the classpath. That is convenient right up to the moment two libraries both want to own the same bean type. The failure mode is a startup error naming a bean that you never declared, and the fix is to exclude an auto-configuration class or define your own bean. The README does not document the exclusion mechanism; it is in the reference documentation.

Version pressure is a genuine cost. The repository shows three release lines in flight at the same time: v4.0.8, v4.1.1 and v4.2.0-M1, all with pushes on 2026-08-20 and 2026-08-21. That is normal for this project, but it means the version you pick determines which starters and which JDK you can use. The README's own build requires JDK 25, which is a strong signal about the baseline for recent lines.

Spring Boot is also the wrong tool for a small script or a short-lived process. The startup cost of a full application context is real, and the framework's value comes from the non-functional features the README lists. If you need none of them, a plain Java program or a lighter HTTP library will be less to operate. The CLI exists for script-like use, but it is a separate surface from the application model.

Finally, the README does not document rollback or downgrade procedures. It points at the wiki release notes for upgrade instructions. If you need a documented downgrade path, the repository is silent on it.

Spring Boot compared with plain Spring Framework

The real alternative is not another framework; it is Spring Framework without the Boot layer. Spring Framework gives you the container, dependency injection and web support, and you assemble the rest: you choose and configure the servlet container, you write the configuration, you add the health and metrics endpoints yourself.

The difference in approach is who makes the decisions. With plain Spring, every choice is explicit and visible in your configuration. With Spring Boot, the choices are made by auto-configuration classes and recorded in configuration metadata, and you only see them when you override one. That is the whole trade: less boilerplate up front, more indirection when you need to change something.

The README frames the second goal as being opinionated but getting out of the way quickly. Whether that holds depends on how far your requirements diverge. If your application is a conventional HTTP service with a database, the defaults will fit. If your architecture is unusual, you will spend time fighting the conditions that decide which beans get registered, and at that point plain Spring is the more direct tool.

A second alternative for deployment is building a WAR and deploying to an external servlet container. The README explicitly supports this alongside java -jar. Teams with existing container infrastructure sometimes prefer it, at the cost of losing the self-contained artifact.

Maintenance, release lines and the Apache 2.0 licence

The repository is not archived, and the most recent push recorded is 2026-08-20. Three release lines appear in that window: v4.2.0-M1, v4.1.1 and v4.0.8. The presence of a milestone alongside two patch releases tells you the project maintains multiple lines at once, which is good for stability but means you must choose deliberately which line you follow.

Upgrade cost is documented, not implicit. The README says that if you are upgrading, you should read the release notes on the GitHub wiki for upgrade instructions and "new and noteworthy" features. That is the project's own answer to the migration question, and it is the first place to look before moving between major lines.

There is a SUPPORT.adoc entry at the top level of the repository, which is where support policy would live. The README does not summarize it, so read that file rather than assuming a support window.

Spring Boot is released under Apache-2.0, and LICENSE.txt is at the repository root. Apache-2.0 is a permissive licence that allows commercial use and modification, and it includes a patent grant. It also requires that you preserve copyright and licence notices and state significant changes. If you redistribute Spring Boot inside a product, those obligations apply. This is a description of the licence text, not legal advice; have counsel review your distribution if the stakes are high.

The dependency graph is the hidden maintenance cost. Spring Boot builds on other Spring projects, as the README states, so an upgrade to Boot is often an upgrade to several libraries at once. Budget for that, and use the release notes as the checklist.

Editorial conclusion

Adopt Spring Boot if you are building a Java service and want embedded servers, externalized configuration and health checks without assembling that stack yourself. Do not adopt it if you need a non-JVM runtime, or if you want to avoid Spring's dependency graph entirely. Before committing, verify the exact version line you will run (the repository shows 4.0.8, 4.1.1 and a 4.2.0 milestone), read the release notes for the upgrade path, and confirm that the starters you need exist for that line. The first thing to check is whether your build tool can resolve the version you picked, because that determines everything else.

Frequently asked questions

What is Spring Boot used for?

It is used to create stand-alone Java applications and services that start with java -jar, or to build WAR deployments for an external servlet container. The README lists embedded servers, security, metrics, health checks and externalized configuration as the non-functional features it provides.

Is Spring Boot for frontend or backend?

Backend. The README describes Spring-powered applications and services, a command-line tool for Spring scripts, and WAR or executable jar deployment. Nothing in the repository describes a frontend rendering layer.

How to install Spring Boot?

The README does not give a package-manager install; it points to the reference documentation's installation page and the getting-started guide. Building the framework yourself requires JDK 25 and the Gradle wrapper, and is not needed to use it.

How to use Spring Boot in Java?

The README's teaser shows the full pattern: a class annotated with @RestController and @SpringBootApplication, a request mapping method, and a main method calling SpringApplication.run. The linked getting-started guide covers creating and running an application step by step.

How to use Spring Boot Actuator?

The README links a dedicated guide, Building a RESTful Web Service with Spring Boot Actuator, which shows how to create a REST service and configure the server. Actuator itself is one of the non-functional features the README lists as a project goal.

Is Spring Boot still relevant in 2026?

The repository is not archived, and its most recent recorded push is on 2026-08-20, with v4.2.0-M1, v4.1.1 and v4.0.8 all released in that window. That is evidence of ongoing release activity, not a judgement about fit for your project.

Official sources

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
For maintainers

Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/spring-projects-spring-boot.svg)](https://hysenlabs.com/projects/spring-projects-spring-boot)
Community notes

Community notes