# Vitesse Lite: a Vue 3 and Vite starter with five features removed on purpose

> Vitesse Lite is the trimmed fork of the Vitesse starter, keeping Vue 3, Vite, pnpm, UnoCSS, file based routing and auto imports while dropping i18n, layouts, SSG, PWA and Markdown. The trade is deliberate but real, and the pnpm catalog protocol adds a setup detail worth knowing before you clone it.

**antfu-collective/vitesse-lite** — ⛺️ Lightweight version of Vitesse

- Repository: https://github.com/antfu-collective/vitesse-lite
- Website: https://vitesse-lite.netlify.app/
- Stars: 1,251 · Forks: 243
- Language: TypeScript
- License: MIT
- Published: 2026-10-17 · Updated: 2026-10-17 · Language: en
- Canonical page: https://hysenlabs.com/projects/antfu-collective-vitesse-lite

## What was cut from Vitesse to make the Lite version

Vitesse Lite describes itself simply as a lightweight version of Vitesse, the opinionated Vite starter template maintained by antfu. The project documentation is explicit about what was removed, and it lists the casualties in struck-through form: i18n, Layouts, SSG, PWA and Markdown.

That list defines the project better than any feature bullet. A starter template is mostly a set of decisions, and this one is the Vitesse decision set with the five heaviest subsystems taken out. Internationalisation goes, which removes the translation layer and its locale bundles. Layouts go, which means there is no nested shell component wrapping a route. Static site generation goes, so the build is a client bundle rather than pre-rendered pages. Progressive web app support goes, and so does the Markdown pipeline.

Everything the README keeps is still Vitesse: Vue 3, Vite, pnpm, ESBuild, file based routing, component auto importing, UnoCSS, icons through Pure CSS, the newer `<script setup>` style, Vitest for unit and component testing, TypeScript, and zero-config Netlify deployment. The full Vitesse project is the place to look if you need any of the removed pieces.

## File based routing and auto imports are the actual payload

Strip away the styling and the starter is two plugins doing real work. Routing comes from Vue Router wired for file system based routing, with the pages living under src/pages. Components are auto imported through unplugin-vue-components, so a component in src/components can be used in a template without an explicit import statement.

There is a third piece that is easy to miss. unplugin-auto-import handles the Vue Composition API and other APIs, which is the difference between a component file that starts with a long import block and one that just uses ref and computed. The template ships the generated type declarations to back this up: auto-imports.d.ts and components.d.ts sit at the repository root, and shims.d.ts is there for module declarations. TypeScript therefore knows about the globals that the plugins inject, rather than treating them as untyped.

Two more plugin choices round it out. unplugin-vue-macros extends the macro and syntax sugar available in Vue, and VueUse is included as a collection of composition APIs. UnoCSS handles styling, described as an on-demand atomic CSS engine, with icons pulled in from Iconify and from Pure CSS Icons through the UnoCSS preset-icons.

## Cloning the template with degit and installing with pnpm

The project offers two starting points. One is the GitHub template flow, where a repository can be created from the template on GitHub. The other is a local clone through degit, which the README prefers for a cleaner git history:

```bash
npx degit antfu-collective/vitesse-lite my-vitesse-app
cd my-vitesse-app
pnpm i # If you don't have pnpm installed, run: npm install -g pnpm
```

The comment on the last line matters. pnpm is the package manager the template is written for, and the README even lists pnpm among the technologies the project is "born with". The package.json declares a specific packageManager field, pnpm@12.3.4, and the repository ships a pnpm-lock.yaml and a pnpm-workspace.yaml, so a lockfile and a workspace definition are part of what you get.

That last file carries an implication. The dependency entries in package.json are not version numbers. They read catalog:frontend, catalog:dev and catalog:build, which is the pnpm catalog protocol for sharing dependency versions across a workspace. In a template that is used as the root of a monorepo, that is exactly what you want: one place defines the version of vue and everything else inherits it.

## Scripts, ports, and the Netlify deployment file

The scripts in package.json define the whole developer loop. Development runs Vite on a fixed port and opens the browser:

```json
"dev": "vite --port 3333 --open"
```

A fixed port of 3333 is worth knowing about, because it means a second checkout on the same machine will collide unless you change it. The remaining scripts are the familiar Vite set: build runs vite build, preview runs vite preview, and lint runs eslint. over the project. Type checking is separate, typecheck runs vue-tsc, and test runs vitest. There is also an up script that invokes taze major -I, a dependency upgrade helper, a small sign of the kind of detail that a mature template carries.

