Files
homarr/package.json
T
Thomas 229bd4b3ed chore: use Bun package management and Turbo remote caching (#6978)
* feat: migrate tooling and runtimes to bun

* fix: serialize act installs and adapt backup checks

* fix: finish bun scripts and rootless act setup

* fix: support bun images in runtime benchmarks

* fix: keep a single bun toolchain configuration

* fix: include docs mascot sources in workshop build

* docs: use bun in remaining tool commands

* fix: complete bun sqlite development tooling

* docs: explain sqlite development adapter

* fix: align remaining commands and local ci validation

* fix: use renovate regex fallback with bun

* fix: finalize bun sqlite connections during cleanup

* fix: preserve sqlite foreign key enforcement

* fix: align docker build frontends

* fix: prepare release versions with bun

* Add Bun benchmarks and preserve SQLite connection defaults

* Benchmark Bun installs, conflicts and production workloads

* Force Bun workspace tools and HTTP/1.1 upstream streaming

* Exclude benchmark evidence from Docker contexts

* Expose branch benchmarks through CI

* Verify hydrated widget data in production benchmarks

* Measure image archives and document benchmark protocol

* Audit dependency sharing across every workspace

* Pin pnpm for nested baseline benchmark scripts

* Preserve nested manager pinning on benchmark resume

* Include application and runtime image footprints

* Fail benchmark gates on candidate command errors

* Report complete build overhead and sampled memory bounds

* Validate migration comparisons across pinned revisions

* Record configurable runtime memory budgets

* Retain out-of-memory kills in runtime budget probes

* Reject OOM events consistently across runtime metrics

* Record complete Bun migration benchmarks

* Record memory diagnosis and correct Turbo caching

* Use Bun package management while preserving Node runtimes

* Keep native build fallbacks and exclude development artifacts

* Fix Node ESM metadata and isolate local CI configuration

* Measure development performance and isolate act environment

* Support isolated environment files in rootless act

* Validate the full migration range with act

* Preserve native SQLite binding for bundled migrations

* Use documented dev defaults and report benchmark scope

* Validate dev defaults and isolate restart measurements

* Record package-manager and development benchmarks

* Keep benchmark measurements and link full command artifacts

* Clean up temporary act environment files

* Validate Node runtimes in package-manager comparisons

* Validate every workspace in manual CI runs

* Retain patched nested brace expansion versions

* Complete package-manager and Node performance report

* Normalize archived benchmark logs

* Record final hosted validation

* Cache both Next builds with platform isolation

* Prime cache with write-only mode

* Split Next artifacts below Cloudflare upload limit

* Assemble coherent standalone cache outputs

* Preserve traced middleware entrypoints

* Assemble traced directory links before files

* Separate cached dependencies from assembled output

* Record signed Turbo cache benchmarks

* Remove archived benchmark captures

Full benchmark evidence is preserved at 8f7d3bcd14109bfb13fa664d31710b88d820ad66.

* Remove migration benchmark harness

* fix: correct migration launch and local Act prerequisites

* Consolidate Turbo caches and production artifacts

* Exclude generated files from Docker cache inputs

* fix: address Bun migration review findings

* fix: check restored compiler bundle manifests
2026-10-07 16:38:14 +02:00

419 lines
16 KiB
JSON

{
"name": "homarr",
"version": "2.2.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"
]
}