Introducing Craft: start your next Java app with the parts already written

Craft is a free, browser-based generator that builds a runnable Spring Boot and Vaadin 25 project with the AppJars modules you choose already wired in.

Craft, the AppJars project generator, with several modules selected and a live preview of the generated application

Every business application starts the same way. Before you write the first line of the feature your customer actually asked for, someone has to build a login screen, users and roles, a navigation menu, an audit trail, outgoing email, runtime settings, translations and a way to run background jobs. It is necessary work, it is rarely the interesting part, and it has usually been built a dozen times before in the same company.

We built AppJars to take that work off the table: each AppJar is a production-ready module, backend and Vaadin UI, that you add to a Spring Boot application as a Maven dependency. One step was still left to you, though: wiring the modules into a project. Today we are closing that gap with Craft.

What Craft is #

Craft is a project generator that runs entirely in your browser at craft.appjars.com. You pick the AppJars you need and download a Maven project, Spring Boot and Vaadin 25, with security, navigation, properties and the theme already set up for those modules. Then you unzip it and run:

mvn spring-boot:run

Or leave Include Docker deployment selected and start the complete application, including its backend services, with:

docker compose up -d

You don’t need an account or a license key. Every module runs in free mode, with record and operation limits that are enough to evaluate it. When you move to production, you add your license and the limits go away. The code stays exactly the same.

Craft with User Manager, Activity Log, Email Manager and Issue Tracker selected, and a live preview of the generated application
Pick modules on the left; the preview on the right shows the application you are about to download.

How it works #

1. Pick your modules #

The page lists all eleven AppJars: Activity Log, AI Support, Configuration Manager, Data Query, Dynamic Menu, Email Manager, I18N Manager, Issue Tracker, Process Manager, User Manager and User Profile. Select any combination. No module depends on another, so you can start with one and add the rest later. The Full Bundle card selects all of them at once.

Each card tells you how many files the module adds to your project. As you select modules, the preview adds their views to the generated application’s navigation.

2. Describe your project #

Fill in the usual Maven coordinates (group id, artifact id, package name) and the application’s display name. Then choose:

  • Java 21 or Java 25.
  • H2 or PostgreSQL. H2 needs no setup, which makes it the fastest way to try things out. PostgreSQL comes with a compose.backend.yaml that starts the database for you. AI Support requires PostgreSQL because its knowledge base uses vector search.
  • A Docker deployment, selected by default. It includes a multi-stage Dockerfile that builds the production application inside Docker, so the host does not need Java or Maven. Its compose.yaml always means the complete deployment: the application and every required backend service together. Uncheck the option if you only want the Maven/IDE workflow.

3. Make it look like yours #

Pick a starting theme (Vaadin’s Lumo or Aura, or one of Craft’s two variants, Graphite and Marble), then set the primary and secondary colors, the font family and the corner radius. The preview updates as you go. All of it is written to a single styles.css as plain CSS custom properties, so you can change it later in any text editor without learning a theming system.

4. Download and run #

Click Download project and unzip the file. For local development, run mvn spring-boot:run; PostgreSQL projects tell you how to start the database first.

With the default Include Docker deployment option, one command from the project root starts the complete environment:

docker compose up -d

On the first run, Docker builds the optimized Vaadin application and downloads the required images. PostgreSQL and pgvector containers have a health check, and Compose starts the application only after its database reports healthy. The app is then available at localhost:8080. You can change the published application and database ports in .env.

When you want to run the application from Maven or your IDE but keep its backend in containers, start only the backend stack:

docker compose -f compose.backend.yaml up -d

The generated README.md documents both workflows and, when a security module is included, tells you which user to log in with.

What you get in the zip #

Craft doesn’t produce a toy. It produces the same project a senior developer would set up by hand, with a comment next to each decision that isn’t obvious:

