{ "name": "homarr", "version": "2.3.0", "private": true, "workspaces": { "packages": [ "apps/*", "packages/*", "tooling/*" ], "catalog": { "@ai-sdk/openai-compatible": "3.0.25", "@ai-sdk/react": "4.0.59", "@assistant-ui/react": "0.15.8", "@assistant-ui/react-ai-sdk": "1.4.4", "@assistant-ui/react-lexical": "0.2.7", "@assistant-ui/react-markdown": "0.14.9", "@auth/core": "0.41.3", "@auth/drizzle-adapter": "1.11.3", "@babel/parser": "7.29.7", "@codemirror/autocomplete": "6.20.3", "@codemirror/commands": "6.10.3", "@codemirror/lang-css": "6.3.1", "@codemirror/lang-javascript": "6.2.5", "@codemirror/lang-json": "6.0.2", "@codemirror/lint": "6.9.6", "@codemirror/state": "6.6.0", "@codemirror/theme-one-dark": "6.1.3", "@codemirror/view": "6.43.0", "@ctrl/deluge": "8.0.0", "@ctrl/qbittorrent": "9.14.0", "@ctrl/transmission": "7.4.0", "@dnd-kit/abstract": "0.5.0", "@dnd-kit/collision": "0.5.0", "@dnd-kit/core": "6.3.1", "@dnd-kit/dom": "0.5.0", "@dnd-kit/modifiers": "9.0.0", "@dnd-kit/react": "0.5.0", "@dnd-kit/sortable": "10.0.0", "@dnd-kit/utilities": "3.2.2", "@drizzle-team/brocli": "0.12.0", "@extractus/feed-extractor": "7.2.1", "@gfazioli/mantine-onboarding-tour": "4.0.8", "@gitbeaker/rest": "^43.8.0", "@homarr/node-unifi": "2.6.0", "@immich/sdk": "3.0.2", "@jellyfin/sdk": "0.13.0", "@kubernetes/client-node": "1.4.0", "@libsql/client": "0.18.0", "@mantine/charts": "9.6.0", "@mantine/colors-generator": "9.6.0", "@mantine/core": "9.6.0", "@mantine/dates": "9.6.0", "@mantine/dropzone": "9.6.0", "@mantine/form": "9.6.0", "@mantine/hooks": "9.6.0", "@mantine/lightbox": "9.6.0", "@mantine/modals": "9.6.0", "@mantine/notifications": "9.6.0", "@mantine/spotlight": "9.6.0", "@mantine/tiptap": "9.6.0", "@modelcontextprotocol/server": "2.0.0", "@octokit/auth-app": "^8.2.0", "@paralleldrive/cuid2": "3.3.0", "@playwright/test": "1.61.1", "@rexa-developer/tiks": "0.3.0", "@scalar/api-client-react": "2.0.51", "@scalar/api-reference-react": "0.9.74", "@semantic-release/changelog": "7.0.0", "@semantic-release/commit-analyzer": "13.0.1", "@semantic-release/git": "11.0.1", "@semantic-release/github": "12.0.9", "@semantic-release/release-notes-generator": "14.1.1", "@shadcn/react": "^0.2.1", "@t3-oss/env-nextjs": "0.13.11", "@tabler/icons-react": "3.44.0", "@tanstack/query-async-storage-persister": "5.101.2", "@tanstack/react-devtools": "0.10.9", "@tanstack/react-query": "5.101.2", "@tanstack/react-query-devtools": "5.101.2", "@tanstack/react-query-next-experimental": "5.101.2", "@tanstack/react-query-persist-client": "5.101.2", "@testcontainers/postgresql": "12.0.4", "@testcontainers/redis": "12.0.4", "@tiptap/extension-color": "3.30.5", "@tiptap/extension-details": "3.30.5", "@tiptap/extension-highlight": "3.30.5", "@tiptap/extension-image": "3.30.5", "@tiptap/extension-link": "3.31.3", "@tiptap/extension-placeholder": "3.31.3", "@tiptap/extension-table": "3.30.5", "@tiptap/extension-table-cell": "3.30.5", "@tiptap/extension-table-header": "3.30.5", "@tiptap/extension-table-row": "3.30.5", "@tiptap/extension-task-item": "3.30.5", "@tiptap/extension-task-list": "3.30.5", "@tiptap/extension-text-align": "3.30.5", "@tiptap/extension-text-style": "3.30.5", "@tiptap/extension-underline": "3.30.5", "@tiptap/react": "3.31.3", "@tiptap/starter-kit": "3.31.3", "@trpc/client": "11.18.0", "@trpc/next": "11.18.0", "@trpc/react-query": "11.18.0", "@trpc/server": "11.18.0", "@trpc/tanstack-react-query": "11.18.0", "@turbo/gen": "2.11.7", "@types/adm-zip": "0.5.8", "@types/bcrypt": "6.0.0", "@types/canvas-confetti": "1.9.0", "@types/chroma-js": "3.1.2", "@types/cookies": "0.9.2", "@types/crypto-js": "4.2.2", "@types/css-modules": "1.0.5", "@types/dockerode": "4.0.1", "@types/mdx": "2.0.14", "@types/node": "24.13.3", "@types/node-unifi": "2.5.1", "@types/pg": "8.20.0", "@types/prismjs": "^1.26.6", "@types/react": "19.2.17", "@types/react-dom": "19.2.3", "@types/three": "0.180.0", "@types/video.js": "7.3.58", "@types/ws": "8.18.1", "@types/xml2js": "0.4.14", "@uiw/react-codemirror": "^4.25.11", "@vitejs/plugin-react": "6.0.3", "@vitest/coverage-istanbul": "4.1.10", "@vitest/ui": "4.1.10", "@xterm/addon-canvas": "0.7.0", "@xterm/addon-fit": "0.11.0", "@xterm/xterm": "6.0.0", "acorn": "8.16.0", "acorn-jsx": "5.3.2", "adm-zip": "0.6.1", "ai": "7.0.56", "ajv": "8.18.0", "assistant-stream": "0.3.34", "babel-plugin-react-compiler": "1.0.0", "bcrypt": "6.0.0", "canvas-confetti": "1.9.4", "chroma-js": "3.2.0", "clsx": "2.1.1", "cmdk": "^1.1.1", "codemirror": "6.0.2", "concurrently": "10.0.3", "conventional-changelog-conventionalcommits": "10.2.0", "cookie": "2.0.1", "cookies": "0.9.1", "croner": "10.0.1", "cross-env": "10.1.0", "crypto-js": "4.2.0", "date-fns": "4.4.0", "dayjs": "1.11.21", "deepmerge": "4.3.1", "dns-caching": "0.2.9", "dockerode": "5.0.1", "dotenv": "17.4.2", "dotenv-cli": "11.0.0", "drizzle-kit": "0.31.10", "drizzle-orm": "0.45.2", "drizzle-zod": "0.8.3", "embla-carousel-react": "^8.6.0", "esbuild": "0.28.2", "fast-xml-parser": "5.11.1", "fastify": "5.12.5", "feed": "6.0.0", "flag-icons": "7.5.0", "fumadocs-core": "16.15.12", "fumadocs-mdx": "15.4.3", "fumadocs-openapi": "12.0.1", "fumadocs-ui": "16.15.12", "glob": "13.0.6", "ical.js": "2.2.1", "input-otp": "^1.4.2", "ioredis": "5.11.1", "isomorphic-dompurify": "3.18.0", "jotai": "2.20.1", "jsdom": "29.1.1", "json-schema-typed": "8.0.2", "json5": "2.2.3", "jsonpath-plus": "10.4.0", "jszip": "3.10.1", "ldapts": "8.1.8", "lodash.clonedeep": "4.5.0", "lucide-react": "1.24.0", "mantine-contextmenu": "^9.3.1", "mantine-datatable": "9.3.1", "mantine-react-table": "npm:mantine-react-table-open@9.0.3", "maria2": "0.4.1", "mermaid": "11.17.2", "motion": "^13.0.0", "next": "16.3.6", "next-auth": "5.0.0-beta.32", "next-intl": "4.13.1", "next-themes": "0.4.6", "node-loader": "2.1.0", "octokit": "5.0.5", "oxfmt": "0.58.0", "oxlint": "1.73.0", "pg": "8.22.0", "pocketbase": "0.26.9", "postcss-preset-mantine": "1.18.0", "posthog-js": "1.399.2", "posthog-node": "5.41.0", "prismjs": "^1.30.0", "proxmox-api": "1.1.1", "react": "19.2.7", "react-day-picker": "^10.0.1", "react-dom": "19.2.7", "react-error-boundary": "6.1.2", "react-markdown": "10.1.0", "react-quill-new": "3.8.3", "react-resizable-panels": "^4.12.2", "react-shiki": "0.11.0", "react-simple-code-editor": "^0.14.1", "recharts": "3.9.1", "rehype-raw": "7.0.0", "rehype-sanitize": "6.0.0", "remark-breaks": "4.0.0", "remark-directive": "3.0.1", "remark-gfm": "4.0.1", "sass": "1.101.0", "semantic-release": "25.0.5", "semver-parser": "4.2.1", "serve": "14.2.6", "shiki": "4.4.3", "sonner": "2.0.7", "sql.js": "1.14.1", "superjson": "2.2.6", "svgson": "5.3.1", "testcontainers": "12.0.4", "three": "0.180.0", "timezones-ical-library": "2.2.1", "trpc-to-openapi": "3.3.0", "tsdav": "2.3.0", "turbo": "2.11.7", "typescript": "7.0.2", "undici": "7.29.1", "use-deep-compare-effect": "1.8.1", "video.js": "8.23.9", "vite": "8.1.4", "vite-tsconfig-paths": "6.1.1", "vitest": "4.1.10", "winston": "3.19.0", "ws": "8.21.0", "xml2js": "0.6.2", "yaml": "2.9.0", "zod": "4.4.3", "zod-form-data": "3.0.2", "zod-validation-error": "5.0.0", "better-sqlite3": "12.11.1", "@types/better-sqlite3": "7.6.13" } }, "scripts": { "build": "cross-env CI=true turbo run build", "benchmark:build:docker": "node --experimental-strip-types scripts/benchmarks/docker-build.mts", "benchmark:compare": "node --experimental-strip-types scripts/benchmarks/benchmark-compare.mts", "benchmark:board-graph": "node --experimental-strip-types scripts/benchmarks/board-static-graph.mts", "benchmark:docker": "node --experimental-strip-types scripts/benchmarks/docker-runtime.mts", "benchmark:request-memory": "node --expose-gc --import tsx scripts/benchmarks/request-handler-memory.mts", "clean": "git clean -xdf node_modules", "clean:workspaces": "turbo clean", "check:custom-widgets": "bun run --filter @homarr/custom-widgets check:architecture", "check:custom-widget-bundle": "node ./scripts/check-custom-widget-bundle.mjs", "check:openapi": "tsx ./scripts/check-openapi-schema.mts", "ci:act:all": "bash scripts/ci/act.sh all", "ci:act:cleanup": "bash scripts/ci/act.sh cleanup", "ci:act:docker": "bash scripts/ci/act.sh docker", "ci:act:fast": "bash scripts/ci/act.sh fast", "cli": "bun run with-env tsx packages/cli/index.ts", "db:migration:postgresql:generate": "bun run --filter @homarr/db migration:postgresql:generate", "db:migration:postgresql:run": "bun run --filter @homarr/db migration:postgresql:run", "db:migration:sqlite:generate": "bun run --filter @homarr/db migration:sqlite:generate", "db:migration:sqlite:run": "bun run --filter @homarr/db migration:sqlite:run", "db:seed": "bun run --filter @homarr/db seed", "db:push": "bun run --filter @homarr/db push:sqlite", "db:studio": "bun run --filter @homarr/db studio", "dev": "bun run --filter @homarr/nextjs dev", "dev:benchmark": "node --experimental-strip-types scripts/benchmarks/dev-board.mts", "dev:cli": "go -C tools/homarr-dev run -buildvcs=false .", "dev:cli:build": "go -C tools/homarr-dev build -buildvcs=false .", "dev:cli:install": "go -C tools/homarr-dev install -buildvcs=false .", "dev:docs": "bun run --filter @homarr/docs dev", "docker:docs": "docker compose -f apps/workshop/docker-compose.yml up --build docs", "docker:workshop": "docker compose -f apps/workshop/docker-compose.yml up --build workshop", "docker:dev": "docker compose -f ./development/development.docker-compose.yml up", "docker:dev:up": "docker compose -f ./development/development.docker-compose.yml up -d redis", "format": "turbo format --continue -- --check", "format:fix": "turbo format --continue", "lint": "turbo lint --continue", "lint:fix": "turbo lint --continue -- --fix", "lint:ws": "bun x sherif@latest", "qa:browser-agent:ux": "bash scripts/browser-agent/ux-coherence-happy-paths.sh", "release": "semantic-release", "scripts:update-bug-report-template": "tsx ./scripts/update-bug-report-template.mts", "scripts:update-openapi": "tsx ./scripts/check-openapi-schema.mts --write", "scripts:update-readme-integrations": "tsx ./scripts/update-integration-list.mts", "start": "bun run --filter @homarr/nextjs start", "test": "cross-env NODE_ENV=development CI=true vitest run --project \"!e2e\" --project \"!integration\" --project \"!docs-screenshots\"", "test:coverage": "bun run test --coverage.enabled", "test:integration": "cross-env NODE_ENV=development CI=true vitest run --project integration --maxWorkers 2", "test:docs-screenshots": "cross-env UPDATE_DOCS_SCREENSHOTS=true NODE_ENV=development CI=true vitest run --project docs-screenshots", "test:e2e": "cross-env NODE_ENV=development CI=true vitest run --project e2e --maxWorkers 2", "test:workshop": "sh apps/workshop/test.sh", "test:workshop-live-provider": "node apps/workshop/tests/openrouter-live-smoke.mjs", "test:workshop-image": "sh apps/workshop/test-image.sh", "test:ui": "cross-env NODE_ENV=development CI=true vitest --project \"!e2e\" --project \"!integration\" --project \"!docs-screenshots\" --ui", "typecheck": "turbo typecheck", "with-env": "dotenv -e .env --" }, "dependencies": { "jsonpath-plus": "catalog:" }, "devDependencies": { "@babel/parser": "catalog:", "@playwright/test": "catalog:", "@semantic-release/changelog": "catalog:", "@semantic-release/commit-analyzer": "catalog:", "@semantic-release/git": "catalog:", "@semantic-release/github": "catalog:", "@semantic-release/release-notes-generator": "catalog:", "@testcontainers/redis": "catalog:", "@turbo/gen": "catalog:", "@vitejs/plugin-react": "catalog:", "@vitest/coverage-istanbul": "catalog:", "@vitest/ui": "catalog:", "conventional-changelog-conventionalcommits": "catalog:", "cross-env": "catalog:", "jsdom": "catalog:", "json5": "catalog:", "oxfmt": "catalog:", "oxlint": "catalog:", "semantic-release": "catalog:", "testcontainers": "catalog:", "turbo": "catalog:", "typescript": "catalog:", "vite": "catalog:", "vite-tsconfig-paths": "catalog:", "vitest": "catalog:" }, "overrides": { "@ai-sdk/provider-utils>undici": "8.10.2", "@assistant-ui/core": "0.3.7", "@assistant-ui/react-ai-sdk>@ai-sdk/mcp": "2.0.27", "@assistant-ui/react-ai-sdk>@ai-sdk/react": "4.0.59", "@assistant-ui/react-ai-sdk>ai": "7.0.56", "@assistant-ui/react-ai-sdk>assistant-stream": "0.3.34", "@assistant-ui/store": "0.3.5", "@assistant-ui/tap": "0.9.10", "@babel/helpers@<7.26.10": ">=7.29.7", "@babel/runtime@<7.26.10": ">=7.29.7", "@grpc/grpc-js@<1.12.7": "1.13.6", "@rvf/set-get@<7.0.2": "7.0.2", "@xmldom/xmldom@<0.8.15": "0.8.15", "assistant-cloud": "0.1.38", "axios@>=1.0.0 <1.18.1": "1.20.0", "brace-expansion@>=1.0.0 <1.1.21": "1.1.21", "brace-expansion@>=2.0.0 <2.1.7": "2.1.7", "brace-expansion@>=4.0.0 <5.0.9": "5.0.12", "browserslist@<4.28.7": "4.28.7", "esbuild@<=0.24.2": ">=0.28.1", "fast-uri@>=3.0.0 <3.1.6": "3.1.8", "find-my-way@<9.6.1": "9.9.0", "form-data@>=4.0.0 <4.0.4": ">=4.0.6", "hono@<4.6.5": ">=4.13.7", "image-size@<=2.0.2": "2.0.3", "immutable@>=5.0.0-beta.1 <5.1.8": "5.1.8", "ip-address@<10.3.1": "10.7.1", "js-yaml@>=3.0.0 <3.15.2": "3.15.2", "js-yaml@>=4.0.0 <4.3.2": "4.3.2", "jsdom>undici": "8.10.2", "linkifyjs@<4.3.2": ">=4.3.3", "lodash-es@<4.17.24": "4.18.1", "nanoid@>=3.0.0 <3.3.18": "3.3.18", "nanoid@>=4.0.0 <5.0.9": ">=5.1.16", "picomatch@>=2.0.0 <2.3.2": "2.3.2", "postcss@<8.5.23": "8.5.23", "prismjs@<1.30.0": ">=1.30.0", "protobufjs@<7.5.5": ">=7.5.5 <8", "proxmox-api>undici": "7.29.1", "react-is": "^19.2.7", "rollup@>=4.0.0 <4.22.4": ">=4.62.2", "serialize-javascript@<7.0.5": "7.0.5", "sha.js@<=2.4.11": ">=2.4.12", "shell-quote@<1.8.5": "1.11.0", "svgo@>=3.0.0 <3.3.5": "3.3.5", "tar-fs@>=2.0.0 <2.1.3": ">=3.1.3", "tar-fs@>=3.0.0 <3.0.9": ">=3.1.3", "tmp@<=0.2.3": ">=0.2.7", "undici@>=7.0.0 <7.29.1": "7.29.1", "undici@>=8.0.0 <8.9.0": "8.9.0", "vite@>=5.0.0 <=5.4.18": ">=8.1.4" }, "engines": { "bun": ">=1.4.2", "node": ">=24.18.0" }, "packageManager": "bun@1.4.2", "patchedDependencies": { "dns-caching@0.2.9": "patches/dns-caching.patch", "@types/node-unifi@2.5.1": "patches/@types__node-unifi.patch", "mantine-datatable@9.3.1": "patches/mantine-datatable@9.3.1.patch", "trpc-to-openapi@3.3.0": "patches/trpc-to-openapi.patch" }, "trustedDependencies": [ "@tree-sitter-grammars/tree-sitter-yaml", "bcrypt", "better-sqlite3", "esbuild", "sharp", "ssh2", "tree-sitter", "tree-sitter-json" ] }