Craft Starter: a project set up by conversation.
An opinionated, interactive starter for Craft CMS. One command asks a few questions and leaves you with a configured DDEV project: Tailwind CSS 4, TypeScript, Alpine.js, and only the integrations you chose.
01In use
- Role
- Design, architecture and engineering
- Stack
- Craft CMS 5
- DDEV, Node 22
- Vite, Tailwind CSS 4
- TypeScript, Alpine.js
- Status
- Open source, MIT
- Since
- 2025 to present
- 10 steps from an empty folder to a running site
- 3 hosting targets configured for
02The problem
Every project began with the same week.
A new Craft project used to start by copying the last one and removing what did not apply. Hosting config for a provider this client does not use. A critical-CSS pipeline that made every build slow. Environment variables for plugins that were never installed. Each copy drifted a little further from the others, and the first week of every engagement went on setup that had been done twenty times before.
Most starters are a template you subtract from: everything is in, and the first job is removing what does not apply. This one is a set of decisions you make. It asks what the project is, writes only what that answer needs, and knows the plugins, editions, hosts and salts well enough to get the details right without you.
03The conversation
Ask once, review, then do everything.
The installer walks through the Craft profile, project details, sites, database, plugins with their real edition lists, hosting and email, then shows the whole configuration at once. Any section can be reopened before a single file is written. Only then does it generate the project files, start DDEV, install Craft and the plugins, apply project config and build the frontend, reporting each step as it goes.
Craft 5 is the default. A second profile scaffolds the Craft 6 alpha, clearly warned as experimental, so the next major can be tried on a real project layout before it matters.
git clone git@github.com:LindemannRock/craft-starter.git atlas
cd atlas
make createSecurity keys, the app ID and per-plugin salts are generated locally and never committed. The whole run is idempotent: run it again and it converges on the same result rather than breaking what is there.
04Only what you chose
A decision changes the project, not just a setting.
The point of asking is to leave nothing dead in the repository. Declining a feature removes its dependencies, its config and its environment variables. Choosing a host writes that host's configuration and none of the others. Every conditional is reversible: run the installer again, change your mind, and the project follows.
| You choose | The project gets |
|---|---|
| Critical CSS off | The critical plugin and about twenty Chromium packages removed from the DDEV image. Fast builds by default. |
| Redis cache | The DDEV Redis add-on, the Yii Redis package, cache in database 0. Sessions in database 1 if you say yes to the follow-up. |
| Servd | Asset storage plugin, credentials or clearly marked placeholders, and a verify command before deploy. |
| Craft Cloud | The Cloud extension and its manifest for the chosen PHP version. Built files ignored, critical SSI disabled. |
| Two or more sites | Sites created through project config, translation files per locale, a switcher that is a toggle for two and a menu for more. |
| An analytics plugin | A unique salt per plugin for IP hashing, and an optional local location fallback limited to what every selected plugin supports. |
05Living with it
The installer stays useful after day one.
The same Makefile that creates the project runs it. One command re-syncs a checkout from its lockfiles, project config and setup manifest. Another enables, repairs or removes Redis after the fact. Updates open an interactive picker instead of a wall of targets. Releases are cut from conventional commits, formatting is shared with every client project, and the CLI has its own unit tests that run without DDEV.
The installer also maintains its own knowledge. A plugin registry behind the prompts is checked against Packagist, bumps versions with confirmation on majors, detects a plugin's Craft editions when one is added, and pulls each plugin's default config from its repository. The list you are offered on day one is the list that is true that day.
Device testing is a command away: share the local site across a private network, or publicly for a client who has nothing installed.
06As a product
Open source, and the floor under every client build.
The starter is public under the MIT licence. It is also the foundation every new client project stands on, which is why its conditionals are careful: a wrong default here becomes a wrong default everywhere. The plugin family, the search platform and the token tooling all assume this ground, and the starter knows their edition lists, environment variables and salts.
