diff --git a/html/package.json b/html/package.json
new file mode 100644
index 00000000..f478939d
--- /dev/null
+++ b/html/package.json
@@ -0,0 +1,35 @@
+{
+ "name": "vrcx",
+ "version": "0.0.0",
+ "description": "VRCX is an assistant application for provide information about manage friendship. this application uses unofficial VRChat API (VRCSDK).",
+ "main": "index.js",
+ "scripts": {
+ "build": "npx webpack --mode production",
+ "watch": "npx webpack --mode development --watch --progress"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/pypy-vrc/VRCX.git"
+ },
+ "keywords": [
+ "vrchat"
+ ],
+ "author": "pypy ",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/pypy-vrc/VRCX/issues"
+ },
+ "homepage": "https://github.com/pypy-vrc/VRCX#readme",
+ "devDependencies": {
+ "css-loader": "^3.4.2",
+ "html-webpack-plugin": "^4.0.3",
+ "mini-css-extract-plugin": "^0.9.0",
+ "pug": "^2.0.4",
+ "pug-loader": "^2.4.0",
+ "remove-files-webpack-plugin": "^1.4.0",
+ "sass": "^1.26.3",
+ "sass-loader": "^8.0.2",
+ "webpack": "^4.42.1",
+ "webpack-cli": "^3.3.11"
+ }
+}
diff --git a/html/webpack.config.js b/html/webpack.config.js
new file mode 100644
index 00000000..45cf3626
--- /dev/null
+++ b/html/webpack.config.js
@@ -0,0 +1,51 @@
+const MiniCssExtractPlugin = require('mini-css-extract-plugin');
+const HtmlWebpackPlugin = require('html-webpack-plugin');
+const RemovePlugin = require('remove-files-webpack-plugin');
+
+module.exports = {
+ entry: {
+ app: ['./src/app.js', './src/app.scss'],
+ 'app.dark': './src/app.dark.scss',
+ vr: ['./src/vr.js', './src/vr.scss']
+ },
+ output: {
+ path: __dirname,
+ filename: '[name].js'
+ },
+ module: {
+ rules: [
+ {
+ test: /\.s?css$/,
+ use: [
+ MiniCssExtractPlugin.loader,
+ 'css-loader',
+ 'sass-loader'
+ ]
+ },
+ {
+ test: /\.pug$/,
+ use: 'pug-loader'
+ }
+ ]
+ },
+ plugins: [
+ new MiniCssExtractPlugin({
+ filename: '[name].css'
+ }),
+ new HtmlWebpackPlugin({
+ filename: 'index.html',
+ template: './src/index.pug',
+ inject: false,
+ minify: false
+ }),
+ new RemovePlugin({
+ after: {
+ include: [
+ './app.dark.js'
+ ],
+ log: false,
+ logWarning: false
+ }
+ })
+ ]
+};