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.json
├── 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.json
├── 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)

Editor Integration​

Use this command from your editor:

  • Neovim: Not yet available in haft.nvim (CLI only)
  • VS Code: Coming soon (preview →)
  • IntelliJ IDEA: Coming soon (preview →)

See Also​