{ "name": "umami", "version": "3.1.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": "rollup -c rollup.tracker.config.js", "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", "test": "vitest run", "test:watch": "vitest", "install-heatmap": "playwright install chromium --no-shell", "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": { "@aws-sdk/client-s3": "^3.924.0", "@clickhouse/client": "^1.18.5", "@date-fns/utc": "^2.1.1", "@dicebear/collection": "^9.4.2", "@dicebear/core": "^9.4.2", "@hello-pangea/dnd": "^18.0.1", "@prisma/adapter-pg": "^7.8.0", "@prisma/client": "^7.8.0", "@prisma/extension-read-replicas": "^0.5.0", "@playwright/test": "^1.60.0", "@svgr/cli": "^8.1.0", "@tanstack/react-query": "^5.100.11", "@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", "cors": "^2.8.6", "cross-spawn": "^7.0.3", "date-fns": "^4.2.1", "date-fns-tz": "^3.2.0", "debug": "^4.4.3", "del": "^8.0.1", "detect-browser": "^5.2.0", "dotenv": "^17.4.2", "esbuild": "^0.28.0", "immer": "^11.1.8", "ipaddr.js": "^2.4.0", "is-ci": "^4.1.0", "is-docker": "^4.0.0", "is-localhost-ip": "^3.0.1", "isbot": "^5.1.40", "jsonwebtoken": "^9.0.3", "jszip": "^3.10.1", "kafkajs": "^2.1.0", "lucide-react": "^1.16.0", "maxmind": "^5.0.5", "motion": "^12.39.0", "next": "16.2.6", "next-intl": "4.12.0", "node-fetch": "^3.2.8", "npm-run-all": "^4.1.5", "papaparse": "^5.5.3", "pg": "^8.21.0", "playwright-core": "^1.60.0", "prisma": "^7.8.0", "prop-types": "^15.8.1", "pure-rand": "^8.4.0", "react": "^19.2.6", "react-aria-components": "^1.17.0", "react-dom": "^19.2.6", "react-error-boundary": "^6.1.1", "react-resizable-panels": "^4.11.1", "react-simple-maps": "^3.0.0", "react-use-measure": "^2.0.4", "react-window": "^2.2.7", "redis": "^5.12.1", "request-ip": "^3.3.0", "rrweb": "2.0.0-alpha.4", "rrweb-player": "1.0.0-alpha.4", "semver": "^7.8.0", "serialize-error": "^13.0.1", "thenby": "^1.4.1", "ua-parser-js": "^2.0.9", "uuid": "^14.0.0", "zod": "^4.4.3", "zustand": "^5.0.13" }, "devDependencies": { "@biomejs/biome": "^2.4.15", "@netlify/plugin-nextjs": "^5.15.11", "@rollup/plugin-alias": "^6.0.0", "@rollup/plugin-commonjs": "^29.0.2", "@rollup/plugin-json": "^6.0.0", "@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": "^6.9.1", "@testing-library/react": "^16.3.2", "@testing-library/user-event": "^14.6.1", "@types/node": "^25.9.0", "@types/react": "^19.2.14", "@types/react-dom": "^19.2.2", "babel-plugin-react-compiler": "19.1.0-rc.2", "cross-env": "^10.1.0", "dotenv-cli": "^11.0.0", "jsdom": "^29.1.1", "msw": "^2.14.6", "postcss": "^8.5.14", "postcss-flexbugs-fixes": "^5.0.2", "postcss-import": "^16.1.1", "postcss-preset-env": "11.3.0", "prompts": "2.4.2", "rollup": "^4.60.4", "rollup-plugin-copy": "^3.4.0", "rollup-plugin-delete": "^3.0.2", "rollup-plugin-dts": "^6.4.1", "rollup-plugin-node-externals": "^9.0.1", "rollup-plugin-peer-deps-external": "^2.2.4", "rollup-plugin-postcss": "^4.0.2", "tar": "^7.5.15", "ts-morph": "^28.0.0", "ts-node": "^10.9.1", "tsup": "^8.5.0", "tsx": "^4.22.2", "typescript": "^6.0.3", "vitest": "^4.1.6" } }