{ "name": "homarr", "version": "0.15.3", "description": "Homarr - A homepage for your server.", "license": "MIT", "repository": { "type": "git", "url": "https://github.com/ajnart/homarr" }, "scripts": { "dev": "next dev", "build": "NEXTAUTH_SECRET=WILL_BE_OVERWRITTEN next build", "analyze": "ANALYZE=true next build", "turbo": "DATABASE_URL=file:WILL_BE_OVERWRITTEN.sqlite NEXTAUTH_URL=http://WILL_BE_OVERWRITTEN turbo build", "start": "next start", "typecheck": "tsc --noEmit", "export": "next build && next export", "lint": "next lint", "prettier:check": "prettier --check \"**/*.{ts,tsx}\"", "prettier:write": "prettier --write \"**/*.{ts,tsx}\"", "test": "SKIP_ENV_VALIDATION=1 vitest", "test:docker": "yarn run turbo build && yarn test:run && docker build . -t homarr:local-dev && docker run -p 7575:7575 --name homarr-dev homarr:local-dev", "test:ui": "SKIP_ENV_VALIDATION=1 vitest --ui", "test:run": "SKIP_ENV_VALIDATION=1 vitest run", "test:coverage": "SKIP_ENV_VALIDATION=1 vitest run --coverage", "docker:build": "turbo build && docker build . -t homarr:local-dev", "docker:start": "docker run -p 7575:7575 --name homarr-development homarr:local-dev", "db:migrate": "dotenv ts-node drizzle/migrate/migrate.ts ./drizzle" }, "dependencies": { "@ctrl/deluge": "^4.1.0", "@ctrl/qbittorrent": "^6.0.0", "@ctrl/shared-torrent": "^4.1.1", "@ctrl/transmission": "^4.1.1", "@emotion/react": "^11.10.6", "@emotion/server": "^11.10.0", "@jellyfin/sdk": "^0.8.0", "@mantine/core": "^6.0.0", "@mantine/dates": "^6.0.0", "@mantine/form": "^6.0.0", "@mantine/hooks": "^6.0.0", "@mantine/modals": "^6.0.0", "@mantine/next": "^6.0.0", "@mantine/notifications": "^6.0.0", "@mantine/prism": "^6.0.19", "@mantine/tiptap": "^6.0.17", "@nivo/core": "^0.83.0", "@nivo/line": "^0.83.0", "@t3-oss/env-nextjs": "^0.7.1", "@tabler/icons-react": "^2.20.0", "@tanstack/react-query": "^4.2.1", "@tanstack/react-query-devtools": "^4.24.4", "@tiptap/extension-color": "^2.1.12", "@tiptap/extension-highlight": "^2.1.12", "@tiptap/extension-image": "^2.1.12", "@tiptap/extension-link": "^2.1.12", "@tiptap/extension-table": "^2.1.12", "@tiptap/extension-table-cell": "^2.1.12", "@tiptap/extension-table-header": "^2.1.12", "@tiptap/extension-table-row": "^2.1.12", "@tiptap/extension-task-item": "^2.1.12", "@tiptap/extension-task-list": "^2.1.12", "@tiptap/extension-text-align": "^2.1.12", "@tiptap/extension-text-style": "^2.1.12", "@tiptap/extension-underline": "^2.1.12", "@tiptap/pm": "^2.1.12", "@tiptap/react": "^2.1.12", "@tiptap/starter-kit": "^2.1.12", "@trpc/client": "^10.37.1", "@trpc/next": "^10.37.1", "@trpc/react-query": "^10.37.1", "@trpc/server": "^10.37.1", "@types/bcryptjs": "^2.4.2", "@vitejs/plugin-react": "^4.0.0", "adm-zip": "^0.5.15", "axios": "^1.0.0", "bcryptjs": "^2.4.3", "better-sqlite3": "^8.6.0", "consola": "^3.0.0", "cookies": "^0.8.0", "cookies-next": "^2.1.1", "dayjs": "^1.11.7", "dockerode": "^3.3.2", "dotenv": "^16.3.1", "drizzle-kit": "^0.19.13", "drizzle-orm": "^0.28.6", "drizzle-zod": "^0.5.1", "fily-publish-gridstack": "^0.0.13", "flag-icons": "^6.9.2", "framer-motion": "^10.0.0", "generate-password": "^1.7.0", "html-entities": "^2.3.3", "i18next": "^22.5.1", "immer": "^10.0.2", "js-file-download": "^0.4.12", "ldapjs": "^3.0.5", "mantine-react-table": "^1.3.4", "next": "13.4.12", "next-auth": "^4.23.0", "next-i18next": "^14.0.0", "nextjs-cors": "^2.2.0", "nzbget-api": "^0.0.3", "prismjs": "^1.29.0", "react": "^18.2.0", "react-dom": "^18.2.0", "react-i18next": "^12.3.1", "react-simple-code-editor": "^0.13.1", "rss-parser": "^3.12.0", "sabnzbd-api": "^1.5.0", "swagger-ui-react": "^5.11.0", "tldts": "^6.1.18", "trpc-openapi": "^1.2.0", "uuid": "^9.0.0", "xml-js": "^1.6.11", "xss": "^1.0.14", "zod": "^3.21.4", "zustand": "^4.3.7" }, "devDependencies": { "@next/bundle-analyzer": "^13.0.0", "@next/eslint-plugin-next": "^13.4.5", "@testing-library/react": "^14.0.0", "@trivago/prettier-plugin-sort-imports": "^4.2.0", "@types/adm-zip": "^0.5.5", "@types/better-sqlite3": "^7.6.5", "@types/cookies": "^0.7.7", "@types/dockerode": "^3.3.9", "@types/ldapjs": "^3.0.2", "@types/node": "18.17.8", "@types/prismjs": "^1.26.0", "@types/react": "^18.2.11", "@types/swagger-ui-react": "^4.18.3", "@types/umami": "^0.1.4", "@types/uuid": "^9.0.0", "@types/video.js": "^7.3.51", "@typescript-eslint/eslint-plugin": "^6.0.0", "@typescript-eslint/parser": "^6.0.0", "@vitest/coverage-c8": "^0.33.0", "@vitest/coverage-v8": "^0.34.5", "@vitest/ui": "^0.34.4", "dotenv-cli": "^7.3.0", "eslint": "^8.0.1", "eslint-config-next": "^13.4.5", "eslint-plugin-promise": "^6.0.0", "eslint-plugin-react": "latest", "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-testing-library": "^5.5.1", "eslint-plugin-unused-imports": "^3.0.0", "eslint-plugin-vitest": "^0.2.0", "happy-dom": "^10.0.0", "node-mocks-http": "^1.12.2", "prettier": "^3.0.0", "sass": "^1.56.1", "ts-node": "latest", "turbo": "^1.10.12", "typescript": "5.1.6", "video.js": "^8.0.3", "vite-tsconfig-paths": "^4.2.0", "vitest": "^0.33.0", "vitest-fetch-mock": "^0.2.2" }, "nextBundleAnalysis": { "budget": null, "budgetPercentIncreaseRed": 20, "minimumChangeThreshold": 0, "showDetails": true }, "prettier": { "printWidth": 100, "tabWidth": 2, "parser": "typescript", "singleQuote": true, "trailingComma": "es5", "useTabs": false, "endOfLine": "lf", "importOrder": [ "^@core/(.*)$", "^@server/(.*)$", "^@ui/(.*)$", "^[./]" ], "importOrderSeparation": true, "plugins": [ "@trivago/prettier-plugin-sort-imports" ], "importOrderSortSpecifiers": true }, "eslintConfig": { "ignoreDuringBuilds": true, "extends": [ "next", "eslint:recommended", "plugin:@next/next/recommended", "plugin:react-hooks/recommended", "plugin:react/recommended", "plugin:@typescript-eslint/recommended", "plugin:vitest/recommended" ], "plugins": [ "testing-library", "unused-imports", "react", "vitest" ], "overrides": [ { "files": [ "**/?(*.)+(spec|test).[jt]s?(x)" ], "extends": [ "plugin:testing-library/react" ] } ], "parser": "@typescript-eslint/parser", "parserOptions": { "project": "./tsconfig.json" }, "rules": { "import/no-cycle": "off", "react/react-in-jsx-scope": "off", "react/no-children-prop": "off", "@typescript-eslint/no-unused-vars": "off", "@typescript-eslint/no-unused-imports": "off", "@typescript-eslint/no-unused-expressions": "off", "@typescript-eslint/no-explicit-any": "off", "@typescript-eslint/no-shadow": "off", "@typescript-eslint/no-use-before-define": "off", "@typescript-eslint/no-non-null-assertion": "off", "no-continue": "off", "linebreak-style": 0, "import/extensions": "off", "vitest/max-nested-describe": [ "error", { "max": 3 } ], "testing-library/no-node-access": [ "error", { "allowContainerFirstChild": true } ] } } }