Extensions
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.
What is an extension?
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-vetExtension categories
Extensions are organized into 7 categories covering the most common V project needs.
- · v-docker
- · development-container
- · v-sqlite
- · v-postgres
- · github-setup
- · v-fmt-vet
- · development-container
- · v-docker
- · v-postgres
- · github-setup
- · v-fmt-vet
How extensions work
When the CLI applies an extension it merges the extension's template/ overlay into the scaffolded project:
- Overlay files — files under the extension's
template/directory are copied onto the project root (same pattern as CNA/CPA). - v.mod / docs — extensions may add Makefile targets, CI workflows, compose files, or
docs/notes without replacing your app entrypoints. - Compatibility — optional
compatibleWithlists keep database overlays scoped to templates that need them. - Incompatibilities — conflicting combinations are rejected when declared by the bank metadata.
Extension file structure
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.mdListing available extensions
create-vlang-app --list-addonsOr browse the full catalogue on the Extensions page, where you can filter by template and category.