{ "name": "termix", "private": true, "version": "2.2.0", "description": "A web-based server management platform with SSH terminal, tunneling, and file editing capabilities", "author": "Karmaa", "main": "electron/main.cjs", "type": "module", "engines": { "node": ">=22.12.0", "npm": ">=11" }, "scripts": { "format": "prettier --write .", "format:check": "prettier --check .", "postinstall": "node scripts/patch-app-builder-lib.cjs", "prebuild": "node scripts/write-electron-build-info.cjs", "lint": "eslint .", "lint:fix": "eslint --fix .", "type-check": "tsc --noEmit", "dev": "vite", "build": "vite build && tsc -p tsconfig.node.json", "build:backend": "tsc -p tsconfig.node.json", "dev:backend": "tsc -p tsconfig.node.json && node ./dist/backend/backend/starter.js", "dev:docker": "docker stop termix-dev 2>nul & docker rm termix-dev 2>nul & docker build -f docker/Dockerfile -t termix:dev --no-cache . && docker run -d --name termix-dev -p 3000:3000 -p 8080:8080 -p 30001-30006:30001-30006 -v \"%cd%\\db\\data:/app/data\" termix:dev", "dev:docker:restart": "docker stop termix-dev 2>nul & docker rm termix-dev 2>nul & docker run -d --name termix-dev -p 8080:8080 -p 30001-30006:30001-30006 -v \"%cd%\\db\\data:/app/data\" termix:dev", "generate:openapi": "tsc -p tsconfig.node.json && node ./dist/backend/backend/swagger.js", "preview": "vite preview", "electron:dev": "concurrently \"npm run dev\" \"powershell -c \\\"Start-Sleep -Seconds 5\\\" && electron .\"", "electron:patch-builder": "node scripts/patch-app-builder-lib.cjs", "electron:rebuild": "electron-rebuild -f -w better-sqlite3", "build:win-portable": "npm run build && npm run electron:rebuild && npm run electron:patch-builder && electron-builder --win --dir", "build:win-installer": "npm run build && npm run electron:rebuild && npm run electron:patch-builder && electron-builder --win --publish=never", "build:linux-portable": "npm run build && npm run electron:rebuild && npm run electron:patch-builder && electron-builder --linux --dir", "build:linux-appimage": "npm run build && npm run electron:rebuild && npm run electron:patch-builder && electron-builder --linux AppImage", "build:linux-targz": "npm run build && npm run electron:rebuild && npm run electron:patch-builder && electron-builder --linux tar.gz", "build:mac": "npm run build && npm run electron:rebuild && npm run electron:patch-builder && electron-builder --mac --universal", "build:mac-dev": "npm run build && npm run electron:rebuild && npm run electron:patch-builder && electron-builder --mac dir --publish=never" }, "dependencies": { "axios": "^1.15.2", "bcryptjs": "^3.0.3", "better-sqlite3": "^12.9.0", "body-parser": "^2.2.2", "chalk": "^5.6.2", "cookie-parser": "^1.4.7", "cors": "^2.8.6", "dotenv": "^17.4.2", "drizzle-orm": "^0.45.2", "express": "^5.2.1", "guacamole-lite": "^1.2.0", "https-proxy-agent": "^7.0.6", "jose": "^6.2.2", "js-yaml": "^4.1.1", "jsonwebtoken": "^9.0.3", "jszip": "^3.10.1", "motion": "^12.38.0", "multer": "^2.1.1", "nanoid": "^5.1.9", "qrcode": "^1.5.4", "react-is": "^19.2.5", "socks": "^2.8.7", "speakeasy": "^2.0.0", "ssh2": "^1.17.0", "undici": "^7.0.0", "ws": "^8.20.0" }, "devDependencies": { "@codemirror/autocomplete": "^6.20.1", "@codemirror/commands": "^6.10.3", "@codemirror/search": "^6.7.0", "@codemirror/theme-one-dark": "^6.1.3", "@codemirror/view": "^6.41.1", "@commitlint/cli": "^20.5.0", "@commitlint/config-conventional": "^20.5.0", "@deadendjs/swagger-jsdoc": "^8.1.2", "@electron/notarize": "^3.1.1", "@electron/rebuild": "^4.0.4", "@eslint/js": "^9.0.0", "@hookform/resolvers": "^5.2.2", "@monaco-editor/react": "^4.7.0", "@radix-ui/react-accordion": "^1.2.12", "@radix-ui/react-alert-dialog": "^1.1.15", "@radix-ui/react-checkbox": "^1.3.3", "@radix-ui/react-dialog": "^1.1.15", "@radix-ui/react-dropdown-menu": "^2.1.16", "@radix-ui/react-label": "^2.1.8", "@radix-ui/react-popover": "^1.1.15", "@radix-ui/react-progress": "^1.1.8", "@radix-ui/react-scroll-area": "^1.2.10", "@radix-ui/react-select": "^2.2.6", "@radix-ui/react-separator": "^1.1.8", "@radix-ui/react-slider": "^1.3.6", "@radix-ui/react-slot": "^1.2.4", "@radix-ui/react-switch": "^1.2.6", "@radix-ui/react-tabs": "^1.1.13", "@radix-ui/react-tooltip": "^1.2.8", "@tailwindcss/vite": "^4.2.4", "@types/better-sqlite3": "^7.6.13", "@types/cookie-parser": "^1.4.10", "@types/cors": "^2.8.19", "@types/express": "^5.0.6", "@types/guacamole-common-js": "^1.5.5", "@types/js-yaml": "^4.0.9", "@types/jsonwebtoken": "^9.0.10", "@types/multer": "^2.1.0", "@types/node": "^24.12.2", "@types/qrcode": "^1.5.6", "@types/react": "^19.2.14", "@types/react-dom": "^19.2.3", "@types/speakeasy": "^2.0.10", "@types/ssh2": "^1.15.5", "@types/ws": "^8.18.1", "@uiw/codemirror-extensions-langs": "^4.25.9", "@uiw/codemirror-theme-github": "^4.25.9", "@uiw/react-codemirror": "^4.25.9", "@vitejs/plugin-react": "^6.0.1", "@xterm/addon-clipboard": "^0.2.0", "@xterm/addon-fit": "^0.10.0", "@xterm/addon-unicode11": "^0.8.0", "@xterm/addon-web-links": "^0.11.0", "@xterm/xterm": "^5.5.0", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "cmdk": "^1.1.1", "concurrently": "^9.2.1", "cytoscape": "^3.33.2", "electron": "^41.3.0", "electron-builder": "^26.8.1", "eslint": "^9.0.0", "eslint-plugin-react-hooks": "^7.1.1", "eslint-plugin-react-refresh": "^0.5.2", "eslint-plugin-unused-imports": "^4.4.1", "globals": "^17.5.0", "guacamole-common-js": "^1.5.0", "husky": "^9.1.7", "i18next": "^26.0.8", "i18next-browser-languagedetector": "^8.2.1", "lint-staged": "^16.4.0", "lucide-react": "^1.11.0", "next-themes": "^0.4.6", "prettier": "3.8.3", "react": "^19.2.5", "react-cytoscapejs": "^2.0.0", "react-dom": "^19.2.5", "react-grid-layout": "^2.2.3", "react-h5-audio-player": "^3.10.2", "react-hook-form": "^7.73.1", "react-i18next": "^17.0.4", "react-icons": "^5.6.0", "react-markdown": "^10.1.0", "react-pdf": "^10.4.1", "react-photo-view": "^1.2.7", "react-resizable-panels": "^4.10.0", "react-simple-keyboard": "^3.8.196", "react-syntax-highlighter": "^16.1.1", "react-xtermjs": "^1.0.10", "recharts": "^3.8.1", "remark-gfm": "^4.0.1", "sonner": "^2.0.7", "tailwind-merge": "^3.5.0", "tailwindcss": "^4.2.4", "typescript": "~6.0.3", "typescript-eslint": "^8.59.0", "vite": "^8.0.10", "zod": "^4.3.6" }, "lint-staged": { "*.{ts,tsx}": [ "eslint --fix", "prettier --write" ], "*.{js,jsx}": [ "prettier --write" ], "*.{json,css,md}": [ "prettier --write" ] }, "overrides": { "@electron/asar": "^4.2.0", "@electron/get": "^5.0.0", "dompurify": "^3.4.1", "eslint-visitor-keys": "^4.2.1", "prebuild-install": "npm:@mmomtchev/prebuild-install@1.0.2", "rimraf": "file:vendor/rimraf-compat" } }