Awesome
<p align='center'> <img src='https://user-images.githubusercontent.com/11247099/154486817-f86b8f20-5463-4122-b6e9-930622e757f2.png' alt='Vitesse - Opinionated Vite Starter Template' width='600'/> </p> <p align='center'> Mocking up web app with <b>Vitesse</b><sup><em>(speed)</em></sup><br> with modular design pattern. </p> <br>If you are really into the "Vitesse" starter template created by Anthony Fu (Vue core team member) but want to use the clean architectural pattern instead of monolithic architecture, then you can clone this repo and use your own project. If you want a quick introduction concept, you can read this very short blog post.
<br> <p align='center'> <a href="https://vite-vue3-clean-arch.netlify.app/" target="_blank">Live Demo</a> </p> <br>Features
-
π File based routing
-
π Layout system
-
π² PWA
-
π¨ Tailwind CSS V3 - next generation utility-first CSS framework
-
π I18n ready
-
π Shipped with Apollo GraphQL
-
π Markdown Support
-
π₯ Use the new
<script setup>
syntax -
π€π» Reactivity Transform enabled
-
π₯ APIs auto importing - use Composition API and others directly
-
π¨ Static-site generation (SSG) via vite-ssg
-
π¦ Critical CSS via critters
-
π¦Ύ TypeScript, of course
-
βοΈ Unit Testing with Vitest, E2E Testing with Cypress on GitHub Actions
-
βοΈ Deploy on Netlify, zero-config
Pre-packed
UI Frameworks
- Tailwind CSS V3 - Rapidly build modern websites without ever leaving your HTML
Icons
- Iconify - use icons from any icon sets πIcΓ΄nes
unplugin-icons
- icons as Vue components
Plugins
- Vue Router
vite-plugin-pages
- file system based routingvite-plugin-vue-layouts
- layouts for pages
- Pinia - Intuitive, type safe, light and flexible Store for Vue using the composition api
unplugin-vue-components
- components auto importunplugin-auto-import
- Directly use Vue Composition API and others without importingvite-plugin-pwa
- PWAvite-plugin-vue-markdown
- Markdown as components / components in Markdownmarkdown-it-prism
- Prism for syntax highlightingprism-theme-vars
- customizable Prism.js theme using CSS variables
- Vue I18n - Internationalization
vite-plugin-vue-i18n
- Vite plugin for Vue I18n
- VueUse - collection of useful composition APIs
@vueuse/head
- manipulate document head reactivelyvite-ssg-sitemap
- Sitemap generatorvite-plugin-vue-inspector
- jump to local IDE source code while click the element of browser automatically- Vue Apollo GraphQL
- @apollo/client - Fully-featured caching GraphQL client with vue integration
- @vue/apollo-composable - Apollo GraphQL functions for Vue Composition API
Coding Style
- Use Composition API with
<script setup>
SFC syntax - ESLint with @antfu/eslint-config, single quotes, no semi.
Dev tools
- TypeScript
- Vitest - Unit testing powered by Vite
- Cypress - E2E Testing
- pnpm - fast, disk space efficient package manager
vite-ssg
- Static-site generation- critters - Critical CSS
- Netlify - zero-config deployment
- VS Code Extensions
- Vite - Fire up Vite server automatically
- Volar - Vue 3
<script setup>
IDE support - Iconify IntelliSense - Icon inline display and autocomplete
- i18n Ally - All in one i18n support
- ESLint
Variations
As this template is strongly opinionated, the following provides a curated list for community-maintained variations with different preferences and feature sets. Check them out as well. PR to add yours is also welcome!
Official
- vitesse-lite - Lightweight version of Vitesse
- vitesse-nuxt3 - Vitesse for Nuxt 3
- vitesse-nuxt-bridge - Vitesse for Nuxt 2 with Bridge
- vitesse-webext - WebExtension Vite starter template
- vitesse-stackter-clean-architect by @shamscorner - A modular clean architecture pattern in vitesse template
Community
- vitesse-ssr-template by @frandiox - Vitesse with SSR
- vitespa by @ctholho - Like Vitesse but without SSG/SSR
- vitailse by @zynth17 - Like Vitesse but with TailwindCSS
- vitesse-modernized-chrome-ext by @xiaoluoboding - β‘οΈ Modernized Chrome Extension Manifest V3 Vite Starter Template
- vitesse-enterprise by @FranciscoKloganB - Consistent coding styles regardless of team-size.
- vitecamp by @nekobc1998923 - Like Vitesse but without SSG/SSR/File based routing, includes Element Plus
- vitesse-lite-react by @lxy-yz - vitesse-lite React fork
- vide by @nico-mayer - Vite superlight Beginner Starter Template
- vitesse-h5 by @YunYouJun - Vitesse for Mobile
- bat by @olgam4 - Vitesse for SolidJS
Try it now!
This project requires Node == 17.6.0
GitHub Template
Create a repo from this template on GitHub.
Clone to local
If you prefer to do it manually with the cleaner git history
npx degit antfu/vitesse my-vitesse-app
cd my-vitesse-app
pnpm i # If you don't have pnpm installed, run: npm install -g pnpm
Checklist
When you use this template, try follow the checklist to update your info properly
- Change the author name in
LICENSE
- Change the title in
App.vue
- Change the hostname in
vite.config.ts
- Change the favicon in
public
- Remove the
.github
folder which contains the funding info - Clean up the READMEs and remove routes
- Update client service url for Apollo GraphQL in
apollo.config.js
if you use GraphQL API - Update http link for GraphQL API in
src/common/ApolloClient.ts
if you use GraphQL API
And, enjoy :)
Usage
Development
Just run and visit http://localhost:3333
pnpm dev
Build
To build the App, run
pnpm build
And you will see the generated file in dist
that ready to be served.
Separation of Concerns
- Create separate folder for each module and place them under
/src
folder - The following folders are auto imported within each module
components/
modules/
pages/
stores/
- Place all the layouts in the
common/layouts
folder - Place all the custom styles in the
common/styles
folder and import them intomain.css
Deploy on Netlify
Go to Netlify and select your clone, OK
along the way, and your App will be live in a minute.
Docker Production Build
First, build the vitesse image by opening the terminal in the project's root directory.
docker buildx build . -t vitesse:latest
Run the image and specify port mapping with the -p
flag.
docker run --rm -it -p 8080:80 vitesse:latest
Why
I have created several Vite apps recently. Setting the configs up is kinda the bottleneck for me to make the ideas simply come true within a very short time.
So I made this starter template for myself to create apps more easily, along with some good practices that I have learned from making those apps. It's strongly opinionated, but feel free to tweak it or even maintains your own forks. (see community maintained variation forks)