# Project Generator CLI
A CLI tool for generating Spring Boot projects.
[](https://github.com/sivaprasadreddy/progen/actions/workflows/build.yml)
[](https://github.com/sivaprasadreddy/progen/actions/workflows/release.yml)
## Motivation
There are a few good project generator tools exist, such as [JHipster](https://www.jhipster.tech/), [Bootify](https://bootify.io/), [generator-springboot](https://github.com/sivaprasadreddy/generator-springboot).
The reasons for creating this new **progen** CLI tool are:
* To generate the application with minimal code and include only the most commonly used features and configurations.
* We should be able to use the tool offline to create the projects.
* We should be able to use the tool without requiring the installation of other languages SDKs.
For example, for generating a Java application, we shouldn't need to install Node.js or Python, etc.
## features
The progen generates a Spring Boot application with the following features configured:
* [Spring Boot](https://spring.io/projects/spring-boot) project with **Maven** and **Gradle** support
* Persistence Frameworks: **Spring Data JPA**, **Spring JdbcClient**, **jOOQ**
* Databases: **PostgreSQL**, **MySQL**, **MariaDB** databases
* Database migration Tools: [Flyway](https://www.red-gate.com/products/flyway/community/) and [Liquibase](https://www.liquibase.com/)
* [Angular](https://angular.dev/) with [TailwindCSS](https://tailwindcss.com/) for Single Page Apps
* [Thymeleaf](https://www.thymeleaf.org/) with [TailwindCSS](https://tailwindcss.com/) for Web Apps
* [HTMX](https://htmx.org/) with [htmx-spring-boot](https://github.com/wimdeblauwe/htmx-spring-boot)
* [Spring Security](https://spring.io/projects/spring-security) configuration for Web Apps
* **Spring Security JWT** configuration for REST APIs
* [Spring Modulith](https://spring.io/projects/spring-modulith) configuration
* [Spring Cloud AWS](https://awspring.io/) support with [Floci](https://floci.io/floci/) configuration
* [Spring RabbitMQ](https://spring.io/projects/spring-amqp) configuration
* [Redis Caching](https://docs.spring.io/spring-boot/reference/io/caching.html#io.caching.provider.redis) configuration
* Email support with [MailPit](https://mailpit.axllent.org/) and [Testcontainers Mailpit](https://github.com/martinellich/testcontainers-mailpit)
* Swagger UI Integration using [springdoc-openapi](https://springdoc.org/)
* [Testcontainers](https://java.testcontainers.org/) based Testing and Local Development Setup
* [Docker Compose](https://docs.docker.com/compose/) based Local Development Setup
* [Kubernetes](https://kubernetes.io/) manifests generation based on the selected features and databases
* [BootUI](https://www.julien-dubois.com/boot-ui/)
* GitHub Actions configuration
* Code formatting using [Spotless](https://github.com/diffplug/spotless)
* [SDKMAN](https://sdkman.io/) configuration
* [JUnit](https://junit.org/)
* [Taskfile](https://taskfile.dev/) to execute commonly used commands
* [Renovate](https://docs.renovatebot.com/)
## Installation
### Using Go Install
If you have Go installed on your machine, you can use the following command to install `progen`:
```shell
$ go install github.com/sivaprasadreddy/progen@latest
$ progen --help
```
> [!IMPORTANT]
> On MacOS, you may get the error **"progen cannot be opened because the developer cannot be verified"**.
> To fix this, you can select the progen binary in Finder, hold control and click, and select Open.
> You will then be prompted to confirm that you want to open the binary. After confirming, you can run progen as usual.
### Using OS specific binary
Download the latest binary for your OS and Architecture(arm64, x86_64)
from https://github.com/sivaprasadreddy/progen/releases.
## Usage:
```shell
# To use interactive shell
$ progen
# To create progen config file
$ progen init
Generated .progen.json successfully
# Generating a new project using .progen.json configuration
$ progen -c .progen.json
```
## License
The **progen** is Open Source software released under the [Apache 2.0 License](https://www.apache.org/licenses/LICENSE-2.0.html).