{ "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 ", "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": "^24.22.1 || >=26.12.1" }, "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", "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'", "build:linux-x64": "bash -c 'scripts/electron-builder.sh --linux --x64'", "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": [], "npmRebuild": false, "productName": "CNCjs", "directories": { "buildResources": "electron-build", "output": "output", "app": "dist/cncjs" }, "publish": null, "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" ] }, "rpm": { "fpm": [ "--rpm-rpmbuild-define=_rpmformat 4" ] } }, "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", "@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": "^26.18.1", "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": [ "/src/server/**/*.js", "!/src/server/**/*.test.js", "!/src/server/**/__tests__/**" ], "coverageReporters": [ "lcov", "text", "html" ], "modulePathIgnorePatterns": [ "/build" ], "setupFiles": [], "setupFilesAfterEnv": [ "/jest-setup.js" ], "snapshotSerializers": [], "testEnvironment": "node", "testMatch": [ "/src/server/**/__tests__/**/*.test.js", "/grbl-simulator/__tests__/**/*.test.js" ], "testPathIgnorePatterns": [ "/node_modules/" ], "testTimeout": 10000 }, "pre-push": [ "eslint-debug" ], "collective": { "type": "opencollective", "url": "https://opencollective.com/cncjs" } }