{ "name": "umami", "version": "3.4.1", "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", "engines": { "pnpm": "12.3.4" }, "scripts": { "dev": "dotenv next dev --turbo", "build": "npm-run-all check:env build:db check:db build:tracker build:recorder build:geo build:openapi build:packages build:app", "start": "next start", "build:docker": "npm-run-all build:db build:tracker build:recorder build:geo build:openapi build:packages 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:languages": "npm-run-all download:countries download:languages", "build:geo": "node scripts/build-geo.js", "build:openapi": "npm-run-all openapi:generate generate:api:client", "build:db": "npm-run-all generate:db:client build:prisma:client", "db:pull": "prisma db pull", "generate:db:client": "prisma generate", "update:tracker": "node scripts/update-tracker.js", "db:migrate": "prisma migrate deploy", "check:db": "node scripts/check-db.js", "check:env": "node scripts/check-env.js", "check:messages": "node scripts/check-missing-messages.js", "download:countries": "node scripts/download-country-names.js", "download:languages": "node scripts/download-language-names.js", "openapi:generate": "tsx scripts/generate-openapi.ts", "openapi:contracts": "tsx scripts/generate-openapi-contracts.ts", "openapi:check": "tsx scripts/check-openapi.ts", "generate:api": "npm-run-all openapi:generate generate:api:client", "generate:api:client": "tsx scripts/generate-api-client.ts", "check:api:client": "tsx scripts/generate-api-client.ts --check", "build:packages": "pnpm --filter \"./packages/**\" -r build", "test:packages": "pnpm --filter \"./packages/**\" -r test", "postbuild": "node scripts/postbuild.js", "pretest": "pnpm generate:db:client", "test": "vitest run", "test:watch": "vitest", "test:e2e": "playwright test", "test:e2e:ui": "playwright test --ui", "test:api": "tsx scripts/test-api.ts", "test:api:clickhouse": "tsx scripts/test-api.ts --clickhouse", "test:api:run": "playwright test -c playwright.api.config.ts", "test:api:up": "tsx scripts/test-api.ts --up-only", "test:api:down": "tsx scripts/test-api.ts --down", "test:api:coverage": "tsx scripts/test-api.ts --coverage-report", "db:seed": "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.3", "@dicebear/core": "^9.4.3", "@playwright/test": "^1.63.0", "@prisma/adapter-pg": "^7.10.0", "@prisma/client": "^7.10.0", "@prisma/extension-read-replicas": "^0.5.0", "@svgr/cli": "^8.1.0", "@tanstack/react-query": "^5.102.8", "@umami/api-client": "workspace:*", "@umami/mcp": "workspace:*", "@umami/react-zen": "^0.254.0", "bcryptjs": "^3.0.2", "chalk": "^5.6.2", "chart.js": "^4.5.1", "chartjs-adapter-date-fns": "^3.0.0", "colord": "^2.10.0", "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.2", "immer": "^11.1.18", "ipaddr.js": "^2.5.0", "is-ci": "^4.1.0", "is-docker": "^4.0.0", "is-localhost-ip": "^3.0.1", "isbot": "^5.2.2", "jsonwebtoken": "^9.0.3", "jszip": "^3.10.2", "kafkajs": "^2.1.0", "lucide-react": "^1.44.0", "maxmind": "^5.0.7", "motion": "^12.43.0", "next": "16.4.2", "next-intl": "4.13.4", "node-fetch": "^3.2.8", "npm-run-all": "^4.1.5", "otplib": "^13.5.0", "papaparse": "^5.7.0", "prisma": "^7.10.0", "prop-types": "^15.8.1", "punycode": "^2.3.1", "qrcode": "^1.5.4", "react": "^19.3.1", "react-dom": "^19.3.1", "react-error-boundary": "^6.1.5", "react-resizable-panels": "^4.12.4", "react-simple-maps": "^3.0.0", "react-window": "^2.3.1", "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.2", "zod": "^4.6.2", "zustand": "^5.0.15" }, "devDependencies": { "@biomejs/biome": "^2.5.13", "@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.1", "@testing-library/react": "^16.3.3", "@testing-library/user-event": "^14.6.7", "@types/jest": "^30.0.0", "@types/node": "^26.5.1", "@types/qrcode": "^1.5.6", "@types/react": "^19.3.0", "@types/react-dom": "^19.3.0", "babel-plugin-react-compiler": "19.1.0-rc.2", "dotenv-cli": "^11.0.0", "jsdom": "^30.0.1", "msw": "^2.15.0", "openapi-typescript": "^7.13.0", "postcss": "^8.5.28", "postcss-flexbugs-fixes": "^5.0.2", "postcss-preset-env": "11.3.2", "rollup": "^4.63.1", "tar": "^7.5.22", "tsup": "^8.5.0", "tsx": "^4.23.13", "typescript": "^6.0.3", "vitest": "^4.1.11", "zod-openapi": "^6.0.2" } }