{
  "name": "donutbrowser",
  "private": true,
  "license": "AGPL-3.0",
  "version": "0.30.0",
  "type": "module",
  "scripts": {
    "predev": "pnpm licenses:generate",
    "dev": "next dev --turbopack -p 12341",
    "prebuild": "pnpm licenses:generate",
    "build": "next build",
    "start": "next start",
    "test": "pnpm test:themes && pnpm test:window-decorations && pnpm test:cookie-bot-limits && pnpm test:proxy-string && pnpm test:profile-search && pnpm test:licenses && pnpm test:xray-packaging && pnpm test:rust:unit && pnpm test:sync-e2e",
    "test:themes": "node --test src/lib/themes.test.mjs",
    "test:window-decorations": "node --test src/lib/window-decorations.test.mjs",
    "test:cookie-bot-limits": "node --test src/lib/cookie-bot-limits.test.mjs",
    "test:proxy-string": "node --test src/lib/proxy-string.test.mjs",
    "test:profile-search": "node --test src/lib/profile-search.test.mjs",
    "test:licenses": "node --test scripts/generate-licenses.test.mjs && node scripts/generate-licenses.mjs --check",
    "test:xray-packaging": "node --test src-tauri/download-xray.test.mjs",
    "licenses:generate": "node scripts/generate-licenses.mjs",
    "licenses:check": "node scripts/generate-licenses.mjs --check",
    "test:rust": "cd src-tauri && cargo test",
    "test:rust:unit": "cd src-tauri && cargo test --lib && cargo test --test donut_proxy_integration && cargo test --test vpn_integration",
    "test:sync-e2e": "node scripts/sync-test-harness.mjs",
    "e2e": "node e2e/run.mjs --suite=full",
    "e2e:smoke": "node e2e/run.mjs --suite=smoke",
    "e2e:ui": "node e2e/run.mjs --suite=ui",
    "e2e:entities": "node e2e/run.mjs --suite=entities",
    "e2e:network": "node e2e/run.mjs --suite=network",
    "e2e:integrations": "node e2e/run.mjs --suite=integrations",
    "e2e:sync": "node e2e/run.mjs --suite=sync",
    "e2e:browser": "node e2e/run.mjs --suite=browser",
    "lint": "pnpm lint:js && pnpm lint:rust && pnpm lint:spell",
    "lint:js": "biome check src/ e2e/ scripts/generate-licenses.mjs scripts/generate-licenses.test.mjs src-tauri/download-xray.mjs src-tauri/download-xray.test.mjs src-tauri/copy-proxy-binary.mjs && tsc --noEmit && cd donut-sync && biome check src/ && tsc --noEmit",
    "lint:rust": "cd src-tauri && cargo clippy --all-targets --all-features -- -D warnings -D clippy::all && cargo fmt --all",
    "lint:spell": "typos .",
    "tauri": "node scripts/run-with-env.mjs tauri",
    "shadcn:add": "pnpm dlx shadcn@latest add",
    "prepare": "husky && husky install",
    "format:rust": "cd src-tauri && cargo clippy --fix --allow-dirty --all-targets --all-features -- -D warnings -D clippy::all && cargo fmt --all",
    "format:js": "biome check src/ e2e/ --write --unsafe && cd donut-sync && biome check src/ --write --unsafe",
    "format": "pnpm format:js && pnpm format:rust",
    "build:sync": "cd donut-sync && pnpm build",
    "cargo": "cd src-tauri && cargo",
    "unused-exports:js": "ts-unused-exports tsconfig.json",
    "check-unused-commands": "cd src-tauri && cargo test test_no_unused_tauri_commands",
    "copy-proxy-binary": "node src-tauri/copy-proxy-binary.mjs",
    "copy-proxy-binary:release": "node src-tauri/copy-proxy-binary.mjs --release",
    "pretauri:dev": "pnpm copy-proxy-binary",
    "precargo": "pnpm copy-proxy-binary"
  },
  "dependencies": {
    "@radix-ui/react-checkbox": "^1.3.11",
    "@radix-ui/react-dialog": "^1.1.23",
    "@radix-ui/react-dropdown-menu": "^2.1.24",
    "@radix-ui/react-label": "^2.1.15",
    "@radix-ui/react-popover": "^1.1.23",
    "@radix-ui/react-portal": "^1.1.17",
    "@radix-ui/react-progress": "^1.1.16",
    "@radix-ui/react-radio-group": "^1.4.7",
    "@radix-ui/react-scroll-area": "^1.2.18",
    "@radix-ui/react-select": "^2.3.7",
    "@radix-ui/react-slot": "^1.3.3",
    "@radix-ui/react-tabs": "^1.1.21",
    "@radix-ui/react-tooltip": "^1.2.16",
    "@tanstack/react-table": "^8.21.3",
    "@tanstack/react-virtual": "^3.14.10",
    "@tauri-apps/api": "~2.11.1",
    "@tauri-apps/plugin-clipboard-manager": "^2.3.2",
    "@tauri-apps/plugin-deep-link": "^2.4.9",
    "@tauri-apps/plugin-dialog": "^2.7.2",
    "@tauri-apps/plugin-fs": "~2.5.1",
    "@tauri-apps/plugin-log": "^2.9.0",
    "@tauri-apps/plugin-opener": "^2.5.4",
    "ahooks": "^3.9.7",
    "canvas-confetti": "^1.9.4",
    "class-variance-authority": "^0.7.1",
    "clsx": "^2.1.1",
    "cmdk": "^1.1.1",
    "color": "^5.0.3",
    "flag-icons": "^7.5.0",
    "i18next": "^26.4.0",
    "lucide-react": "^1.34.0",
    "motion": "^13.1.1",
    "next": "^16.3.2",
    "next-themes": "^0.4.6",
    "onborda": "^1.2.5",
    "radix-ui": "^1.6.7",
    "react": "^19.2.8",
    "react-dom": "^19.2.8",
    "react-i18next": "^17.0.12",
    "react-icons": "^5.7.0",
    "recharts": "3.10.1",
    "sonner": "^2.0.8",
    "tailwind-merge": "^3.6.0",
    "tauri-plugin-macos-permissions-api": "^2.3.0"
  },
  "devDependencies": {
    "@biomejs/biome": "2.5.10",
    "@tailwindcss/postcss": "^4.3.3",
    "@tauri-apps/cli": "~2.11.4",
    "@types/canvas-confetti": "^1.9.0",
    "@types/color": "^4.2.1",
    "@types/node": "^26.3.0",
    "@types/react": "^19.2.18",
    "@types/react-dom": "^19.2.5",
    "husky": "^9.1.7",
    "lint-staged": "^17.3.0",
    "spdx-expression-parse": "5.0.0",
    "tailwindcss": "^4.3.3",
    "ts-unused-exports": "^11.0.1",
    "tw-animate-css": "^1.4.0",
    "typescript": "~6.0.3"
  },
  "packageManager": "pnpm@11.21.0",
  "lint-staged": {
    "**/*.{js,jsx,ts,tsx,json,css}": [
      "biome check --fix"
    ],
    "src-tauri/**/*.rs": [
      "bash -c 'cd src-tauri && cargo fmt --all'",
      "bash -c 'cd src-tauri && cargo clippy --all-targets --all-features -- -D warnings -D clippy::all'",
      "bash -c 'cd src-tauri && cargo test --lib'"
    ],
    "**/*.{rs,ts,tsx,js,jsx,md}": [
      "typos"
    ]
  }
}
