Skip to main content

haft init

Initialize a new Spring Boot project with an interactive wizard or command-line flags.

Usage

haft init [name] [flags]

Description

The init command creates a new Spring Boot project. When run without flags, it launches an interactive TUI wizard that guides you through the configuration.

The wizard presents all dependencies from Spring Initializr organized by category (Web, SQL, Security, etc.) with descriptions and search functionality.

Examples

haft init

Launches the full interactive wizard.

With Project Name

haft init my-app

Starts the wizard with the project name pre-filled.

Non-Interactive Mode

haft init my-app \
--group com.example \
--artifact my-app \
--java 21 \
--spring 3.4.0 \
--build maven \
--deps web,data-jpa,lombok \
--no-interactive

Creates a project without any prompts.

Quick Start with Defaults

haft init my-api -g com.company -j 21

Uses defaults for unspecified options.

Flags

FlagShortDescriptionDefault
--group-gGroup ID (e.g., com.example)com.example*
--artifact-aArtifact IDProject name*
--java-jJava version (17, 21, 25)21*
--spring-sSpring Boot versionLatest stable*
--build-bBuild tool (maven, gradle, gradle-kotlin)maven*
--depsDependencies (comma-separated)None
--packageBase package nameAuto-generated*
--packagingPackaging type (jar, war)jar*
--configConfig format (properties, yaml)yaml*
--descriptionProject descriptionEmpty
--dir-dOutput directoryCurrent directory
--no-interactiveSkip interactive wizardfalse
--jsonOutput result as JSONfalse

*Defaults shown are wizard pre-selections. When using --no-interactive, these become required values if not explicitly provided.

Global Flags

FlagDescription
--verboseEnable verbose output
--no-colorDisable colored output

Wizard Steps

The interactive wizard guides you through 12 configuration steps:

StepFieldDescription
1Project NameName of your application
2Group IDMaven group (e.g., com.example)
3Artifact IDMaven artifact name
4DescriptionProject description
5Package NameBase package (auto-generated from group + artifact)
6Java Version17 (LTS), 21 (LTS - Recommended), or 25
7Spring BootSelect from available versions
8Build ToolMaven, Gradle (Groovy), or Gradle (Kotlin DSL)
9PackagingJAR or WAR
10Config FormatProperties or YAML
11DependenciesSearch and select from all Spring starters
12Git InitInitialize a Git repository

Dependency Selection

The dependency picker provides:

  • Search: Press / to search by name or description
  • Categories: Press Tab to cycle, or 0-9 to jump directly
  • Selection: Press Space to toggle, Enter to confirm

Available Categories

KeyCategoryExamples
0AllShow all dependencies
1Developer ToolsDevTools, Lombok, Configuration Processor
2WebSpring Web, WebFlux, GraphQL
3SQLJPA, JDBC, MySQL, PostgreSQL
4NoSQLMongoDB, Redis, Elasticsearch
5SecuritySpring Security, OAuth2
6MessagingKafka, RabbitMQ
7CloudConfig, Discovery, Gateway
8ObservabilityActuator, Micrometer
9TestingTestcontainers

Generated Structure

Maven Project

my-app/
├── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/example/myapp/
│ │ │ └── MyAppApplication.java
│ │ └── resources/
│ │ └── application.yml
│ └── test/
│ └── java/
│ └── com/example/myapp/
│ └── MyAppApplicationTests.java
├── .gitignore
├── .haft.yaml
├── mvnw
├── mvnw.cmd
└── pom.xml

Gradle Project

my-app/
├── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/example/myapp/
│ │ │ └── MyAppApplication.java
│ │ └── resources/
│ │ └── application.yml
│ └── test/
│ └── java/
│ └── com/example/myapp/
│ └── MyAppApplicationTests.java
├── gradle/
│ └── wrapper/
│ └── gradle-wrapper.properties
├── .gitignore
├── .haft.yaml
├── build.gradle # or build.gradle.kts for Kotlin DSL
├── settings.gradle # or settings.gradle.kts for Kotlin DSL
├── gradlew
└── gradlew.bat

Exit Codes

CodeDescription
0Success
1Error (invalid flags, generation failed)

See Also