Extensions are modular add-ons you apply on top of a template to layer in Docker packaging, databases, setup-v CI, fmt/vet hooks, and more.
An extension is a self-contained package that overlays a template/ tree (and optional metadata) onto a scaffolded V project. Extensions are composable: you can apply multiple compatible extensions in a single command and they are merged intelligently.
Each extension may declare which templates it is compatible with (e.g. web-server, cli-app, systems-app), so the CLI only shows relevant options for your chosen starter.
create-vlang-app my-app --template web-server --addons v-docker github-setup v-fmt-vetExtensions are organized into 7 categories covering the most common V project needs.
When the CLI applies an extension it merges the extension's template/ overlay into the scaffolded project:
template/ directory are copied onto the project root (same pattern as CNA/CPA).docs/ notes without replacing your app entrypoints.compatibleWith lists keep database overlays scoped to templates that need them.Extensions live in the extensions/ directory of the cva-templates repository:
extensions/
└── your-extension-name/
├── template/ # Files merged into the generated project
│ ├── .github/ # Optional CI workflows
│ ├── docs/ # Optional authoring notes
│ └── ...
└── README.mdcreate-vlang-app --list-addonsOr browse the full catalogue on the Extensions page, where you can filter by template and category.