{ "name": "meshtastic-web", "version": "2.6.6-0", "description": "Meshtastic web client", "homepage": "https://meshtastic.org", "bugs": { "url": "https://github.com/meshtastic/web/issues" }, "license": "GPL-3.0-only", "repository": { "type": "git", "url": "git+https://github.com/meshtastic/web.git" }, "type": "module", "scripts": { "preinstall": "npx only-allow pnpm", "setup:certs": "mkcert localhost 127.0.0.1 ::1", "build": "vite build", "build:analyze": "BUNDLE_ANALYZE=true pnpm run build", "lint": "oxlint", "lint:fix": "oxlint --fix", "format": "oxfmt --check .", "format:fix": "oxfmt .", "check": "pnpm lint && pnpm format", "check:fix": "pnpm lint:fix && pnpm format:fix", "dev": "vite", "dev:https": "USE_HTTPS=true vite", "test": "vitest", "typecheck": "tsc -p tsconfig.json --noEmit", "preview": "vite preview", "docker:build": "docker build -t meshtastic-web:latest -f ./infra/Containerfile .", "package": "gzipper c -i html,js,css,png,ico,svg,json,webmanifest,txt dist dist/output && tar -cvf dist/build.tar -C ./dist/output/ ." }, "dependencies": { "@hookform/resolvers": "^5.4.0", "@meshtastic/sdk": "workspace:*", "@meshtastic/sdk-react": "workspace:*", "@meshtastic/sdk-storage-sqlocal": "workspace:*", "@meshtastic/transport-http": "workspace:*", "@meshtastic/transport-web-bluetooth": "workspace:*", "@meshtastic/transport-web-serial": "workspace:*", "@noble/curves": "^2.2.0", "@preact/signals-core": "^1.14.4", "@radix-ui/react-accordion": "^1.2.18", "@radix-ui/react-alert-dialog": "^1.1.21", "@radix-ui/react-checkbox": "^1.3.9", "@radix-ui/react-dialog": "^1.1.21", "@radix-ui/react-dropdown-menu": "^2.1.22", "@radix-ui/react-label": "^2.1.13", "@radix-ui/react-menubar": "^1.1.22", "@radix-ui/react-popover": "^1.1.21", "@radix-ui/react-scroll-area": "^1.2.16", "@radix-ui/react-select": "^2.3.5", "@radix-ui/react-separator": "^1.1.13", "@radix-ui/react-slider": "^1.4.5", "@radix-ui/react-switch": "^1.3.5", "@radix-ui/react-tabs": "^1.1.19", "@radix-ui/react-toast": "^1.2.21", "@radix-ui/react-toggle-group": "^1.1.17", "@radix-ui/react-tooltip": "^1.2.14", "@radix-ui/react-visually-hidden": "^1.2.9", "@tailwindcss/vite": "^4.3.3", "@tanstack/react-router": "^1.170.18", "@tanstack/react-router-devtools": "^1.167.0", "@tanstack/router-cli": "^1.167.21", "@tanstack/router-devtools": "^1.167.0", "@turf/turf": "^7.3.5", "@types/node": "^26.1.0", "@types/web-bluetooth": "^0.0.21", "base64-js": "^1.5.1", "better-result": "^2.10.0", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "cmdk": "^1.1.1", "crypto-random-string": "^6.0.0", "i18next": "^26.3.6", "i18next-browser-languagedetector": "^8.2.0", "i18next-http-backend": "^4.0.0", "idb-keyval": "^6.3.0", "immer": "^11.1.15", "js-cookie": "^3.0.8", "lucide-react": "^1.26.0", "maplibre-gl": "5.24.0", "react": "^19.2.8", "react-dom": "^19.2.8", "react-error-boundary": "^6.1.2", "react-hook-form": "^7.82.0", "react-i18next": "^17.0.11", "react-map-gl": "8.1.1", "react-qrcode-logo": "^4.1.0", "rfc4648": "^1.5.4", "vite": "^8.1.5", "vite-plugin-html": "^3.2.2", "vite-plugin-pwa": "^1.3.0", "zod": "^4.1.12", "zustand": "5.0.14" }, "devDependencies": { "@tanstack/router-plugin": "^1.168.22", "@testing-library/jest-dom": "^7.0.0", "@testing-library/react": "^16.3.0", "@testing-library/user-event": "^14.6.1", "@types/chrome": "^0.2.2", "@types/geojson": "^7946.0.16", "@types/js-cookie": "^3.0.6", "@types/react": "^19.2.17", "@types/react-dom": "^19.2.3", "@types/serviceworker": "^0.0.200", "@types/w3c-web-serial": "^1.0.8", "@vitejs/plugin-basic-ssl": "^2.3.0", "@vitejs/plugin-react": "^6.0.3", "autoprefixer": "^10.5.4", "gzipper": "^8.3.0", "happy-dom": "^20.11.1", "oxfmt": "^0.60.0", "oxlint": "^1.75.0", "tailwind-merge": "^3.6.0", "tailwindcss": "^4.3.3", "tailwindcss-animate": "^1.0.7", "tar": "^7.5.22", "testing-library": "^0.0.2", "typescript": "^7.0.2", "vitest": "^4.1.10" } }