{
"name": "cncjs",
"version": "1.11.5",
"description": "A web-based interface for CNC milling controller running Grbl, Marlin, Smoothieware, or TinyG",
"homepage": "https://github.com/cncjs/cncjs",
"author": "Cheton Wu <cheton@gmail.com>",
"main": "./dist/cncjs/server-cli.js",
"bin": {
"cnc": "./bin/cnc",
"cncjs": "./bin/cncjs"
},
"files": [
"bin",
"dist",
"static"
],
"repository": {
"type": "git",
"url": "git@github.com:cncjs/cncjs.git"
},
"license": "MIT",
"engines": {
"node": ">=18"
},
"preferGlobal": true,
"scripts": {
"build": "yarn build-prod",
"build-latest": "bash scripts/build-latest.sh",
"build-dev": "bash scripts/build-dev.sh",
"build-prod": "bash scripts/build-prod.sh",
"clean": "del dist output",
"electron": "electron",
"electron-builder": "electron-builder",
"electron-builder:debug": "cross-env DEBUG=electron-builder electron-builder",
"electron-rebuild": "electron-rebuild",
"github-release": "github-release",
"package-sync": "node scripts/package-sync.js",
"build:macos": "bash -c 'scripts/electron-builder.sh --macos --x64 --arm64'",
"build:macos-x64": "bash -c 'scripts/electron-builder.sh --macos --x64'",
"build:macos-arm64": "bash -c 'scripts/electron-builder.sh --macos --arm64'",
"build:linux": "bash -c 'scripts/electron-builder.sh --linux --x64 --arm64 --armv7l'",
"build:linux-x64": "bash -c 'scripts/electron-builder.sh --linux --x64'",
"build:linux-armv7l": "bash -c 'scripts/electron-builder.sh --linux --armv7l'",
"build:linux-arm64": "bash -c 'scripts/electron-builder.sh --linux --arm64'",
"build:windows": "bash -c 'scripts/electron-builder.sh --windows --x64'",
"build:windows-x64": "bash -c 'scripts/electron-builder.sh --windows --x64'",
"start-electron": "electron ./dist/cncjs/main",
"start-prod": "yarn build-prod && NODE_ENV=production ./bin/cncjs",
"dev": "yarn run build-dev && concurrently --names \"start-app-dev,start-server-dev\" \"yarn run start-app-dev\" \"yarn run start-server-dev\"",
"win-dev": "powershell -ExecutionPolicy Bypass -File scripts/build-dev.ps1 && concurrently --names \"start-app-dev,start-server-dev\" \"npm run start-app-dev\" \"npm run start-server-dev\"",
"start-app-dev": "cross-env NODE_ENV=development webpack serve --progress --config webpack.config.development.js",
"start-server-dev": "cross-env NODE_ENV=development ./bin/cncjs --port 8000 -m /widget:https://cncjs.github.io/cncjs-widget-boilerplate/v1/",
"lint": "concurrently --kill-others-on-fail --names \"i18nlint,eslint,stylint\" \"yarn i18nlint\" \"yarn eslint\" \"yarn stylint\"",
"eslint": "eslint --color src/**/*.js src/app/**/*.jsx scripts/**/*.js",
"eslint-debug": "cross-env DEBUG=\"eslint:glob-util,eslint:config-*,eslint:cli*\" eslint --cache --color --quiet src/**/*.js src/app/**/*.jsx scripts/**/*.js",
"i18nlint": "bash -c 'find src/{app,server}/i18n -type f -name \"*.json\" | xargs -L1 -I{} -- bash -c \"echo Linting {}; jsonlint -q {}\"'",
"stylint": "stylint src/app",
"test": "jest",
"postinstall": "opencollective postinstall",
"ci-dispatch": "gh workflow run ci.yml --repo cncjs/cncjs --ref",
"ci-version": "changeset version && node scripts/package-sync.js && yarn install --mode=update-lockfile",
"ci-publish": "yarn build && changeset publish"
},
"build": {
"appId": "org.cncjs",
"asar": false,
"asarUnpack": [],
"productName": "CNCjs",
"directories": {
"buildResources": "electron-build",
"output": "output",
"app": "dist/cncjs"
},
"publish": [],
"mac": {
"category": "public.app-category.productivity",
"target": [
"dmg"
],
"icon": "electron-build/icon.icns"
},
"dmg": {
"background": "electron-build/background.png",
"icon": "electron-build/icon.icns",
"iconSize": 80,
"iconTextSize": 12,
"contents": [
{
"x": 448,
"y": 344,
"type": "link",
"path": "/Applications"
},
{
"x": 192,
"y": 344,
"type": "file"
}
]
},
"win": {
"target": [
"nsis"
],
"icon": "electron-build/icon.ico"
},
"linux": {
"category": "Utility",
"target": [
"AppImage",
"deb",
"rpm"
]
}
},
"keywords": [
"cncjs",
"arduino",
"raspberry",
"pi",
"cnc",
"gcode",
"grbl",
"smoothie",
"smoothieware",
"tinyg",
"g2core",
"react",
"socket.io"
],
"dependencies": {
"@serialport/parser-readline": "^10.0.0",
"@trendmicro/react-anchor": "~0.5.6",
"@trendmicro/react-breadcrumbs": "~0.5.5",
"@trendmicro/react-buttons": "~1.3.1",
"@trendmicro/react-checkbox": "~3.4.1",
"@trendmicro/react-datepicker": "~1.0.0-alpha.6",
"@trendmicro/react-dropdown": "~1.3.0",
"@trendmicro/react-form-control": "~0.1.0",
"@trendmicro/react-grid-system": "~0.2.0",
"@trendmicro/react-iframe": "~0.3.1",
"@trendmicro/react-interpolate": "~0.5.5",
"@trendmicro/react-loader": "~0.6.1",
"@trendmicro/react-modal": "~2.2.2",
"@trendmicro/react-navs": "~0.11.6",
"@trendmicro/react-notifications": "~1.0.1",
"@trendmicro/react-paginations": "~0.6.1",
"@trendmicro/react-popover": "~0.4.0",
"@trendmicro/react-portal": "~0.4.3",
"@trendmicro/react-radio": "~3.2.2",
"@trendmicro/react-table": "~1.0.1-alpha.2",
"@trendmicro/react-toggle-switch": "~0.5.7",
"@trendmicro/react-tooltip": "~0.6.0",
"@trendmicro/react-validation": "~0.1.0",
"bcrypt-nodejs": "0.0.3",
"body-parser": "~1.18.3",
"bootstrap": "~3.3.7",
"chained-function": "~0.5.0",
"chalk": "~4.1.1",
"classnames": "~2.2.6",
"cncjs-controller": "~1.3.0",
"colornames": "~1.1.1",
"commander": "~9.1.0",
"compression": "~1.7.4",
"connect-multiparty": "~2.2.0",
"connect-restreamer": "~1.0.3",
"consolidate": "~0.15.1",
"cookie-parser": "~1.4.4",
"core-js": "~3.26.1",
"debug": "~4.1.1",
"deep-keys": "~0.5.0",
"detect-browser": "~4.4.0",
"electron-store": "~8.1.0",
"ensure-type": "^1.5.1",
"errorhandler": "~1.5.0",
"escodegen": "~1.11.1",
"esprima": "~4.0.1",
"expand-tilde": "~2.0.2",
"expr-eval": "~1.2.2",
"express": "~4.16.4",
"express-jwt": "~5.3.1",
"express-session": "~1.16.1",
"final-form": "~4.12.0",
"font-awesome": "~4.7.0",
"frac": "~1.1.2",
"gcode-interpreter": "^3.0.0",
"gcode-parser": "^2.2.0",
"gcode-toolpath": "^3.0.0",
"history": "~4.9.0",
"hogan.js": "~3.0.2",
"http-proxy": "~1.18.1",
"i18next": "~25.8.17",
"i18next-browser-languagedetector": "~8.2.1",
"i18next-express-middleware": "~1.8.0",
"i18next-fs-backend": "~2.6.6",
"i18next-http-backend": "~3.0.2",
"i18next-http-middleware": "~3.9.2",
"i18next-node-fs-backend": "~2.1.3",
"infinite-tree": "~1.16.2",
"is-electron": "~2.2.1",
"jimp": "^0.10.3",
"js-polyfills": "~0.1.42",
"jsonwebtoken": "~9.0.0",
"jsuri": "~1.3.1",
"keycode": "~2.2.0",
"lodash": "~4.17.11",
"memoize-one": "~5.0.4",
"method-override": "~3.0.0",
"minimatch": "~3.1.4",
"mkdirp": "~0.5.1",
"moment": "~2.24.0",
"morgan": "~1.9.1",
"mousetrap": "~1.6.3",
"namespace-constants": "~0.5.0",
"normalize.css": "~8.0.1",
"opencollective": "~1.0.3",
"perfect-scrollbar": "~1.4.0",
"prop-types": "~15.7.2",
"pubsub-js": "~1.7.0",
"push.js": "~1.0.9",
"qs": "~6.7.0",
"range_check": "~1.4.0",
"rc-slider": "~8.6.9",
"react": "~15.6.2",
"react-bootstrap": "~0.32.1",
"react-dom": "~15.6.2",
"react-dropzone": "~4.2.13",
"react-facebook-loading": "~0.6.2",
"react-final-form": "~3.7.0",
"react-foreach": "~0.1.1",
"react-ga4": "^2.1.0",
"react-i18next": "^8.0.0",
"react-icon-base": "~2.1.2",
"react-infinite-tree": "~0.7.1",
"react-redux": "~5.0.7",
"react-repeatable": "~1.1.1",
"react-router": "~4.3.1",
"react-router-dom": "~4.3.1",
"react-router-redux": "~5.0.0-alpha.6",
"react-select": "~1.2.1",
"react-sortablejs": "~1.5.1",
"react-tiny-virtual-list": "~2.2.0",
"react-toggle": "~4.0.2",
"recompose": "~0.30.0",
"redux": "~4.0.1",
"regenerator-runtime": "~0.13.10",
"registry-auth-token": "~3.4.0",
"registry-url": "~5.1.0",
"rimraf": "~2.6.3",
"semver": "~6.0.0",
"serialport": "^10.0.0",
"serve-favicon": "~2.5.0",
"serve-static": "~1.13.2",
"session-file-store": "~1.2.0",
"sha1": "~1.1.1",
"shortid": "~2.2.14",
"socket.io": "~2.2.0",
"socket.io-client": "~2.2.0",
"socketio-jwt": "~4.5.0",
"sortablejs": "~1.9.0",
"spawn-default-shell": "~2.0.0",
"styled-components": "~3.4.9",
"superagent": "~3.8.3",
"superagent-use": "~0.1.0",
"three": "~0.103.0",
"universal-logger": "~1.0.1",
"universal-logger-browser": "~1.0.2",
"uuid": "~3.3.2",
"watch": "~1.0.2",
"webappengine": "~1.2.0",
"winston": "~3.14.1",
"xterm": "~3.0.2"
},
"devDependencies": {
"@babel/cli": "^7.25.9",
"@babel/core": "^7.26.0",
"@babel/eslint-parser": "^7.25.9",
"@babel/eslint-plugin": "^7.25.9",
"@babel/node": "^7.26.0",
"@babel/plugin-transform-runtime": "^7.25.9",
"@babel/preset-env": "^7.28.6",
"@babel/preset-react": "^7.25.9",
"@babel/register": "^7.25.9",
"@changesets/cli": "^2.31.0",
"@electron/rebuild": "^3.7.2",
"@pmmmwh/react-refresh-webpack-plugin": "^0.5.15",
"babel-core": "~7.0.0-bridge.0",
"babel-eslint": "~10.0.1",
"babel-loader": "~8.0.5",
"babel-plugin-lodash": "~3.3.4",
"boolean": "~1.0.0",
"bundle-loader": "~0.5.6",
"concurrently": "~4.1.0",
"coveralls": "~3.0.3",
"cross-env": "~5.2.0",
"crypto-browserify": "^3.12.0",
"css-loader": "~3.0.0",
"del-cli": "~3.0.1",
"dotenv": "~7.0.0",
"electron": "~22.0.3",
"electron-builder": "~23.6.0",
"eslint": "^8.0.0",
"eslint-config-trendmicro": "^3.2.0",
"eslint-import-resolver-node": "^0.3.9",
"eslint-import-resolver-webpack": "^0.13.9",
"eslint-plugin-import": "^2.31.0",
"eslint-plugin-jest": "^28.8.3",
"eslint-plugin-jsx-a11y": "^6.10.2",
"eslint-plugin-react": "^7.37.2",
"eslint-webpack-plugin": "^4.2.0",
"eventsource-polyfill": "~0.9.6",
"file-loader": "~6.2.0",
"find-imports": "~1.1.0",
"github-release-cli": "~2.0.0",
"glob": "~7.1.3",
"html-webpack-plugin": "~5.6.0",
"i18next-scanner": "~4.6.0",
"imports-loader": "~0.8.0",
"jest": "^30.2.0",
"json-loader": "~0.5.7",
"jsonlint": "^1.6.3",
"mini-css-extract-plugin": "~2.9.0",
"nib": "~1.2.0",
"path-browserify": "^1.0.1",
"pre-push": "~0.1.1",
"progress": "~2.0.3",
"react-refresh": "^0.14.2",
"redux-devtools": "~3.5.0",
"run-sequence": "~2.2.1",
"stream-browserify": "^3.0.0",
"style-loader": "~0.23.1",
"stylint": "~1.5.9",
"stylint-loader": "~1.0.0",
"stylus": "~0.63.0",
"stylus-loader": "~8.1.0",
"text-table": "~0.2.0",
"timers-browserify": "^2.0.12",
"transform-loader": "~0.2.4",
"url-loader": "~4.1.1",
"webpack": "~5.94.0",
"webpack-cli": "^5.1.4",
"webpack-dev-server": "^5.1.0",
"webpack-node-externals": "~1.7.2"
},
"jest": {
"transform": {
"^.+\\.js$": [
"babel-jest",
{
"configFile": false,
"presets": [
[
"@babel/preset-env",
{
"targets": {
"node": "current"
}
}
]
]
}
]
},
"clearMocks": true,
"collectCoverage": true,
"collectCoverageFrom": [
"<rootDir>/src/server/**/*.js",
"!<rootDir>/src/server/**/*.test.js",
"!<rootDir>/src/server/**/__tests__/**"
],
"coverageReporters": [
"lcov",
"text",
"html"
],
"modulePathIgnorePatterns": [
"<rootDir>/build"
],
"setupFiles": [],
"setupFilesAfterEnv": [
"<rootDir>/jest-setup.js"
],
"snapshotSerializers": [],
"testEnvironment": "node",
"testMatch": [
"<rootDir>/src/server/**/__tests__/**/*.test.js",
"<rootDir>/grbl-simulator/__tests__/**/*.test.js"
],
"testPathIgnorePatterns": [
"/node_modules/"
],
"testTimeout": 10000
},
"pre-push": [
"eslint-debug"
],
"collective": {
"type": "opencollective",
"url": "https://opencollective.com/cncjs"
}
}