{ "name": "coder-v2", "description": "Coder V2 (Workspaces V2)", "repository": "https://github.com/coder/coder", "private": true, "license": "AGPL-3.0", "scripts": { "build": "NODE_ENV=production pnpm vite build", "check": "biome check --error-on-warnings .", "check:fix": "biome check --error-on-warnings --fix .", "check:all": "pnpm check && pnpm test", "chromatic": "chromatic", "dev": "vite", "format": "biome format --write .", "format:check": "biome format .", "lint": "pnpm run lint:check && pnpm run lint:types && pnpm run lint:circular-deps && knip", "lint:check": " biome lint --error-on-warnings .", "lint:circular-deps": "dpdm --no-tree --no-warning -T ./src/App.tsx", "lint:knip": "knip", "lint:fix": "biome lint --error-on-warnings --write . && knip --fix", "lint:types": "tsc -p .", "playwright:install": "playwright install --with-deps chromium", "playwright:test": "playwright test --config=e2e/playwright.config.ts", "playwright:test-ui": "playwright test --config=e2e/playwright.config.ts --ui $([[ \"$CODER\" == \"true\" ]] && echo --ui-port=7500 --ui-host=0.0.0.0)", "gen:provisioner": "protoc --plugin=./node_modules/.bin/protoc-gen-ts_proto --ts_proto_out=./e2e/ --ts_proto_opt=outputJsonMethods=false,outputEncodeMethods=encode-no-creation,outputClientImpl=false,nestJs=false,outputPartialMethods=false,fileSuffix=Generated,suffix=hey -I ../provisionersdk/proto ../provisionersdk/proto/provisioner.proto", "storybook": "STORYBOOK=true storybook dev -p 6006", "storybook:build": "storybook build", "storybook:ci": "storybook build --test", "test": "jest", "test:ci": "jest --selectProjects test --silent", "test:coverage": "jest --selectProjects test --collectCoverage", "test:watch": "jest --selectProjects test --watch", "stats": "STATS=true pnpm build && npx http-server ./stats -p 8081 -c-1", "update-emojis": "cp -rf ./node_modules/emoji-datasource-apple/img/apple/64/* ./static/emojis" }, "dependencies": { "@emoji-mart/data": "1.2.1", "@emoji-mart/react": "1.1.1", "@emotion/cache": "11.14.0", "@emotion/css": "11.13.5", "@emotion/react": "11.14.0", "@emotion/styled": "11.14.0", "@fastly/performance-observer-polyfill": "2.0.0", "@fontsource-variable/inter": "5.1.1", "@fontsource/fira-code": "5.2.5", "@fontsource/ibm-plex-mono": "5.1.1", "@fontsource/jetbrains-mono": "5.2.5", "@fontsource/source-code-pro": "5.2.5", "@monaco-editor/react": "4.6.0", "@mui/icons-material": "5.16.14", "@mui/material": "5.16.14", "@mui/system": "5.16.14", "@mui/utils": "5.16.14", "@mui/x-tree-view": "7.25.0", "@radix-ui/react-avatar": "1.1.2", "@radix-ui/react-checkbox": "1.1.4", "@radix-ui/react-collapsible": "1.1.2", "@radix-ui/react-dialog": "1.1.4", "@radix-ui/react-dropdown-menu": "2.1.4", "@radix-ui/react-label": "2.1.0", "@radix-ui/react-popover": "1.1.5", "@radix-ui/react-radio-group": "1.2.3", "@radix-ui/react-scroll-area": "1.2.3", "@radix-ui/react-select": "2.1.4", "@radix-ui/react-separator": "1.1.7", "@radix-ui/react-slider": "1.2.2", "@radix-ui/react-slot": "1.1.1", "@radix-ui/react-switch": "1.1.1", "@radix-ui/react-tooltip": "1.1.7", "@tanstack/react-query-devtools": "5.77.0", "@xterm/addon-canvas": "0.7.0", "@xterm/addon-fit": "0.10.0", "@xterm/addon-unicode11": "0.8.0", "@xterm/addon-web-links": "0.11.0", "@xterm/addon-webgl": "0.18.0", "@xterm/xterm": "5.5.0", "ansi-to-html": "0.7.2", "axios": "1.8.2", "chroma-js": "2.4.2", "class-variance-authority": "0.7.1", "clsx": "2.1.1", "cmdk": "1.0.4", "color-convert": "2.0.1", "cron-parser": "4.9.0", "cronstrue": "2.50.0", "dayjs": "1.11.13", "emoji-mart": "5.6.0", "file-saver": "2.0.5", "formik": "2.4.6", "front-matter": "4.0.2", "humanize-duration": "3.32.2", "jszip": "3.10.1", "lodash": "4.17.21", "lucide-react": "0.474.0", "monaco-editor": "0.52.0", "pretty-bytes": "6.1.1", "react": "18.3.1", "react-color": "2.19.3", "react-confetti": "6.2.2", "react-date-range": "1.4.0", "react-dom": "18.3.1", "react-helmet-async": "2.0.5", "react-markdown": "9.0.3", "react-query": "npm:@tanstack/react-query@5.77.0", "react-resizable-panels": "3.0.3", "react-router-dom": "6.26.2", "react-syntax-highlighter": "15.6.1", "react-textarea-autosize": "8.5.9", "react-virtualized-auto-sizer": "1.0.24", "react-window": "1.8.11", "recharts": "2.15.0", "remark-gfm": "4.0.0", "resize-observer-polyfill": "1.5.1", "semver": "7.6.2", "tailwind-merge": "2.6.0", "tailwindcss-animate": "1.0.7", "tzdata": "1.0.44", "ua-parser-js": "1.0.40", "ufuzzy": "npm:@leeoniya/ufuzzy@1.0.10", "undici": "6.21.2", "unique-names-generator": "4.7.1", "uuid": "9.0.1", "websocket-ts": "2.2.1", "yup": "1.6.1" }, "devDependencies": { "@biomejs/biome": "1.9.4", "@chromatic-com/storybook": "3.2.2", "@octokit/types": "12.3.0", "@playwright/test": "1.47.0", "@storybook/addon-actions": "8.5.2", "@storybook/addon-essentials": "8.4.6", "@storybook/addon-interactions": "8.5.3", "@storybook/addon-links": "8.5.2", "@storybook/addon-mdx-gfm": "8.5.2", "@storybook/addon-themes": "8.4.6", "@storybook/preview-api": "8.5.3", "@storybook/react": "8.4.6", "@storybook/react-vite": "8.4.6", "@storybook/test": "8.4.6", "@swc/core": "1.3.38", "@swc/jest": "0.2.37", "@tailwindcss/typography": "0.5.16", "@testing-library/jest-dom": "6.6.3", "@testing-library/react": "14.3.1", "@testing-library/user-event": "14.6.1", "@types/chroma-js": "2.4.0", "@types/color-convert": "2.0.4", "@types/express": "4.17.17", "@types/file-saver": "2.0.7", "@types/humanize-duration": "3.27.4", "@types/jest": "29.5.14", "@types/lodash": "4.17.15", "@types/node": "20.17.16", "@types/react": "18.3.12", "@types/react-color": "3.0.13", "@types/react-date-range": "1.4.4", "@types/react-dom": "18.3.1", "@types/react-syntax-highlighter": "15.5.13", "@types/react-virtualized-auto-sizer": "1.0.4", "@types/react-window": "1.8.8", "@types/semver": "7.5.8", "@types/ssh2": "1.15.1", "@types/ua-parser-js": "0.7.36", "@types/uuid": "9.0.2", "@vitejs/plugin-react": "4.5.0", "autoprefixer": "10.4.20", "chromatic": "11.25.2", "dpdm": "3.14.0", "express": "4.21.2", "jest": "29.7.0", "jest-canvas-mock": "2.5.2", "jest-environment-jsdom": "29.5.0", "jest-fixed-jsdom": "0.0.9", "jest-location-mock": "2.0.0", "jest-websocket-mock": "2.5.0", "jest_workaround": "0.1.14", "knip": "5.51.0", "msw": "2.4.8", "postcss": "8.5.1", "protobufjs": "7.4.0", "rollup-plugin-visualizer": "5.14.0", "rxjs": "7.8.1", "ssh2": "1.16.0", "storybook": "8.5.3", "storybook-addon-remix-react-router": "3.1.0", "tailwindcss": "3.4.17", "ts-proto": "1.164.0", "typescript": "5.6.3", "vite": "6.3.5", "vite-plugin-checker": "0.9.3", "vite-plugin-turbosnap": "1.0.3" }, "browserslist": ["chrome 110", "firefox 111", "safari 16.0"], "resolutions": { "optionator": "0.9.3", "semver": "7.6.2" }, "engines": { "npm": ">=9.0.0 <10.0.0", "node": ">=18.0.0 <21.0.0" }, "pnpm": { "overrides": { "@babel/runtime": "7.26.10", "@babel/helpers": "7.26.10", "esbuild": "^0.25.0", "form-data": "4.0.4", "prismjs": "1.30.0" } } }