{ "name": "fluxer_app", "version": "1.0.0", "type": "module", "private": true, "description": "Fluxer is an open-source, independent instant messaging and VoIP platform. Built for friends, groups, and communities.", "homepage": "https://fluxer.app", "author": "Fluxer Contributors ", "sideEffects": [ "*.css", "**/*.css" ], "scripts": { "build": "pnpm wasm:codegen && pnpm generate:colors && pnpm generate:masks && pnpm generate:css-types && tsc --noEmit && pnpm lingui:compile && rm -rf dist && rspack build --mode production && npx tsx scripts/build-sw.mjs", "dev": "pnpm wasm:codegen && pnpm generate:colors && pnpm generate:masks && pnpm generate:css-types && pnpm lingui:compile && rm -rf dist && rspack serve", "generate:css-types": "tcm src --pattern '**/*.module.css'", "electron:build:canary": "BUILD_CHANNEL=canary pnpm electron:compile && BUILD_CHANNEL=canary electron-builder --config electron-builder.canary.yaml", "electron:build:stable": "pnpm electron:compile && electron-builder --config electron-builder.yaml", "electron:compile": "node scripts/build-electron.mjs", "electron:dev": "pnpm electron:compile && electron .", "generate:colors": "cd scripts && go run ./cmd/generate-color-system", "generate:emoji-sprites": "cd scripts && go run ./cmd/generate-emoji-sprites", "generate:masks": "npx tsx scripts/generate-avatar-masks.ts", "knip": "knip", "lingui": "pnpm lingui:extract && cd scripts && pnpm translate && pnpm lingui:compile", "lingui:compile": "lingui compile --strict", "lingui:extract": "lingui extract --clean", "translate": "cd scripts/cmd/locales-pending && go run . --locales-dir=../../../src/locales", "translate:locale": "cd scripts/cmd/locales-pending && go run . --locales-dir=../../../src/locales --locale", "translate:qc": "cd scripts/cmd/locales-pending && go run . --locales-dir=../../../src/locales --qc-only --qc-passes 2", "translate:reset": "cd scripts/cmd/locales-pending/reset && go run . --locales-dir=../../../../src/locales", "set:build-channel": "node scripts/set-build-channel.mjs", "test": "vitest run", "test:coverage": "vitest run --coverage", "test:debug": "vitest run --no-coverage --inspect-brk --threads=false", "test:ui": "vitest --ui", "test:watch": "vitest", "tsc:all": "pnpm wasm:codegen && pnpm tsc -p tsconfig.json && pnpm tsc -p tsconfig.electron.json", "wasm:codegen": "cd crates/libfluxcore && wasm-pack build --target web --out-dir ../../pkgs/libfluxcore --release" }, "dependencies": { "@dnd-kit/core": "6.3.1", "@dnd-kit/modifiers": "9.0.0", "@dnd-kit/sortable": "10.0.0", "@dnd-kit/utilities": "3.2.2", "@electron-webauthn/native": "^0.0.6", "@floating-ui/react": "0.27.16", "@floating-ui/react-dom": "2.1.6", "@hcaptcha/react-hcaptcha": "1.17.2", "@lingui/core": "5.7.0", "@lingui/react": "5.7.0", "@livekit/components-react": "2.9.17", "@livekit/track-processors": "0.7.0", "@marsidev/react-turnstile": "1.4.0", "@mediapipe/tasks-vision": "0.10.14", "@phosphor-icons/react": "2.1.10", "@radix-ui/react-checkbox": "^1.3.3", "@radix-ui/react-radio-group": "1.3.8", "@radix-ui/react-switch": "^1.2.6", "@sentry/react": "10.32.1", "@simplewebauthn/browser": "13.2.2", "bowser": "2.13.1", "clsx": "2.1.1", "colorjs.io": "0.6.0", "combokeys": "3.0.1", "electron-squirrel-startup": "^1.0.1", "electron-webauthn-mac": "^1.0.0", "emoji-regex": "10.6.0", "eventemitter3": "5.0.1", "favico.js": "0.3.10", "framer-motion": "12.23.26", "fs-extra": "11.3.3", "highlight.js": "11.11.1", "idna-uts46-hx": "6.1.0", "katex": "0.16.27", "livekit-client": "2.16.1", "lodash": "4.17.21", "lru-cache": "11.2.4", "luxon": "3.7.2", "match-sorter": "8.2.0", "mobx": "6.15.0", "mobx-persist-store": "1.1.8", "mobx-react-lite": "4.1.1", "motion": "12.23.26", "node-mac-permissions": "^2.5.0", "qrcode": "1.5.4", "react": "19.2.3", "react-aria-components": "1.14.0", "react-dnd": "16.0.1", "react-dnd-accessible-backend": "2.1.0", "react-dnd-html5-backend": "16.0.1", "react-dnd-multi-backend": "9.0.0", "react-dom": "19.2.3", "react-hook-form": "7.69.0", "react-hotkeys-hook": "5.2.1", "react-modal-sheet": "5.2.1", "react-select": "5.10.2", "react-zoom-pan-pinch": "3.7.0", "rxjs": "7.8.2", "thumbhash": "0.1.1", "undici": "7.16.0", "unique-names-generator": "4.7.1", "update-electron-app": "3.1.2", "urlpattern-polyfill": "10.1.0", "valibot": "1.2.0", "ws": "8.18.3" }, "devDependencies": { "@lingui/cli": "5.7.0", "@lingui/swc-plugin": "5.9.0", "@rspack/cli": "1.6.2", "@rspack/core": "1.6.2", "@rspack/plugin-react-refresh": "1.5.1", "@svgr/core": "^8.1.0", "@svgr/plugin-jsx": "^8.1.0", "@svgr/plugin-svgo": "^8.1.0", "@svgr/webpack": "^8.1.0", "@types/combokeys": "2.4.9", "@types/electron-squirrel-startup": "^1.0.2", "@types/jsdom": "27.0.0", "@types/lodash": "4.17.21", "@types/luxon": "3.7.1", "@types/node": "25.0.3", "@types/qrcode": "1.5.6", "@types/react": "19.2.7", "@types/react-dom": "19.2.3", "@types/ws": "^8.18.1", "@vitest/coverage-v8": "4.0.16", "autoprefixer": "^10.4.23", "browserslist": "^4.28.1", "chokidar": "^4.0.0", "electron": "39.2.7", "electron-builder": "26.0.12", "electron-builder-squirrel-windows": "^26.0.12", "esbuild": "^0.27.2", "happy-dom": "20.0.11", "jsdom": "27.4.0", "knip": "5.78.0", "lightningcss": "^1.30.2", "node-addon-api": "^8.5.0", "postcss": "^8.4.49", "postcss-discard-comments": "^7.0.5", "postcss-loader": "^8.2.0", "postcss-modules": "^6.0.1", "postcss-preset-env": "^10.6.0", "react-refresh": "^0.14.2", "tsx": "4.21.0", "typed-css-modules": "^0.9.1", "typescript": "5.9.3", "vitest": "4.0.16", "wasm-pack": "0.13.1" }, "optionalDependencies": { "electron-log": "5.4.3", "uiohook-napi": "1.5.4" }, "browserslist": [ "chrome >= 47", "edge >= 12", "firefox >= 44", "safari >= 9", "ios >= 9", "last 2 versions", "not dead", "> 0.2%", "not op_mini all" ], "packageManager": "pnpm@10.26.0", "pnpm": { "peerDependencyRules": { "allowedVersions": { "react": "*" }, "ignoreMissing": [ "webpack", "babel-plugin-macros" ] }, "overrides": { "@rspack/core": "1.6.2", "@rspack/cli": "1.6.2", "@lingui/swc-plugin": "5.9.0" }, "onlyBuiltDependencies": [ "core-js", "core-js-pure", "electron", "node-mac-permissions", "oxc-resolver", "protobufjs", "uiohook-napi" ] } }