{ "$schema": "./package.schema.json", "packageManager": "pnpm@10.18.1", "name": "signal-desktop", "productName": "Signal", "description": "Private messaging from your desktop", "desktopName": "signal.desktop", "repository": "https://github.com/signalapp/Signal-Desktop.git", "version": "8.10.0-alpha.1", "license": "AGPL-3.0-only", "author": { "name": "Signal Messenger, LLC", "email": "support@signal.org" }, "browserslist": "last 1 chrome versions", "main": "bundles/main.js", "scripts": { "postinstall": "pnpm run build:acknowledgments && pnpm run electron:install-app-deps", "postuninstall": "pnpm run build:acknowledgments", "start": "electron .", "generate": "run-s generate:phase-0 generate:phase-1", "generate:phase-0": "run-s build:protobuf build:rolldown:prod", "generate:phase-1": "run-p --aggregate-output --print-label build:icu-types build:compact-locales build:styles:prod get-expire-time build:policy-files", "build-release": "pnpm run build", "notarize": "echo 'No longer necessary'", "get-strings": "node scripts/get-strings.mjs && node scripts/gen-nsis-script.mjs && node scripts/gen-locales-config.mjs && run-p get-strings:locales get-strings:countries get-strings:emoji mark-unusued-strings-deleted && run-p build:compact-locales", "get-strings:locales": "node scripts/build-localized-display-names.mjs locales scripts/locale-data/locale-display-names.csv build/locale-display-names.json", "get-strings:countries": "node scripts/build-localized-display-names.mjs countries scripts/locale-data/country-display-names.csv build/country-display-names.json", "get-strings:emoji": "node scripts/get-emoji-locales.mjs", "push-strings": "node scripts/remove-strings.mjs && node scripts/push-strings.mjs", "mark-unusued-strings-deleted": "node scripts/mark-unused-strings-deleted.mjs", "get-expire-time": "node scripts/get-expire-time.mjs", "build:protobuf": "protopiler --module cjs --output ts/protobuf/compiled.std.js --typedefs ts/protobuf/compiled.std.d.ts protos", "clean:protobuf": "rm -f ts/protobuf/compiled.std.d.ts ts/protobuf/compiled.std.js", "prepare-beta-build": "node scripts/prepare_beta_build.mjs", "prepare-alpha-build": "node scripts/prepare_alpha_build.mjs", "prepare-alpha-version": "node scripts/prepare_tagged_version.mjs alpha", "prepare-axolotl-build": "node scripts/prepare_axolotl_build.mjs", "prepare-axolotl-version": "node scripts/prepare_tagged_version.mjs axolotl", "prepare-adhoc-build": "node scripts/prepare_adhoc_build.mjs", "prepare-adhoc-version": "node scripts/prepare_tagged_version.mjs adhoc", "prepare-staging-build": "node scripts/prepare_staging_build.mjs", "prepare-no-delay-release": "node scripts/prepare-no-delay-release.mjs", "prepare-linux-build": "node scripts/prepare_linux_build.mjs", "test": "run-s test-node test-electron test-lint-intl test-oxlint", "test-electron": "node scripts/test-electron.mjs", "test-release": "node scripts/test-release.mjs", "test-node": "cross-env NODE_ENV=test NODE_OPTIONS='--import=tsx' LANG=en-us electron-mocha --timeout 10000 --file ts/test-node/setup.preload.ts --recursive ts/test-node/**/*.{ts,tsx} scripts/**/*_test.mjs", "test-mock": "node scripts/mocha-separator.mjs --require ts/test-mock/setup-ci.node.ts -- ts/test-mock/**/*_test.node.ts", "test-mock-docker": "mocha --require ts/test-mock/setup-ci.node.ts ts/test-mock/**/*_test.docker.node.ts", "test-oxlint": "mocha --require .oxlint/test-setup.mjs .oxlint/rules/**/*.test.mjs", "test-lint-intl": "tsx ./build/intl-linter/linter.node.ts --test", "oxlint": "oxlint", "lint": "run-p --aggregate-output --print-label lint-prettier lint-css check:types oxlint lint-knip", "lint-deps": "tsx ts/util/lint/linter.node.ts", "lint-deps:sort": "tsx ts/util/lint/sort_exceptions.node.ts", "lint-license-comments": "tsx ts/util/lint/license_comments.node.ts", "lint-prettier": "pprettier --check '**/*.{ts,tsx,d.ts,js,json,html,scss,md,yml,yaml}' '!node_modules/**'", "lint-intl": "tsx ./build/intl-linter/linter.node.ts", "lint-css": "stylelint '**/*.scss' --cache", "lint-knip": "pnpm run lint-knip:all && pnpm run lint-knip:prod", "lint-knip:all": "knip --cache", "lint-knip:prod": "knip --production --cache", "danger:local": "cd danger && npm run danger:local", "danger:ci": "cd danger && npm run danger:ci", "format": "pprettier --write '**/*.{ts,tsx,d.ts,js,json,html,scss,md,yml,yaml}' '!node_modules/**'", "svgo": "svgo --multipass images/**/*.svg images/*.svg", "transpile": "run-p check:types build:rolldown", "check:types": "tsgo --noEmit", "clean-transpile": "node scripts/clean-transpile.mjs", "ready": "npm-run-all --print-label clean-transpile generate --parallel lint lint-deps lint-intl test-node test-electron", "dev": "pnpm run build:protobuf && cross-env SIGNAL_ENV=storybook storybook dev --port 6006", "dev:transpile": "run-p \"check:types --watch\" dev:rolldown dev:icu-types dev:protobuf", "dev:rolldown": "pnpm build:rolldown --watch", "dev:styles": "pnpm run '/^dev:styles:(sass|tailwind)$/'", "dev:styles:sass": "pnpm run build:styles:sass --watch", "dev:styles:tailwind": "pnpm run build:styles:tailwind --watch", "dev:icu-types": "chokidar ./_locales/en/messages.json --initial --command \"pnpm run build:icu-types\"", "dev:protobuf": "chokidar ./protos/**/*.proto --command \"pnpm run build:protobuf\"", "build:storybook": "pnpm run build:protobuf && cross-env SIGNAL_ENV=storybook storybook build", "test:storybook": "pnpm run build:storybook && run-p --race test:storybook:*", "test:storybook:serve": "http-server storybook-static --port 6006 --silent", "test:storybook:test": "wait-on http://127.0.0.1:6006/ --timeout 5000 && test-storybook --testTimeout 60000", "build": "run-s --print-label generate build:rolldown:prod build:release", "build-win32-all": "run-s --print-label generate build:rolldown:prod build:release-win32-all", "build-linux": "run-s build:policy-files generate build:rolldown:prod && pnpm run build:release --publish=never", "build:acknowledgments": "node scripts/generate-acknowledgments.mjs", "build:dns-fallback": "node scripts/generate-dns-fallback.mjs", "build:icu-types": "node scripts/generate-icu-types.mjs", "build:compact-locales": "node scripts/generate-compact-locales.mjs", "build:tray-icons": "node scripts/generate-tray-icons.mjs", "build:dev": "run-s --print-label generate build:rolldown:prod", "build:rolldown": "rolldown -c", "build:rolldown:prod": "pnpm build:rolldown --minify", "build:esbuild:prod": "pnpm build:rolldown:prod", "build:policy-files": "node scripts/gen-policy-files.mjs", "build:styles": "pnpm run \"/^build:styles:(sass|tailwind)$/\"", "build:styles:prod": "pnpm run \"/^build:styles:(sass|tailwind):prod$/\"", "build:styles:sass": "sass stylesheets/manifest.scss:stylesheets/manifest.css stylesheets/manifest_bridge.scss:stylesheets/manifest_bridge.css node_modules/@signalapp/quill-cjs/dist/quill.core.css:stylesheets/quill.css --fatal-deprecation=1.80.7", "build:styles:tailwind": "tailwindcss -i ./stylesheets/tailwind-config.css -o ./stylesheets/tailwind.css", "build:styles:sass:prod": "pnpm run build:styles:sass --style=compressed", "build:styles:tailwind:prod": "pnpm run build:styles:tailwind --minify", "build:electron": "cross-env NODE_OPTIONS='--import=tsx' electron-builder --config.extraMetadata.environment=$SIGNAL_ENV", "build:release": "cross-env SIGNAL_ENV=production pnpm run build:electron --config.directories.output=release", "build:mas-dev": "bash ./scripts/build-mas-dev.sh", "build:release-win32-all": "pnpm run build:release --arm64 --x64", "build:preload-cache": "node scripts/generate-preload-cache.mjs", "electron:install-app-deps": "electron-builder install-app-deps", "check-upgradeable-deps": "node scripts/check-upgradeable-deps.mjs", "react-devtools": "react-devtools", "run-with-devtools": "cross-env REACT_DEVTOOLS=1 run-p --print-label react-devtools start" }, "optionalDependencies": { "fs-xattr": "0.4.0" }, "dependencies": { "@indutny/mac-screen-share": "1.0.13", "@indutny/simple-windows-notifications": "2.0.16", "@signalapp/libsignal-client": "0.92.2", "@signalapp/mute-state-change": "workspace:1.0.0", "@signalapp/ringrtc": "2.68.0", "@signalapp/sqlcipher": "3.2.1", "@signalapp/windows-ucv": "1.0.1", "emoji-datasource": "16.0.0", "google-libphonenumber": "3.2.44" }, "devDependencies": { "@babel/core": "7.29.0", "@babel/helper-plugin-utils": "7.28.6", "@babel/plugin-transform-runtime": "7.29.0", "@babel/plugin-transform-typescript": "7.28.6", "@babel/preset-react": "7.28.5", "@babel/preset-typescript": "7.28.5", "@csstools/stylelint-formatter-github": "2.0.0", "@electron/asar": "3.4.1", "@electron/fuses": "1.5.0", "@electron/notarize": "2.1.0", "@electron/symbolicate-mac": "2.3.1", "@formatjs/icu-messageformat-parser": "3.5.3", "@formatjs/intl": "4.1.4", "@formatjs/intl-localematcher": "0.2.32", "@indutny/dicer": "0.3.2", "@indutny/parallel-prettier": "3.0.0", "@indutny/protopiler": "4.0.0", "@indutny/range-finder": "1.3.4", "@indutny/rezip-electron": "3.0.2", "@indutny/sneequals": "4.0.0", "@internationalized/date": "3.12.0", "@napi-rs/canvas": "0.1.61", "@popperjs/core": "2.11.8", "@react-aria/focus": "3.21.5", "@react-aria/interactions": "3.27.1", "@react-aria/utils": "3.33.1", "@react-spring/web": "10.0.3", "@signalapp/minimask": "1.0.1", "@signalapp/mock-server": "22.0.0", "@signalapp/quill-cjs": "2.1.2", "@storybook/addon-a11y": "8.4.4", "@storybook/addon-actions": "8.4.4", "@storybook/addon-controls": "8.4.4", "@storybook/addon-interactions": "8.6.14", "@storybook/addon-jest": "8.4.4", "@storybook/addon-measure": "8.4.4", "@storybook/addon-toolbars": "8.4.4", "@storybook/addon-viewport": "8.4.4", "@storybook/addon-webpack5-compiler-swc": "1.0.5", "@storybook/csf": "0.1.11", "@storybook/react": "8.4.4", "@storybook/react-webpack5": "8.4.4", "@storybook/test": "8.6.15", "@storybook/test-runner": "0.22.0", "@storybook/types": "8.6.14", "@tailwindcss/cli": "4.2.2", "@tailwindcss/postcss": "4.2.2", "@tanstack/react-virtual": "3.13.23", "@types/babel__core": "7.20.5", "@types/babel__helper-plugin-utils": "7.10.3", "@types/blueimp-load-image": "5.16.6", "@types/chai": "5.2.3", "@types/chai-as-promised": "8.0.2", "@types/dashdash": "1.14.3", "@types/debug": "4.1.13", "@types/dom-mediacapture-transform": "0.1.11", "@types/fabric": "4.5.3", "@types/fs-extra": "11.0.4", "@types/google-libphonenumber": "7.4.30", "@types/humanize-duration": "3.27.4", "@types/is-glob": "4.0.4", "@types/js-yaml": "4.0.9", "@types/json-to-ast": "2.1.4", "@types/linkify-it": "5.0.0", "@types/lodash": "4.14.106", "@types/memoizee": "0.4.12", "@types/micromatch": "4.0.10", "@types/mocha": "10.0.10", "@types/node": "24.12.0", "@types/normalize-path": "3.0.2", "@types/parsecurrency": "1.0.2", "@types/pngjs": "6.0.5", "@types/react": "19.2.14", "@types/react-dom": "19.2.3", "@types/react-virtualized": "9.22.3", "@types/redux-logger": "3.0.13", "@types/semver": "7.7.1", "@types/sinon": "21.0.0", "@types/split2": "4.2.3", "@types/write-file-atomic": "4.0.3", "@typescript-eslint/rule-tester": "8.58.0", "@typescript-eslint/utils": "8.58.0", "@typescript/native-preview": "7.0.0-dev.20260303.1", "babel-plugin-lodash": "3.3.4", "better-blockmap": "2.0.1", "blob-util": "2.0.2", "blueimp-load-image": "5.16.0", "blurhash": "2.0.5", "buffer": "6.0.3", "card-validator": "10.0.4", "casual": "1.6.2", "chai": "6.2.2", "chai-as-promised": "8.0.2", "changedpi": "1.0.4", "chokidar-cli": "3.0.0", "cirbuf": "1.0.2", "classnames": "2.5.1", "config": "4.4.1", "country-codes-list": "2.0.0", "credit-card-type": "10.1.2", "cross-env": "10.1.0", "css-loader": "7.1.4", "csv-parse": "6.2.1", "danger": "13.0.7", "dashdash": "2.0.0", "debug": "4.4.3", "direction": "2.0.1", "dom-accessibility-api": "0.7.1", "electron": "41.2.1", "electron-builder": "26.0.14", "electron-mocha": "13.1.0", "emoji-regex": "10.6.0", "enhanced-resolve": "5.20.1", "enquirer": "2.4.1", "eslint": "10.1.0", "eslint-plugin-better-tailwindcss": "4.3.2", "execa": "9.6.1", "fabric": "4.6.0", "fast-glob": "3.3.3", "filesize": "11.0.13", "firstline": "2.0.2", "form-data": "4.0.5", "fs-extra": "11.3.4", "fuse.js": "7.1.0", "got": "14.6.6", "growing-file": "0.1.3", "heic-convert": "2.1.0", "http-server": "14.1.1", "https-proxy-agent": "7.0.6", "humanize-duration": "3.33.2", "intl-tel-input": "26.8.1", "is-glob": "4.0.3", "js-yaml": "4.1.1", "json-to-ast": "2.1.0", "knip": "6.3.0", "linkify-it": "5.0.0", "lodash": "4.17.23", "log-symbols": "7.0.1", "lru-cache": "11.2.7", "memoizee": "0.4.17", "micromatch": "4.0.8", "mocha": "11.7.5", "moment": "2.30.1", "motion": "12.38.0", "mp4box": "0.5.3", "node-fetch": "3.3.2", "normalize-path": "3.0.0", "npm-run-all2": "8.0.4", "oxc-transform": "0.123.0", "oxlint": "1.57.0", "oxlint-tsgolint": "0.17.4", "p-limit": "7.3.0", "p-map": "7.0.4", "p-queue": "9.1.0", "p-timeout": "7.0.1", "parsecurrency": "1.1.1", "pe-library": "2.0.1", "pino": "10.3.1", "pixelmatch": "7.1.0", "playwright": "1.58.2", "pngjs": "7.0.0", "postcss-loader": "8.2.1", "prettier": "3.8.1", "prettier-plugin-tailwindcss": "0.7.2", "qrcode-generator": "2.0.4", "radix-ui": "1.4.3", "react": "19.2.4", "react-aria": "3.47.0", "react-aria-components": "1.16.0", "react-blurhash": "0.3.0", "react-devtools": "7.0.1", "react-devtools-core": "7.0.1", "react-dom": "19.2.4", "react-intl": "10.1.0", "react-popper": "2.3.0", "react-redux": "9.2.0", "react-virtualized": "9.22.6", "read-last-lines": "1.8.0", "redux": "5.0.1", "redux-logger": "3.0.6", "redux-promise-middleware": "6.2.0", "redux-thunk": "3.1.0", "reselect": "5.1.1", "rolldown": "1.0.0-rc.13", "sass": "1.98.0", "sass-loader": "16.0.7", "semver": "7.7.4", "sinon": "21.0.3", "socks-proxy-agent": "8.0.5", "split2": "4.2.0", "storybook": "8.4.4", "style-loader": "4.0.0", "stylelint": "17.5.0", "stylelint-config-css-modules": "4.6.0", "stylelint-config-recommended-scss": "17.0.0", "stylelint-use-logical-spec": "5.0.1", "svgo": "4.0.1", "synckit": "0.11.11", "tailwindcss": "4.2.2", "tinykeys": "3.0.0", "tsx": "4.21.0", "type-fest": "5.5.0", "typescript": "6.0.2", "url": "0.11.4", "uuid": "13.0.0", "wait-on": "9.0.5", "webpack": "5.96.1", "write-file-atomic": "7.0.1", "zod": "4.3.6" }, "pnpm": { "overrides": { "canvas": "-", "jsdom": "-", "thenify-all>thenify": "3.3.1", "@electron/rebuild@3.7.2>@electron/node-gyp": "10.2.0-electron.2", "react-popper@2.3.0>react": "19.2.4", "react-popper@2.3.0>react-dom": "19.2.4" }, "patchedDependencies": { "casual@1.6.2": "patches/casual+1.6.2.patch", "@types/fabric@4.5.3": "patches/@types+fabric+4.5.3.patch", "qrcode-generator": "patches/qrcode-generator.patch", "fabric@4.6.0": "patches/fabric+4.6.0.patch", "@vitest/expect@2.0.5": "patches/@vitest+expect+2.0.5.patch", "growing-file@0.1.3": "patches/growing-file+0.1.3.patch", "app-builder-lib": "patches/app-builder-lib.patch", "dmg-builder": "patches/dmg-builder.patch", "eslint-plugin-better-tailwindcss": "patches/eslint-plugin-better-tailwindcss.patch", "fs-xattr": "patches/fs-xattr.patch", "@types/chai": "patches/@types__chai.patch", "@napi-rs/canvas@0.1.61": "patches/@napi-rs__canvas@0.1.61.patch", "playwright-core@1.58.2": "patches/playwright-core@1.58.2.patch", "tsx": "patches/tsx.patch", "node-fetch@3.3.2": "patches/node-fetch@3.3.2.patch", "zod@4.3.6": "patches/zod@4.3.6.patch" }, "onlyBuiltDependencies": [ "@indutny/mac-screen-share", "@indutny/simple-windows-notifications", "@parcel/watcher", "@signalapp/libsignal-client", "@signalapp/sqlcipher", "@signalapp/ringrtc", "@signalapp/windows-ucv", "@swc/core", "@tailwindcss/oxide", "electron", "fs-xattr" ], "ignoredBuiltDependencies": [ "core-js", "electron-winstaller", "es5-ext" ] }, "engines": { "node": "24.14.0" }, "build": { "appId": "org.whispersystems.signal-desktop", "nativeRebuilder": "parallel", "mac": { "artifactName": "${name}-mac-${arch}-${version}.${ext}", "category": "public.app-category.social-networking", "darkModeSupport": true, "hardenedRuntime": true, "entitlements": "./build/entitlements.mac.plist", "entitlementsInherit": "./build/entitlements.mac.inherit.plist", "icon": "build/icons/mac/icon.icns", "publish": [ { "provider": "generic", "url": "https://updates.signal.org/desktop" } ], "mergeASARs": true, "sign": "scripts/sign-macos.mjs", "releaseInfo": { "vendor": { "minOSVersion": "21.0.1" } }, "singleArchFiles": "node_modules/@signalapp/{libsignal-client/prebuilds/**,ringrtc/build/**,sqlcipher/prebuilds/**}", "target": [ { "target": "zip", "arch": [ "x64", "arm64" ] }, { "target": "dmg", "arch": [ "universal" ] } ], "bundleVersion": "1", "extendInfo": { "NSAutoFillRequiresTextContentTypeForOneTimeCodeOnMac": true } }, "dmg": { "title": "${productName} Installer", "background": "build/dmg/background.tiff", "icon": "build/dmg/icon.icns", "iconSize": 96, "window": { "width": 540, "height": 394 }, "contents": [ { "type": "file", "x": 152, "y": 161 }, { "path": "/Applications", "type": "link", "x": 368, "y": 161 } ] }, "masDev": { "type": "development", "sign": null, "hardenedRuntime": false, "entitlements": "./build/entitlements.mas-dev.plist", "entitlementsInherit": "./build/entitlements.mas-dev.inherit.plist", "preAutoEntitlements": false, "extendInfo": { "ElectronTeamID": "U68MSDN6DR", "NSCameraUsageDescription": "Signal uses your camera for video calling.", "NSMicrophoneUsageDescription": "Signal uses your microphone for voice and video calling." } }, "win": { "signtoolOptions": { "certificateSubjectName": "Signal Messenger, LLC", "certificateSha1": "8D5E3CD800736C5E1FE459A1F5AA48287D4F6EC6", "publisherName": "Signal Messenger, LLC", "sign": "scripts/sign-windows.mjs", "signingHashAlgorithms": [ "sha256" ] }, "artifactName": "${name}-win-${arch}-${version}.${ext}", "icon": "build/icons/win/icon.ico", "publish": [ { "provider": "generic", "url": "https://updates.signal.org/desktop" } ], "releaseInfo": { "vendor": { "minOSVersion": "10.0.10240" } }, "signExts": [ ".dll", ".node" ], "target": [ "nsis" ], "asarUnpack": [ "build/icons/win/icon.ico" ] }, "nsis": { "deleteAppDataOnUninstall": true, "differentialPackage": true, "customNsisBinary": { "url": "https://updates.signal.org/desktop/nsis/nsis-3.0.4.1.7z", "version": "3.0.4.1-signal", "checksum": "D6XH03F8A4Vzfjpq6zS9eZYXGXktdoaeQh5QgxAZ01pdts3KaDfMilem0x+HUzn9FpzfpgZrD8MVTcFlcPfcWg==" }, "customNsisResources": { "url": "https://updates.signal.org/desktop/nsis/nsis-resources-3.4.1.7z", "version": "3.4.1-signal", "checksum": "KmySC53iz92XNYVgEy5gc0/cpXiyWsxxOX5UETBAt889TIvsNlUx7uKBxkQVf3D2Ycex0D2IPGjRdGYr1bftrw==" } }, "linux": { "executableName": "signal-desktop", "category": "Network;InstantMessaging;Chat", "desktop": { "entry": { "StartupWMClass": "signal" } }, "artifactName": "${name}_${version}_${arch}.${ext}", "target": [ "deb" ], "icon": "build/icons/png", "publish": [ { "provider": "generic", "url": "" } ], "releaseInfo": { "vendor": { "minGlibcVersion": "2.34" } }, "extraResources": [ { "from": "build", "to": "", "filter": [ "org.signalapp.*.policy" ] } ] }, "deb": { "depends": [ "libnotify4", "libxtst6", "libnss3", "libasound2", "libpulse0", "libxss1", "libc6 (>= 2.34)", "libgtk-3-0", "libgbm1", "libx11-xcb1" ] }, "protocols": { "name": "sgnl-url-scheme", "schemes": [ "sgnl", "signalcaptcha" ] }, "artifactBuildCompleted": "scripts/artifact-build-completed.mjs", "afterSign": "scripts/after-sign.mjs", "afterPack": "scripts/after-pack.mjs", "afterAllArtifactBuild": "scripts/after-all-artifact-build.mjs", "asar": { "smartUnpack": false }, "asarUnpack": [ "**/*.node" ], "files": [ "package.json", "config/default.json", "config/${env.SIGNAL_ENV}.json", "config/local-${env.SIGNAL_ENV}.json", "bundles/**", "background.html", "about.html", "screenShare.html", "settings.html", "permissions_popup.html", "debug_log.html", "loading.html", "call_diagnostic.html", { "from": "build/compact-locales", "to": "_locales", "filter": [ "**/values.json", "keys.json" ] }, "js/**", "!ts/**", "!build", "!**/{tsconfig,bower,component}.json", "!**/.{github,husky,grenrc,npmrc,nycrc,taprc,bithoundrc}", "!**/.testem.json", "!**/.babelrc*", "!**/.prettier*", "!**/.jscs*", "!**/*travis*.yml", "!**/{CHANGES,TODO,CHANGES.md~,README.md~}", "!**/*.{bak,bnf,flow,patch,markdown,bnf,mli,ts,map}", "!**/*.{o,hprof,orig,pyc,pyo,rbc,c,h,m}", "!**/._*", "!**/{.DS_Store,.git,.hg,.svn,CVS,RCS,SCCS,__pycache__,thumbs.db,.gitignore,.gitattributes,.flowconfig,.yarn-metadata.json,.idea,appveyor.yml,.travis.yml,circle.yml,npm-debug.log,.nyc_output,yarn.lock,.yarn-integrity}", "!fixtures", "stylesheets/*.css", "preload.bundle.cache", "images/**", "fonts/**", "sounds/*", "build/icons/png/512x512.png", "build/icons/win/icon.ico", "build/available-locales.json", "build/locale-display-names.json", "build/country-display-names.json", "build/dns-fallback.json", "build/optional-resources.json", "build/jumbomoji.json", "node_modules/**", "!node_modules/.cache", "!**/node_modules/**/{CHANGELOG.md,README.md,README,readme.md,readme,test,__tests__,tests,powered-test,example,examples,*.d.ts,*.d.ts.map,*.js.map,*.gypi,.snyk-*.flag,benchmark}", "!node_modules/**/*.{cpp,mm,cc,c,h,hpp}", "!**/node_modules/.bin", "!**/node_modules/**/build/**", "!**/node_modules/**/prebuilds/**", "!node_modules/emoji-datasource/emoji_pretty.json", "!node_modules/emoji-datasource/img/**/*.png", "node_modules/emoji-datasource/categories.json", "node_modules/emoji-datasource/emoji.json", "node_modules/@signalapp/sqlcipher/prebuilds/${platform}-${arch}/*.node", "node_modules/@signalapp/libsignal-client/prebuilds/${platform}-${arch}/*.node", "!node_modules/@signalapp/ringrtc/scripts/*", "node_modules/@signalapp/ringrtc/build/${platform}/*${arch}*.node", "node_modules/@signalapp/windows-ucv/build/Release/*.node", "node_modules/@signalapp/mute-state-change/build/Release/*.node", "node_modules/@indutny/simple-windows-notifications/prebuilds/${platform}-${arch}/*.node", "node_modules/@indutny/mac-screen-share/build/Release/*.node", "node_modules/fs-xattr/build/Release/*.node", "!node_modules/tar", "sticker-creator/dist/**" ] }, "volta": { "node": "24.14.0" } }