diff --git a/docs/guide/index.md b/docs/guide/index.md
index f814a9e7d2fd2d..c5a06b88bce839 100644
--- a/docs/guide/index.md
+++ b/docs/guide/index.md
@@ -34,9 +34,6 @@ Supported template presets include:
- `vue-ts`
- `react`
- `react-ts`
-- `preact`
-- `preact-ts`
-- `reason-react`
See [@vitejs/create-app](https://github.com/vitejs/vite/tree/main/packages/create-app) for more details on each template.
diff --git a/packages/create-app/LICENSE b/packages/create-app/LICENSE
new file mode 100644
index 00000000000000..9c1b313d7b1816
--- /dev/null
+++ b/packages/create-app/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2019-present, Yuxi (Evan) You and Vite contributors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/packages/create-app/README.md b/packages/create-app/README.md
new file mode 100644
index 00000000000000..033ef9b011de7f
--- /dev/null
+++ b/packages/create-app/README.md
@@ -0,0 +1,33 @@
+# @vite/create-app
+
+## Scaffolding Your First Vite Project
+
+> **Comaptibility Note:**
+> Vite requires [Node.js](https://nodejs.org/en/) version >=12.0.0.
+
+With NPM:
+
+```bash
+$ npm init @vitejs/app
+```
+
+With Yarn:
+
+```bash
+$ yarn create @vitejs/app
+```
+
+Then follow the prompts!
+
+You can also directly specify the project name and the template you want to use via additional command line options. For example, to scaffold a Vite + Vue project, run:
+
+```bash
+npm init @vitejs/app my-vue-app --template vue
+```
+
+Currently supported template presets include:
+
+- `vue`
+- `vue-ts`
+- `react`
+- `react-ts`
diff --git a/packages/create-app/index.js b/packages/create-app/index.js
new file mode 100755
index 00000000000000..b46ca4f1f9570a
--- /dev/null
+++ b/packages/create-app/index.js
@@ -0,0 +1,111 @@
+#!/usr/bin/env node
+
+// @ts-check
+const fs = require('fs')
+const path = require('path')
+const argv = require('minimist')(process.argv.slice(2))
+const { prompt } = require('enquirer')
+
+const targetDir = argv._[0] || '.'
+const cwd = process.cwd()
+const root = path.join(cwd, targetDir)
+const renameFiles = {
+ _gitignore: '.gitignore'
+}
+console.log(`Scaffolding project in ${root}...`)
+
+async function init() {
+ if (!fs.existsSync(root)) {
+ fs.mkdirSync(root, { recursive: true })
+ } else {
+ const existing = fs.readdirSync(root)
+ if (existing.length) {
+ /**
+ * @type {{ yes: boolean }}
+ */
+ const { yes } = await prompt({
+ type: 'confirm',
+ name: 'yes',
+ message:
+ `Target directory ${targetDir} is not empty.\n` +
+ `Remove existing files and continue?`
+ })
+ if (yes) {
+ emptyDir(root)
+ } else {
+ return
+ }
+ }
+ }
+
+ const templateDir = path.join(
+ __dirname,
+ `template-${argv.t || argv.template || 'vue'}`
+ )
+
+ const write = (file, content) => {
+ const targetPath = renameFiles[file]
+ ? path.join(root, renameFiles[file])
+ : path.join(root, file)
+ if (content) {
+ fs.writeFileSync(targetPath, content)
+ } else {
+ copy(path.join(templateDir, file), targetPath)
+ }
+ }
+
+ const files = fs.readdirSync(templateDir)
+ for (const file of files.filter((f) => f !== 'package.json')) {
+ write(file)
+ }
+
+ const pkg = require(path.join(templateDir, `package.json`))
+ pkg.name = path.basename(root)
+ write('package.json', JSON.stringify(pkg, null, 2))
+
+ console.log(`\nDone. Now run:\n`)
+ if (root !== cwd) {
+ console.log(` cd ${path.relative(cwd, root)}`)
+ }
+ console.log(` npm install (or \`yarn\`)`)
+ console.log(` npm run dev (or \`yarn dev\`)`)
+ console.log()
+}
+
+function copy(src, dest) {
+ const stat = fs.statSync(src)
+ if (stat.isDirectory()) {
+ copyDir(src, dest)
+ } else {
+ fs.copyFileSync(src, dest)
+ }
+}
+
+function copyDir(srcDir, destDir) {
+ fs.mkdirSync(destDir, { recursive: true })
+ for (const file of fs.readdirSync(srcDir)) {
+ const srcFile = path.resolve(srcDir, file)
+ const destFile = path.resolve(destDir, file)
+ copy(srcFile, destFile)
+ }
+}
+
+function emptyDir(dir) {
+ if (!fs.existsSync(dir)) {
+ return
+ }
+ for (const file of fs.readdirSync(dir)) {
+ const abs = path.resolve(dir, file)
+ // baseline is Node 12 so can't use rmSync :(
+ if (fs.lstatSync(abs).isDirectory()) {
+ emptyDir(abs)
+ fs.rmdirSync(abs)
+ } else {
+ fs.unlinkSync(abs)
+ }
+ }
+}
+
+init().catch((e) => {
+ console.error(e)
+})
diff --git a/packages/create-app/package.json b/packages/create-app/package.json
new file mode 100644
index 00000000000000..6895adb8d81519
--- /dev/null
+++ b/packages/create-app/package.json
@@ -0,0 +1,33 @@
+{
+ "name": "@vitejs/create-app",
+ "version": "1.0.0",
+ "license": "MIT",
+ "author": "Evan You",
+ "bin": {
+ "create-vite-app": "index.js",
+ "cva": "index.js"
+ },
+ "files": [
+ "index.js"
+ ],
+ "main": "index.js",
+ "scripts": {
+ "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s --commit-path . --lerna-package create-app",
+ "release": "node ../../scripts/release.js --skipBuild"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/vitejs/vite.git"
+ },
+ "bugs": {
+ "url": "https://github.com/vitejs/vite/issues"
+ },
+ "homepage": "https://github.com/vitejs/vite/tree/main/packages/create-app#readme",
+ "dependencies": {
+ "enquirer": "^2.3.6",
+ "minimist": "^1.2.5"
+ }
+}
diff --git a/packages/create-app/template-react-ts/_gitignore b/packages/create-app/template-react-ts/_gitignore
new file mode 100644
index 00000000000000..d451ff16c1010b
--- /dev/null
+++ b/packages/create-app/template-react-ts/_gitignore
@@ -0,0 +1,5 @@
+node_modules
+.DS_Store
+dist
+dist-ssr
+*.local
diff --git a/packages/create-app/template-react-ts/index.html b/packages/create-app/template-react-ts/index.html
new file mode 100644
index 00000000000000..f3cb3615318c9a
--- /dev/null
+++ b/packages/create-app/template-react-ts/index.html
@@ -0,0 +1,12 @@
+
+
+
+
+
+ Vite App
+
+
+
+
+
+
diff --git a/packages/create-app/template-react-ts/package.json b/packages/create-app/template-react-ts/package.json
new file mode 100644
index 00000000000000..14cb0e7be9f3db
--- /dev/null
+++ b/packages/create-app/template-react-ts/package.json
@@ -0,0 +1,19 @@
+{
+ "name": "vite-react-typescript-starter",
+ "version": "0.0.0",
+ "scripts": {
+ "dev": "vite",
+ "build": "tsc && vite build"
+ },
+ "dependencies": {
+ "react": "^17.0.0",
+ "react-dom": "^17.0.0"
+ },
+ "devDependencies": {
+ "@types/react": "^17.0.0",
+ "@types/react-dom": "^17.0.0",
+ "@vitejs/plugin-react-refresh": "^1.1.0",
+ "typescript": "^4.1.2",
+ "vite": "^2.0.0-beta.1"
+ }
+}
diff --git a/packages/create-app/template-react-ts/src/App.css b/packages/create-app/template-react-ts/src/App.css
new file mode 100644
index 00000000000000..8da3fde63d9e7d
--- /dev/null
+++ b/packages/create-app/template-react-ts/src/App.css
@@ -0,0 +1,42 @@
+.App {
+ text-align: center;
+}
+
+.App-logo {
+ height: 40vmin;
+ pointer-events: none;
+}
+
+@media (prefers-reduced-motion: no-preference) {
+ .App-logo {
+ animation: App-logo-spin infinite 20s linear;
+ }
+}
+
+.App-header {
+ background-color: #282c34;
+ min-height: 100vh;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ font-size: calc(10px + 2vmin);
+ color: white;
+}
+
+.App-link {
+ color: #61dafb;
+}
+
+@keyframes App-logo-spin {
+ from {
+ transform: rotate(0deg);
+ }
+ to {
+ transform: rotate(360deg);
+ }
+}
+
+button {
+ font-size: calc(10px + 2vmin);
+}
diff --git a/packages/create-app/template-react-ts/src/App.tsx b/packages/create-app/template-react-ts/src/App.tsx
new file mode 100644
index 00000000000000..af4490c3b2ef9f
--- /dev/null
+++ b/packages/create-app/template-react-ts/src/App.tsx
@@ -0,0 +1,32 @@
+import React, { useState } from 'react'
+import logo from './logo.svg'
+import './App.css'
+
+function App() {
+ const [count, setCount] = useState(0)
+
+ return (
+
+ )
+}
+
+export default App
diff --git a/packages/create-app/template-react-ts/src/index.css b/packages/create-app/template-react-ts/src/index.css
new file mode 100644
index 00000000000000..4a1df4db71cdb3
--- /dev/null
+++ b/packages/create-app/template-react-ts/src/index.css
@@ -0,0 +1,13 @@
+body {
+ margin: 0;
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen",
+ "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue",
+ sans-serif;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+code {
+ font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New",
+ monospace;
+}
diff --git a/packages/create-app/template-react-ts/src/logo.svg b/packages/create-app/template-react-ts/src/logo.svg
new file mode 100644
index 00000000000000..6b60c1042f58d9
--- /dev/null
+++ b/packages/create-app/template-react-ts/src/logo.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/packages/create-app/template-react-ts/src/main.tsx b/packages/create-app/template-react-ts/src/main.tsx
new file mode 100644
index 00000000000000..606a3cf44ec02b
--- /dev/null
+++ b/packages/create-app/template-react-ts/src/main.tsx
@@ -0,0 +1,11 @@
+import React from 'react'
+import ReactDOM from 'react-dom'
+import './index.css'
+import App from './App'
+
+ReactDOM.render(
+
+
+ ,
+ document.getElementById('root')
+)
diff --git a/packages/create-app/template-react-ts/tsconfig.json b/packages/create-app/template-react-ts/tsconfig.json
new file mode 100644
index 00000000000000..181704707c6996
--- /dev/null
+++ b/packages/create-app/template-react-ts/tsconfig.json
@@ -0,0 +1,20 @@
+{
+ "compilerOptions": {
+ "target": "ESNext",
+ "lib": ["DOM", "DOM.Iterable", "ESNext"],
+ "types": [],
+ "allowJs": false,
+ "skipLibCheck": false,
+ "esModuleInterop": false,
+ "allowSyntheticDefaultImports": true,
+ "strict": true,
+ "forceConsistentCasingInFileNames": true,
+ "module": "ESNext",
+ "moduleResolution": "Node",
+ "resolveJsonModule": true,
+ "isolatedModules": true,
+ "noEmit": true,
+ "jsx": "react"
+ },
+ "include": ["src"]
+}
diff --git a/packages/create-app/template-react-ts/vite.config.ts b/packages/create-app/template-react-ts/vite.config.ts
new file mode 100644
index 00000000000000..64db055161a0b7
--- /dev/null
+++ b/packages/create-app/template-react-ts/vite.config.ts
@@ -0,0 +1,6 @@
+import reactRefresh from '@vitejs/plugin-react-refresh'
+import { defineConfig } from 'vite'
+
+export default defineConfig({
+ plugins: [reactRefresh()]
+})
diff --git a/packages/create-app/template-react/_gitignore b/packages/create-app/template-react/_gitignore
new file mode 100644
index 00000000000000..53f7466aca7003
--- /dev/null
+++ b/packages/create-app/template-react/_gitignore
@@ -0,0 +1,5 @@
+node_modules
+.DS_Store
+dist
+dist-ssr
+*.local
\ No newline at end of file
diff --git a/packages/create-app/template-react/index.html b/packages/create-app/template-react/index.html
new file mode 100644
index 00000000000000..a380e811bf0564
--- /dev/null
+++ b/packages/create-app/template-react/index.html
@@ -0,0 +1,12 @@
+
+
+
+
+
+ Vite App
+
+
+
+
+
+
diff --git a/packages/create-app/template-react/package.json b/packages/create-app/template-react/package.json
new file mode 100644
index 00000000000000..a091e5e73e2ad7
--- /dev/null
+++ b/packages/create-app/template-react/package.json
@@ -0,0 +1,16 @@
+{
+ "name": "vite-react-starter",
+ "version": "0.0.0",
+ "scripts": {
+ "dev": "vite",
+ "build": "vite build"
+ },
+ "dependencies": {
+ "react": "^17.0.0",
+ "react-dom": "^17.0.0"
+ },
+ "devDependencies": {
+ "@vitejs/plugin-react-refresh": "^1.1.0",
+ "vite": "^2.0.0-beta.1"
+ }
+}
diff --git a/packages/create-app/template-react/src/App.css b/packages/create-app/template-react/src/App.css
new file mode 100644
index 00000000000000..8da3fde63d9e7d
--- /dev/null
+++ b/packages/create-app/template-react/src/App.css
@@ -0,0 +1,42 @@
+.App {
+ text-align: center;
+}
+
+.App-logo {
+ height: 40vmin;
+ pointer-events: none;
+}
+
+@media (prefers-reduced-motion: no-preference) {
+ .App-logo {
+ animation: App-logo-spin infinite 20s linear;
+ }
+}
+
+.App-header {
+ background-color: #282c34;
+ min-height: 100vh;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ font-size: calc(10px + 2vmin);
+ color: white;
+}
+
+.App-link {
+ color: #61dafb;
+}
+
+@keyframes App-logo-spin {
+ from {
+ transform: rotate(0deg);
+ }
+ to {
+ transform: rotate(360deg);
+ }
+}
+
+button {
+ font-size: calc(10px + 2vmin);
+}
diff --git a/packages/create-app/template-react/src/App.jsx b/packages/create-app/template-react/src/App.jsx
new file mode 100644
index 00000000000000..74f52af9a4da74
--- /dev/null
+++ b/packages/create-app/template-react/src/App.jsx
@@ -0,0 +1,32 @@
+import React, { useState } from 'react'
+import logo from './logo.svg'
+import './App.css'
+
+function App() {
+ const [count, setCount] = useState(0)
+
+ return (
+
+ )
+}
+
+export default App
diff --git a/packages/create-app/template-react/src/index.css b/packages/create-app/template-react/src/index.css
new file mode 100644
index 00000000000000..4a1df4db71cdb3
--- /dev/null
+++ b/packages/create-app/template-react/src/index.css
@@ -0,0 +1,13 @@
+body {
+ margin: 0;
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen",
+ "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue",
+ sans-serif;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+code {
+ font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New",
+ monospace;
+}
diff --git a/packages/create-app/template-react/src/logo.svg b/packages/create-app/template-react/src/logo.svg
new file mode 100644
index 00000000000000..6b60c1042f58d9
--- /dev/null
+++ b/packages/create-app/template-react/src/logo.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/packages/create-app/template-react/src/main.jsx b/packages/create-app/template-react/src/main.jsx
new file mode 100644
index 00000000000000..606a3cf44ec02b
--- /dev/null
+++ b/packages/create-app/template-react/src/main.jsx
@@ -0,0 +1,11 @@
+import React from 'react'
+import ReactDOM from 'react-dom'
+import './index.css'
+import App from './App'
+
+ReactDOM.render(
+
+
+ ,
+ document.getElementById('root')
+)
diff --git a/packages/create-app/template-react/vite.config.js b/packages/create-app/template-react/vite.config.js
new file mode 100644
index 00000000000000..53e50230352764
--- /dev/null
+++ b/packages/create-app/template-react/vite.config.js
@@ -0,0 +1,8 @@
+import reactRefresh from '@vitejs/plugin-react-refresh'
+
+/**
+ * @type { import('vite').UserConfig }
+ */
+export default {
+ plugins: [reactRefresh()]
+}
diff --git a/packages/create-app/template-vue-ts/_gitignore b/packages/create-app/template-vue-ts/_gitignore
new file mode 100644
index 00000000000000..d451ff16c1010b
--- /dev/null
+++ b/packages/create-app/template-vue-ts/_gitignore
@@ -0,0 +1,5 @@
+node_modules
+.DS_Store
+dist
+dist-ssr
+*.local
diff --git a/packages/create-app/template-vue-ts/index.html b/packages/create-app/template-vue-ts/index.html
new file mode 100644
index 00000000000000..a508f2037dec8e
--- /dev/null
+++ b/packages/create-app/template-vue-ts/index.html
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+ Vite App
+
+
+
+
+
+
diff --git a/packages/create-app/template-vue-ts/package.json b/packages/create-app/template-vue-ts/package.json
new file mode 100644
index 00000000000000..81bfc03e95a47c
--- /dev/null
+++ b/packages/create-app/template-vue-ts/package.json
@@ -0,0 +1,19 @@
+{
+ "name": "vite-vue-typescript-starter",
+ "version": "0.0.0",
+ "scripts": {
+ "dev": "vite",
+ "build": "vuedx-typecheck . && vite build"
+ },
+ "dependencies": {
+ "vue": "^3.0.5"
+ },
+ "devDependencies": {
+ "@vitejs/plugin-vue": "^1.0.2",
+ "@vue/compiler-sfc": "^3.0.5",
+ "@vuedx/typecheck": "^0.4.1",
+ "@vuedx/typescript-plugin-vue": "^0.4.1",
+ "typescript": "^4.1.3",
+ "vite": "^2.0.0-beta.1"
+ }
+}
\ No newline at end of file
diff --git a/packages/create-app/template-vue-ts/public/favicon.ico b/packages/create-app/template-vue-ts/public/favicon.ico
new file mode 100644
index 00000000000000..df36fcfb72584e
Binary files /dev/null and b/packages/create-app/template-vue-ts/public/favicon.ico differ
diff --git a/packages/create-app/template-vue-ts/src/App.vue b/packages/create-app/template-vue-ts/src/App.vue
new file mode 100644
index 00000000000000..499a948f188002
--- /dev/null
+++ b/packages/create-app/template-vue-ts/src/App.vue
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/packages/create-app/template-vue-ts/src/assets/logo.png b/packages/create-app/template-vue-ts/src/assets/logo.png
new file mode 100644
index 00000000000000..f3d2503fc2a44b
Binary files /dev/null and b/packages/create-app/template-vue-ts/src/assets/logo.png differ
diff --git a/packages/create-app/template-vue-ts/src/components/HelloWorld.vue b/packages/create-app/template-vue-ts/src/components/HelloWorld.vue
new file mode 100644
index 00000000000000..5c5074b466203d
--- /dev/null
+++ b/packages/create-app/template-vue-ts/src/components/HelloWorld.vue
@@ -0,0 +1,48 @@
+
+ {{ msg }}
+
+ Recommended setup:
+ VSCode
+ +
+ Vetur
+ +
+ Vue DX
+
+
+ Make sure to use workspace version of TypeScript to get improved support via
+ @vuedx .
+ Note @vuedx is still experimental and this setup is provided for early feedback.
+
+ count is: {{ count }}
+
+ Edit
+ components/HelloWorld.vue
to test hot module replacement.
+
+
+
+
diff --git a/packages/create-app/template-vue-ts/src/main.ts b/packages/create-app/template-vue-ts/src/main.ts
new file mode 100644
index 00000000000000..01433bca2ac765
--- /dev/null
+++ b/packages/create-app/template-vue-ts/src/main.ts
@@ -0,0 +1,4 @@
+import { createApp } from 'vue'
+import App from './App.vue'
+
+createApp(App).mount('#app')
diff --git a/packages/create-app/template-vue-ts/tsconfig.json b/packages/create-app/template-vue-ts/tsconfig.json
new file mode 100644
index 00000000000000..5072c8fa06465d
--- /dev/null
+++ b/packages/create-app/template-vue-ts/tsconfig.json
@@ -0,0 +1,13 @@
+{
+ "compilerOptions": {
+ "target": "esnext",
+ "module": "esnext",
+ "moduleResolution": "node",
+ "strict": true,
+ "jsx": "preserve",
+ "sourceMap": true,
+ "lib": ["esnext", "dom"],
+ "plugins": [{ "name": "@vuedx/typescript-plugin-vue" }]
+ },
+ "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"]
+}
diff --git a/packages/create-app/template-vue-ts/vite.config.ts b/packages/create-app/template-vue-ts/vite.config.ts
new file mode 100644
index 00000000000000..2e3d2576fc2e28
--- /dev/null
+++ b/packages/create-app/template-vue-ts/vite.config.ts
@@ -0,0 +1,6 @@
+import { defineConfig } from 'vite'
+import vue from '@vitejs/plugin-vue'
+
+export default defineConfig({
+ plugins: [vue()]
+})
diff --git a/packages/create-app/template-vue/_gitignore b/packages/create-app/template-vue/_gitignore
new file mode 100644
index 00000000000000..53f7466aca7003
--- /dev/null
+++ b/packages/create-app/template-vue/_gitignore
@@ -0,0 +1,5 @@
+node_modules
+.DS_Store
+dist
+dist-ssr
+*.local
\ No newline at end of file
diff --git a/packages/create-app/template-vue/index.html b/packages/create-app/template-vue/index.html
new file mode 100644
index 00000000000000..d49c18c6fb142f
--- /dev/null
+++ b/packages/create-app/template-vue/index.html
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+ Vite App
+
+
+
+
+
+
diff --git a/packages/create-app/template-vue/package.json b/packages/create-app/template-vue/package.json
new file mode 100644
index 00000000000000..10fae9dd29acd3
--- /dev/null
+++ b/packages/create-app/template-vue/package.json
@@ -0,0 +1,16 @@
+{
+ "name": "vite-starter",
+ "version": "0.0.0",
+ "scripts": {
+ "dev": "vite",
+ "build": "vite build"
+ },
+ "dependencies": {
+ "vue": "^3.0.5"
+ },
+ "devDependencies": {
+ "@vitejs/plugin-vue": "^1.0.2",
+ "@vue/compiler-sfc": "^3.0.5",
+ "vite": "^2.0.0-beta.1"
+ }
+}
diff --git a/packages/create-app/template-vue/public/favicon.ico b/packages/create-app/template-vue/public/favicon.ico
new file mode 100644
index 00000000000000..df36fcfb72584e
Binary files /dev/null and b/packages/create-app/template-vue/public/favicon.ico differ
diff --git a/packages/create-app/template-vue/src/App.vue b/packages/create-app/template-vue/src/App.vue
new file mode 100644
index 00000000000000..9a72bd98acdc9f
--- /dev/null
+++ b/packages/create-app/template-vue/src/App.vue
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/packages/create-app/template-vue/src/assets/logo.png b/packages/create-app/template-vue/src/assets/logo.png
new file mode 100644
index 00000000000000..f3d2503fc2a44b
Binary files /dev/null and b/packages/create-app/template-vue/src/assets/logo.png differ
diff --git a/packages/create-app/template-vue/src/components/HelloWorld.vue b/packages/create-app/template-vue/src/components/HelloWorld.vue
new file mode 100644
index 00000000000000..0d61fb14660f86
--- /dev/null
+++ b/packages/create-app/template-vue/src/components/HelloWorld.vue
@@ -0,0 +1,18 @@
+
+ {{ msg }}
+ count is: {{ state.count }}
+
+ Edit
+ components/HelloWorld.vue
to test hot module replacement.
+
+
+
+
diff --git a/packages/create-app/template-vue/src/main.js b/packages/create-app/template-vue/src/main.js
new file mode 100644
index 00000000000000..01433bca2ac765
--- /dev/null
+++ b/packages/create-app/template-vue/src/main.js
@@ -0,0 +1,4 @@
+import { createApp } from 'vue'
+import App from './App.vue'
+
+createApp(App).mount('#app')
diff --git a/packages/create-app/template-vue/vite.config.js b/packages/create-app/template-vue/vite.config.js
new file mode 100644
index 00000000000000..9fa105dcf56ab7
--- /dev/null
+++ b/packages/create-app/template-vue/vite.config.js
@@ -0,0 +1,8 @@
+import vue from '@vitejs/plugin-vue'
+
+/**
+ * @type {import('vite').UserConfig}
+ */
+export default {
+ plugins: [vue()]
+}