FileWhat it does
pom.xmlSpring Boot parent, the Vaadin BOM, the AppJars Maven repository, every AppJar pinned to a released version, and a production profile for the optimized frontend build.
Application.javaEntry point with the component, entity and Vaadin package scanning each module needs.
SecurityConfiguration.java and LoginView.javaSpring Security with Vaadin’s security configurer, generated when you pick a module that provides authentication (User Manager or Issue Tracker).
MainLayout.javaThe application shell. The side navigation lists every view of every selected module, and each entry checks access before it is shown. With Dynamic Menu selected, the menu comes from the database instead and MainLayout declares no entries.
config/*Config.javaOne small class per module that places its views inside your layout.
application.propertiesDatabase, Vaadin and per-module settings, grouped and commented.
styles.cssYour theme as CSS variables.
README.md and AGENTS.mdHow to run, build and extend the project, for you and for the coding agent you work with.
compose.yaml, Dockerfile, .dockerignoreThe complete containerized application and its required backend services when Docker deployment is selected.
compose.backend.yamlPostgreSQL or pgvector on its own for Maven and IDE development. It is generated whenever the selected project needs that backend, independently of the Docker deployment option.
.env.exampleConfigurable host ports and the environment settings required by the selected modules.

Two details are worth calling out.

Modules know about each other. When you combine modules, Craft wires the integrations between them. With Configuration Manager and User Manager together, per-user settings are tied to your real users. If both User Manager and Issue Tracker are selected, User Manager handles authentication for the whole application. With Dynamic Menu selected, it takes over the whole navigation: on first start it fills the menu with the home page and every view of the other modules, and from then on you edit the menu at runtime in Menu Items instead of in code. Entries that point at AppJars views don’t count toward the free-mode limit, so the complete menu works without a license.

Identical choices produce an identical project. Generation is deterministic and happens entirely in your browser.

What will you build? Ten starting points #

The fastest way to understand Craft is to picture the application you’d build with it. Here are some combinations we’ve seen work well. Each one is a starting point: select the modules, download the project and start writing the part only you can write.

An internal back office #

Most companies have a few internal tools held together with spreadsheets. Start with who can do what, a menu your operations team can rearrange without a deploy, settings you can change at runtime, and a record of who changed what.

A customer support desk #

Tickets with workflows and time tracking, notification emails, and an AI assistant that answers from your own documentation before the ticket reaches a human. Choose PostgreSQL for this one.

A reporting and operations portal #

Turn stored queries into parameter forms, grids, charts, dashboards and PDF reports. Schedule the heavy ones overnight with cron expressions and email the results to the people who need them in the morning.

A multilingual SaaS MVP #

If you plan to sell in more than one market, build internationalization in from day one: users and roles, profiles with avatars, translations your team edits at runtime, and per-customer settings.

An audit-ready application for a regulated industry #

Finance, healthcare and the public sector ask the same questions: who accessed what, and when? Pair fine-grained access rules with an activity trail and automatic retention, and hand auditors reports they can run themselves.

A knowledge assistant for your team #

Upload manuals, policies and procedures to a document knowledge base and give your team a streaming chat that answers from them. AI Support can also reach people on WhatsApp.

An agency or consulting workspace #

Projects, issues, custom fields and time tracking for client work, status updates by email, and Data Query reports on the hours logged, by client and by project, at the end of the month.

A back-end control room for integrations #

Many systems are mostly invisible: they sync data, call partner APIs and send notifications. Give yours a proper home: scheduled jobs with execution history and manual triggers, runtime configuration for endpoints and feature flags, and Email Manager to queue the notifications your jobs send.

A white-label product for several customers #

Same code, different look and navigation for each customer: dynamic menus with role-based visibility, runtime settings per installation, and translations for every market. Use Craft’s appearance settings to create each customer’s first theme in minutes.

Everything, to explore #

Not sure where to start? Select the Full Bundle card, download the project and click through every module in one application. It’s the quickest way to see what AppJars can already do for you.

Tips for getting the most out of it #

  • Start small. You can add modules later: each one is a Maven dependency plus a little configuration, and generating a second project in Craft shows you exactly what to copy.
  • Keep what you don’t need out of the menu. Remove navigation entries from MainLayout, or in Menu Items if you use Dynamic Menu, without removing the module. The routes stay registered, so the views are still there when you want them.
  • Let your coding agent read AGENTS.md. It describes the project layout and the rules that are easy to break, such as keeping your base package in @EnableVaadin or keeping an access annotation on the layout. Agents that read it make fewer confident mistakes.
  • Build for production with mvn clean package -Pproduction and run the resulting jar like any other Spring Boot application.
  • Ship the whole environment by selecting Docker deployment and using docker compose up -d. Craft builds the production jar inside the image and keeps the application and its services on the same Compose network.

Try it now #

Open craft.appjars.com, pick a few modules and have an application running in minutes. If you want to go deeper first, browse the catalog or read the documentation. If you have an idea for a combination we didn’t list, or something you’d like Craft to generate, tell us. We read every message.

The best part of your application is the part nobody else can write. Craft exists so you can get to it sooner.

Share LinkedIn X Email

Written by

Martín López

CEO, Flowing Code

Martín leads Flowing Code, the company behind AppJars. Flowing Code builds enterprise Java applications and open source Vaadin add-ons, and packages what it keeps rebuilding into AppJars.

All posts