P1-0: V8 heap cap (HOMARR_MAX_OLD_SPACE_SIZE, default 512MB)
P1-1: Module graph cuts
- Dynamic integration imports (55 static → lazy loaders)
- Conditional DB driver loading (only configured driver loaded)
- Replace jsdom with linkedom for SVG sanitization
- Delete eager widget barrel (55 import * as → 0)
- Extract createRetryableLoader to @homarr/common
P1-2: Enable cacheComponents + restructure root layout
- Suspense boundaries around session-dependent providers
- ColorSchemeScript replaces server-side cookie reads
- Board/manage/auth layouts wrapped in Suspense
P1-3: Cache read paths
- Cache tag registry + invalidation helpers
- Cache invalidation wired into all mutation routers
- Translation deep-merge memoized per locale
P1-4: Prerendered shells + loading.tsx files
P1-5: Shared integration data cache (60s TTL, stale-while-revalidate)
P1-6: Redis-backed Next.js cache handler (@homarr/next-cache-handler)
P1-7: Redis optional (memory channel fallback), TTL on pubSub:last:*,
Redis clients consolidated from 6 to 2
122 lines
4.2 KiB
JSON
122 lines
4.2 KiB
JSON
{
|
|
"name": "@homarr/nextjs",
|
|
"version": "0.1.0",
|
|
"private": true,
|
|
"type": "module",
|
|
"scripts": {
|
|
"build": "HOMARR_VERSION=$(node -p \"require('../../package.json').version\") pnpm with-env next build",
|
|
"clean": "git clean -xdf .next .turbo node_modules",
|
|
"dev": "pnpm with-env next dev",
|
|
"format": "oxfmt .",
|
|
"lint": "oxlint",
|
|
"start": "pnpm with-env next start",
|
|
"typecheck": "tsc --noEmit",
|
|
"with-env": "dotenv -e ../../.env --"
|
|
},
|
|
"dependencies": {
|
|
"@dnd-kit/core": "catalog:",
|
|
"@dnd-kit/modifiers": "catalog:",
|
|
"@dnd-kit/sortable": "catalog:",
|
|
"@dnd-kit/utilities": "catalog:",
|
|
"@gfazioli/mantine-onboarding-tour": "catalog:",
|
|
"@homarr/analytics": "workspace:^0.1.0",
|
|
"@homarr/api": "workspace:^0.1.0",
|
|
"@homarr/auth": "workspace:^0.1.0",
|
|
"@homarr/boards": "workspace:^0.1.0",
|
|
"@homarr/common": "workspace:^0.1.0",
|
|
"@homarr/core": "workspace:^0.1.0",
|
|
"@homarr/cron-job-status": "workspace:^0.1.0",
|
|
"@homarr/db": "workspace:^0.1.0",
|
|
"@homarr/definitions": "workspace:^0.1.0",
|
|
"@homarr/docker": "workspace:^0.1.0",
|
|
"@homarr/form": "workspace:^0.1.0",
|
|
"@homarr/forms-collection": "workspace:^0.1.0",
|
|
"@homarr/gridstack": "catalog:",
|
|
"@homarr/icons": "workspace:^0.1.0",
|
|
"@homarr/image-proxy": "workspace:^0.1.0",
|
|
"@homarr/integrations": "workspace:^0.1.0",
|
|
"@homarr/modals": "workspace:^0.1.0",
|
|
"@homarr/modals-collection": "workspace:^0.1.0",
|
|
"@homarr/next-cache-handler": "workspace:^0.1.0",
|
|
"@homarr/notifications": "workspace:^0.1.0",
|
|
"@homarr/old-import": "workspace:^0.1.0",
|
|
"@homarr/old-schema": "workspace:^0.1.0",
|
|
"@homarr/redis": "workspace:^0.1.0",
|
|
"@homarr/server-settings": "workspace:^0.1.0",
|
|
"@homarr/settings": "workspace:^0.1.0",
|
|
"@homarr/spotlight": "workspace:^0.1.0",
|
|
"@homarr/tasks": "workspace:^0.1.0",
|
|
"@homarr/translation": "workspace:^0.1.0",
|
|
"@homarr/ui": "workspace:^0.1.0",
|
|
"@homarr/validation": "workspace:^0.1.0",
|
|
"@homarr/websocket": "workspace:^0.1.0",
|
|
"@homarr/widgets": "workspace:^0.1.0",
|
|
"@mantine/colors-generator": "catalog:",
|
|
"@mantine/core": "catalog:",
|
|
"@mantine/dropzone": "catalog:",
|
|
"@mantine/hooks": "catalog:",
|
|
"@mantine/modals": "catalog:",
|
|
"@mantine/tiptap": "catalog:",
|
|
"@modelcontextprotocol/sdk": "catalog:",
|
|
"@scalar/api-reference-react": "catalog:",
|
|
"@tabler/icons-react": "catalog:",
|
|
"@tanstack/react-devtools": "catalog:",
|
|
"@tanstack/react-query": "catalog:",
|
|
"@tanstack/react-query-devtools": "catalog:",
|
|
"@tanstack/react-query-next-experimental": "catalog:",
|
|
"@trpc/client": "catalog:",
|
|
"@trpc/next": "catalog:",
|
|
"@trpc/react-query": "catalog:",
|
|
"@trpc/server": "catalog:",
|
|
"@xterm/addon-canvas": "catalog:",
|
|
"@xterm/addon-fit": "catalog:",
|
|
"@xterm/xterm": "catalog:",
|
|
"adm-zip": "catalog:",
|
|
"babel-plugin-react-compiler": "catalog:",
|
|
"better-sqlite3": "catalog:",
|
|
"chroma-js": "catalog:",
|
|
"clsx": "catalog:",
|
|
"dayjs": "catalog:",
|
|
"dompurify": "catalog:",
|
|
"dotenv": "catalog:",
|
|
"drizzle-orm": "catalog:",
|
|
"flag-icons": "catalog:",
|
|
"glob": "catalog:",
|
|
"jotai": "catalog:",
|
|
"jszip": "catalog:",
|
|
"linkedom": "catalog:",
|
|
"lucide-react": "catalog:",
|
|
"mantine-datatable": "catalog:",
|
|
"mantine-react-table": "catalog:",
|
|
"mcp-handler": "catalog:",
|
|
"next": "catalog:",
|
|
"postcss-preset-mantine": "catalog:",
|
|
"posthog-js": "catalog:",
|
|
"prismjs": "catalog:",
|
|
"react": "catalog:",
|
|
"react-dom": "catalog:",
|
|
"react-error-boundary": "catalog:",
|
|
"react-simple-code-editor": "catalog:",
|
|
"sass": "catalog:",
|
|
"sql.js": "catalog:",
|
|
"superjson": "catalog:",
|
|
"trpc-to-mcp": "catalog:",
|
|
"use-deep-compare-effect": "catalog:",
|
|
"yaml": "catalog:",
|
|
"zod": "catalog:"
|
|
},
|
|
"devDependencies": {
|
|
"@homarr/tsconfig": "workspace:^0.1.0",
|
|
"@types/adm-zip": "catalog:",
|
|
"@types/better-sqlite3": "catalog:",
|
|
"@types/chroma-js": "catalog:",
|
|
"@types/node": "catalog:",
|
|
"@types/prismjs": "catalog:",
|
|
"@types/react": "catalog:",
|
|
"@types/react-dom": "catalog:",
|
|
"concurrently": "catalog:",
|
|
"node-loader": "catalog:",
|
|
"typescript": "catalog:"
|
|
}
|
|
}
|