Vuestrata
A Vue 3 application starter that checks its own conventions.
A template for starting Vue 3 applications. Six custom lint rules and four architecture tests check its conventions, and generators write the files and registry entries for a new module, page, theme or component. It ships 12 themes over one set of components.

The problem
Starting a Vue project is easy. Keeping routing, state ownership, module boundaries, API access, auth, themes, permissions, mocks, tests and deployment consistent as the app grows is the expensive part.
The conventions that matter most also fail silently. A module never added to setup.ts does not throw; the feature just never loads. A theme wired into three of its four files does not throw; it renders the wrong surfaces. Demo mocks left in a production build do not throw; they ship.
Conventions enforced by tooling
Vuestrata documents its conventions and also checks the important ones automatically:
- Six custom lint rules: module-scope state, raw palette utilities, inline template handlers, i18n key parity across English, French and Arabic, icon-name parity, and the four files a theme must appear in.
- Four architecture tests: module registry drift, the module contract, docs registration and demo-only access.
- Bundle verification: the build fails if a mock service worker chunk reaches a production artifact, or if a size budget is exceeded.
- Drift checks: toolchain pins and security headers are generated from one definition each, and CI fails when a copy disagrees.
Generators
Each common extension has a generator that writes the files and the registry entries that are easy to forget. --dry-run prints the plan without writing anything.
vpr gen:module payments # CRUD domain: schema, queries, mocks, pages, i18n, registered
vpr gen:page payments refunds # a page, wired into the module's routes
vpr gen:theme midnight # theme, imported and registered in all four places
vpr gen:component Tag # Ui* wrapper (+ --field for a forms composable)
Twelve themes, one set of components
Each built-in theme redefines colour ramps, radii and elevation in both colour modes over the same components, and eight of them change the typeface too. The icon set, the spacing scale and motion stay constant, which is what makes the themes interchangeable.
Updating a copy of the template
Vuestrata is a template you copy, not a dependency you install. Its CLI brings upstream fixes into a project that has already diverged:
vp exec vuestrata diff # what would change; writes nothing
vp exec vuestrata upgrade
Files you never touched are replaced. Files you edited are left alone, with the new version placed beside them to compare.
Authentication adapters
Authentication goes through pluggable adapters: a mock one for demos, JWT, and OAuth with PKCE. Each adapter declares its transport and its capabilities, so the interface hides controls the configured adapter cannot support.
const { login, register, logout, isLoading, error } = useAuth()
A closer look
Twelve themes, one set of components
Browse screenshots of the same landing page in each built-in theme.

Screens



