{ "name": "umami", "version": "3.2.0", "description": "A modern, privacy-focused alternative to Google Analytics.", "author": "Umami Software, Inc. ", "license": "MIT", "homepage": "https://umami.is", "repository": { "type": "git", "url": "https://github.com/umami-software/umami.git" }, "type": "module", "scripts": { "dev": "dotenv next dev --turbo", "build": "npm-run-all check-env build-db check-db build-tracker build-recorder build-geo build-app", "start": "next start", "build-docker": "npm-run-all build-db build-tracker build-recorder build-geo build-app", "start-docker": "npm-run-all check-db update-tracker start-server", "start-env": "node scripts/start-env.js", "start-server": "node server.js", "build-app": "next build --turbo", "build-icons": "svgr ./src/assets --out-dir src/components/svg --typescript", "build-components": "node scripts/bump-components.js && tsup", "build-tracker": "npm-run-all check-tracker build-tracker-script build-tracker-types", "build-tracker-script": "rollup -c rollup.tracker.config.js", "build-tracker-types": "tsc -p tsconfig.tracker.types.json && biome format --write src/tracker/index.d.ts", "check-tracker": "tsc -p tsconfig.tracker.json --noEmit", "build-recorder": "rollup -c rollup.recorder.config.js", "build-prisma-client": "node scripts/build-prisma-client.js", "build-lang": "npm-run-all download-country-names download-language-names", "build-geo": "node scripts/build-geo.js", "build-db": "npm-run-all build-db-client build-prisma-client", "build-db-schema": "prisma db pull", "build-db-client": "prisma generate", "update-tracker": "node scripts/update-tracker.js", "update-db": "prisma migrate deploy", "check-db": "node scripts/check-db.js", "check-env": "node scripts/check-env.js", "check-missing-messages": "node scripts/check-missing-messages.js", "copy-db-files": "node scripts/copy-db-files.js", "download-country-names": "node scripts/download-country-names.js", "download-language-names": "node scripts/download-language-names.js", "change-password": "node scripts/change-password.js", "postbuild": "node scripts/postbuild.js", "pretest": "pnpm build-db-client", "test": "vitest run", "test:watch": "vitest", "test:e2e": "playwright test", "test:e2e:ui": "playwright test --ui", "seed-data": "tsx scripts/seed-data.ts", "lint": "biome lint .", "format": "biome format --write .", "check": "biome check --write" }, "cacheDirectories": [ ".next/cache" ], "dependencies": { "@clickhouse/client": "^1.23.1", "@dicebear/collection": "^9.4.2", "@dicebear/core": "^9.4.3", "@playwright/test": "^1.62.0", "@prisma/adapter-pg": "^7.9.1", "@prisma/client": "^7.9.1", "@prisma/extension-read-replicas": "^0.5.0", "@svgr/cli": "^8.1.0", "@tanstack/react-query": "^5.101.4", "@umami/react-zen": "^0.245.0", "bcryptjs": "^3.0.2", "chalk": "^5.6.2", "chart.js": "^4.5.1", "chartjs-adapter-date-fns": "^3.0.0", "classnames": "^2.3.1", "colord": "^2.9.2", "date-fns": "^4.4.0", "date-fns-tz": "^3.2.0", "debug": "^4.4.3", "detect-browser": "^5.2.0", "dotenv": "^17.4.2", "esbuild": "^0.28.1", "immer": "^11.1.15", "ipaddr.js": "^2.4.0", "is-ci": "^4.1.0", "is-docker": "^4.0.0", "is-localhost-ip": "^3.0.1", "isbot": "^5.2.1", "jsonwebtoken": "^9.0.3", "jszip": "^3.10.1", "kafkajs": "^2.1.0", "lucide-react": "^1.27.0", "maxmind": "^5.0.5", "motion": "^12.42.2", "next": "16.2.12", "next-intl": "4.13.4", "node-fetch": "^3.2.8", "npm-run-all": "^4.1.5", "otplib": "^13.4.0", "papaparse": "^5.5.4", "prisma": "^7.9.1", "prop-types": "^15.8.1", "punycode": "^2.3.1", "qrcode": "^1.5.4", "react": "^19.2.8", "react-aria-components": "^1.19.0", "react-dom": "^19.2.8", "react-error-boundary": "^6.1.2", "react-resizable-panels": "^4.12.2", "react-simple-maps": "^3.0.0", "react-window": "^2.3.0", "redis": "^5.12.1", "rrweb": "^2.0.1", "rrweb-player": "2.0.0-alpha.20", "semver": "^7.8.5", "serialize-error": "^13.0.1", "thenby": "^1.4.1", "ua-parser-js": "^2.0.10", "uuid": "^14.0.1", "zod": "^4.4.3", "zustand": "^5.0.14" }, "devDependencies": { "@biomejs/biome": "^2.5.5", "@netlify/plugin-nextjs": "^5.15.13", "@rollup/plugin-commonjs": "^29.0.3", "@rollup/plugin-node-resolve": "^16.0.3", "@rollup/plugin-replace": "^6.0.3", "@rollup/plugin-terser": "^1.0.0", "@rollup/plugin-typescript": "^12.3.0", "@testing-library/jest-dom": "^7.0.0", "@testing-library/react": "^16.3.2", "@testing-library/user-event": "^14.6.1", "@types/jest": "^30.0.0", "@types/node": "^26.1.2", "@types/qrcode": "^1.5.6", "@types/react": "^19.2.17", "@types/react-dom": "^19.2.2", "babel-plugin-react-compiler": "19.1.0-rc.2", "dotenv-cli": "^11.0.0", "jsdom": "^30.0.0", "msw": "^2.15.0", "postcss": "^8.5.23", "postcss-flexbugs-fixes": "^5.0.2", "postcss-preset-env": "11.3.2", "rollup": "^4.62.3", "tar": "^7.5.22", "tsup": "^8.5.0", "tsx": "^4.23.1", "typescript": "^7.0.2", "vitest": "^4.1.10" } }