Deployment is handled by netlify.toml at the repository root, and the README calls it zero-config. The repository layout also includes an eslint.config.js using the @antfu/eslint-config package, an uno.config.ts for UnoCSS, a vite.config.ts, a tsconfig.json, a public/ directory, a test/ directory and a src/ directory.

One automation detail: the postinstall script runs npx simple-git-hooks, and the package.json registers a pre-commit hook that runs pnpm lint-staged, with lint-staged configured to run eslint --fix on all staged files. So after installation, commits are checked and formatted automatically.

## The catalog protocol is the one real adoption hurdle

Here is the constraint that deserves attention before anyone copies this template into an existing project. Every dependency in package.json, from vue and vue-router through typescript, vitest and eslint, is referenced as catalog:frontend, catalog:dev or catalog:build. There is no version range next to any of them.

pnpm resolves those references against the catalogs defined in pnpm-workspace.yaml. The template therefore ships a workspace file, and a standalone project that deletes pnpm-workspace.yaml or that is not a pnpm workspace at all has no catalog definitions to resolve against, so the install fails or resolves to nothing useful. If you want the versions pinned for a single application, you have to resolve the catalog entries into concrete version ranges, or keep a pnpm-workspace.yaml with the catalog definitions in it.

There is a second, smaller point in the same area. The resolutions field pins unplugin and vite to catalog:build as well, so even a change in how you resolve catalogs will not let those two drift. The project documentation does not explain the catalog layout in detail, so the practical route is to read pnpm-workspace.yaml directly.

For teams already running pnpm workspaces, this is a feature rather than a problem: a shared version catalogue across several packages is exactly the kind of consistency a starter template can hand you for free.

## Where Vitesse Lite is the wrong choice

The most common reason to reach for this template and then regret it is a content site. Markdown support is one of the removed features, so there is no built-in pipeline for turning a directory of posts into pages, and no Markdown component library wired in. If your project is a blog, a documentation site or any content-heavy application, you are re-adding a large part of what Vitesse provides anyway.

The same applies to internationalisation. Any product with user-facing copy in more than one language has to add its own i18n layer, and the removal is not a small one, since it removes both the plugin and the locale structure.

Static generation and PWA support are the other two, and they matter for different audiences. A marketing site that needs pre-rendered HTML for search engines or a web app that must be installable offline will not find those here. And the missing Layouts feature means there is no built-in nested shell, so a multi-section app needs its own layout composition.

A third limit is the scope of the template itself. This is a starter for a single client-side application, with one Netlify configuration, one ESLint config and one UnoCSS config. It is not a framework with a plugin API or a set of conventions you extend across many packages, and the README is explicit that Vitesse holds the full feature set.

## Conclusion

Vitesse Lite fits teams that want the Vitesse conventions without i18n, layouts, static generation, PWA and Markdown, and who are already on pnpm workspaces; it does not fit projects that need server rendered pages, offline install, or translated copy, and before you commit you should check that the catalog: dependency references in package.json resolve inside your own pnpm-workspace.yaml, since the template expects a workspace setup that a standalone project does not have by default.

## FAQ

### How do I create a new project from Vitesse Lite?

The README gives two options: create a repository from the GitHub template, or clone locally with degit for a cleaner git history using npx degit antfu-collective/vitesse-lite my-vitesse-app, then run pnpm i inside the new directory.

### What features does Vitesse Lite drop compared to Vitesse?

The README lists i18n, Layouts, SSG, PWA and Markdown as dropped. The full Vitesse project is linked as the place to get those features.

### Why do the dependencies in Vitesse Lite use catalog: references?

The package.json entries are written as catalog:frontend, catalog:dev and catalog:build rather than version numbers, which is the pnpm catalog protocol. The template ships a pnpm-workspace.yaml where those catalogs are defined, so the versions are shared across the workspace.

### Which port does the Vitesse Lite dev server use?

The dev script is vite --port 3333 --open, so the development server runs on port 3333 and opens the browser on start.

## Sources

- [antfu-collective/vitesse-lite on GitHub](https://github.com/antfu-collective/vitesse-lite)
- [Issues](https://github.com/antfu-collective/vitesse-lite/issues)
- [License: MIT](https://github.com/antfu-collective/vitesse-lite/blob/main/LICENSE)
- [Project website](https://vitesse-lite.netlify.app/)
- [README](https://github.com/antfu-collective/vitesse-lite/blob/main/README.md)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/antfu-collective-vitesse-lite
