{ "name": "freetube", "productName": "FreeTube", "description": "A private YouTube client", "version": "0.23.12", "license": "AGPL-3.0-or-later", "main": "./dist/main.js", "private": true, "author": { "name": "FreeTube Team", "email": "FreeTubeApp@protonmail.com", "url": "https://github.com/FreeTubeApp/FreeTube" }, "repository": { "type": "git", "url": "git+https://github.com/FreeTubeApp/FreeTube.git" }, "bugs": { "url": "https://github.com/FreeTubeApp/FreeTube/issues" }, "scripts": { "build": "run-s rebuild:electron patch-shaka pack build-release", "build:arm64": "run-s rebuild:electron patch-shaka pack build-release:arm64", "build:arm32": "run-s rebuild:electron patch-shaka pack build-release:arm32", "build-release": "node _scripts/build.js", "build-release:arm64": "node _scripts/build.js arm64", "build-release:arm32": "node _scripts/build.js arm32", "clean": "node _scripts/clean.mjs", "debug": "run-s rebuild:electron patch-shaka debug-runner", "debug-runner": "node _scripts/dev-runner.js --remote-debug", "dev": "run-s rebuild:electron patch-shaka dev-runner", "dev:web": "node _scripts/dev-runner.js --web", "dev-runner": "node _scripts/dev-runner.js", "get-instances": "node _scripts/getInstances.js", "patch-shaka": "node _scripts/patchShaka.mjs", "get-regions": "node _scripts/getRegions.mjs", "lint-all": "run-p lint lint-json", "lint": "run-p eslint-lint lint-style", "lint-fix": "run-p eslint-lint-fix lint-style-fix", "eslint-lint": "eslint --config eslint.config.mjs \"src/**/*.js\" \"src/renderer/**/*.vue\" \"static/*.js\" \"_scripts/*.js\" \"_scripts/**/*.mjs\"", "eslint-lint-fix": "eslint --config eslint.config.mjs --fix \"src/**/*.js\" \"src/renderer/**/*.vue\" \"static/*.js\" \"_scripts/*.js\" \"_scripts/**/*.mjs\"", "lint-json": "eslint --config eslint.config.mjs \"static/**/*.json\"", "lint-style": "stylelint \"**/*.{css,scss}\"", "lint-style-fix": "stylelint --fix \"**/*.{css,scss}\"", "lint-yml": "eslint --config eslint.config.mjs \"**/*.yml\" \"**/*.yaml\"", "pack": "run-p pack:main pack:renderer pack:botGuardScript && node _scripts/injectAllowedPaths.mjs", "pack:main": "webpack --mode=production --node-env=production --config _scripts/webpack.main.config.js", "pack:renderer": "webpack --mode=production --node-env=production --config _scripts/webpack.renderer.config.js", "pack:web": "webpack --mode=production --node-env=production --config _scripts/webpack.web.config.js", "postinstall": "run-s --silent patch-shaka", "pack:botGuardScript": "webpack --config _scripts/webpack.botGuardScript.config.js", "pack:botGuardScript:android": "webpack --config _scripts/webpack.botGuardScript.android.config.js", "pack:android": "webpack --mode=production --node-env=production --config _scripts/webpack.android.config.js", "pack:android:dev": "webpack --mode=development --node-env=development --config _scripts/webpack.android.config.js", "rebuild:electron": "electron-builder install-app-deps", "release": "run-s test build", "ci": "yarn install --silent --frozen-lockfile" }, "dependencies": { "@fortawesome/fontawesome-svg-core": "^6.7.2", "@fortawesome/free-brands-svg-icons": "^6.7.2", "@fortawesome/free-regular-svg-icons": "^6.7.2", "@fortawesome/free-solid-svg-icons": "^6.7.2", "@fortawesome/vue-fontawesome": "^2.0.10", "@seald-io/nedb": "^4.0.4", "autolinker": "^4.1.0", "bgutils-js": "^3.2.0", "core-js": "^3.41.0", "electron-context-menu": "^4.0.4", "marked": "^15.0.6", "path-browserify": "^1.0.1", "portal-vue": "^2.1.7", "process": "^0.11.10", "shaka-player": "^4.13.4", "swiper": "^11.2.1", "vue": "^2.7.16", "vue-i18n": "^8.28.2", "vue-observe-visibility": "^1.0.0", "vue-router": "^3.6.5", "vuex": "^3.6.2", "youtubei.js": "^16.0.0" }, "devDependencies": { "@babel/core": "^7.26.7", "@babel/plugin-transform-class-properties": "^7.25.9", "@babel/preset-env": "^7.26.7", "@double-great/stylelint-a11y": "^3.0.3", "@eslint/js": "^9.19.0", "@intlify/eslint-plugin-vue-i18n": "^3.2.0", "babel-loader": "^9.2.1", "copy-webpack-plugin": "^12.0.2", "css-loader": "^7.1.2", "css-minimizer-webpack-plugin": "^7.0.0", "electron": "^34.0.1", "electron-builder": "^26.0.13", "eslint": "^9.19.0", "eslint-plugin-jsdoc": "^50.6.3", "eslint-plugin-jsonc": "^2.19.1", "eslint-plugin-unicorn": "^56.0.1", "eslint-plugin-vue": "^9.32.0", "eslint-plugin-vuejs-accessibility": "^2.4.1", "eslint-plugin-yml": "^1.16.0", "globals": "^15.14.0", "html-webpack-plugin": "^5.6.3", "js-yaml": "^4.1.0", "json-minimizer-webpack-plugin": "^5.0.0", "lefthook": "^1.10.10", "mini-css-extract-plugin": "^2.9.2", "neostandard": "^0.12.0", "npm-run-all2": "^7.0.2", "postcss": "^8.5.1", "postcss-scss": "^4.0.9", "sass": "^1.83.4", "sass-loader": "^16.0.4", "string-width": "4.2.3", "strip-ansi": "6.0.1", "stylelint": "^16.14.1", "stylelint-config-sass-guidelines": "^12.1.0", "stylelint-config-standard": "^37.0.0", "stylelint-high-performance-animation": "^1.10.0", "stylelint-use-logical-spec": "^5.0.1", "tree-kill": "1.2.2", "vue-devtools": "^5.1.4", "vue-eslint-parser": "^9.4.3", "vue-loader": "^15.10.0", "webpack": "^5.97.1", "webpack-cli": "^6.0.1", "webpack-dev-server": "^5.2.0", "wrap-ansi": "7.0.0", "yaml-eslint-parser": "^1.2.3" } }