@getvitops/create
Project templates — scaffold a wired-up site with `vp create @getvitops`.
On this page
npm i -D @getvitops/create
Project templates for the Vitops design system, consumed by
Vite+’s vp create via the createConfig.templates
manifest in this package’s package.json.
Usage
# Interactive picker over this package's templates
vp create @getvitops
# Scaffold a specific template directly
vp create @getvitops:emdash
vp create copies the template, initializes git, installs dependencies, and
(optionally) writes agent/editor config — see vp create --help.
Templates
emdash
An EmDash CMS website on Cloudflare Workers,
with every relevant @getvitops/* package pre-wired:
@getvitops/astro— thevitops()integration: design-system CSS generated fromdesign-system.json(Tailwind v4 format, layout-scoped viacss.inject: false), favicons/PWA fromsrc/assets/logo.svg, and the web-component runtime copied intopublic/vitops/.@getvitops/emdash— the EmDash native plugin: Vitops Portable Text blocks (image compare, copy snippet, banner, disclosure, carousel) editors insert from the admin slash menu, rendered with the design-system web components (accessible no-JS fallbacks included).@getvitops/cli—vitopson the scaffolded project’s PATH forvitops validate,vitops agents, and manualvitops generateruns.- EmDash on Cloudflare — D1 database + R2 media via
@emdash-cms/cloudflare, a Worker entry with the cron trigger for scheduled publishing, and a seed (seed/seed.json): thepagescollection,primary/footermenus, and settings apply on first boot; the starter pages (home, about, terms, privacy — plus a 404 route) publish when the setup wizard’s “include sample content” option is chosen. - GitHub bootstrap —
pnpm run init:githubcreates a same-named GitHub repo via theghCLI, pushesmain+dev, and makesdevthe default branch (idempotent;--dry-run/--publicflags). - Hosting seam — astro.config resolves its adapter + EmDash
database/storage through
vitopsHosting()from@getvitops/emdash(cloudflaredefault;nodefor VPS/docker/k8s after installing@astrojs/node+better-sqlite3), andpnpm run init:hostingprovisions the platform (cloudflare: dev D1 + R2 created via wrangler,DEV_D1_ID/CLOUDFLARE_ACCOUNT_IDrepo secrets set viagh; idempotent,--dry-run). - dev → main promotion flow — GitHub Actions deploying
devto an isolated-devworker (dev.<domain>with a custom domain; own D1/R2 viascripts/build-dev-wrangler.mjs, which hard-fails withoutDEV_D1_ID) andmainto prod, plus a manualpromote.ymlworkflow and a matchingpromoteagent skill (.agents/skills/promote/) that opens thedev → mainPR with auto-merge. - AI tooling baked in —
.mcp.jsonwith the Astro + EmDash docs MCP servers, and a Claude Code web SessionStart hook that installs Node 24 (matchingdevEngines) and the pinned pnpm in the remote container.
The scaffolded README walks through local dev (pnpm dev — no Cloudflare
account needed) and deploy (wrangler login && pnpm deploy — wrangler
provisions the D1/R2 resources on first deploy).
Adding a template
- Add a directory under
templates/<name>/(copied as-is; ship_gitignoreinstead of.gitignore—vp createrenames it). - Add a
{ name, description, template: './templates/<name>' }entry tocreateConfig.templatesinpackage.json.
Template dependencies must use concrete npm ranges (no workspace:* /
catalog: — the scaffolded project lives outside this monorepo).