From b99ea611158310375152e5339d5db8d388a4cf26 Mon Sep 17 00:00:00 2001 From: jeffvli Date: Tue, 30 Dec 2025 15:40:58 -0800 Subject: [PATCH] allow analytics opt out from env (#1454) --- README.md | 3 +++ settings.js.template | 2 +- .../features/analytics/hooks/use-analytics-disabled.ts | 7 ++++++- src/renderer/global.d.ts | 5 +++++ 4 files changed, 15 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 6ea7b913a..267998033 100644 --- a/README.md +++ b/README.md @@ -111,6 +111,7 @@ services: - SERVER_LOCK=true # When true AND name/type/url are set, only username/password can be toggled - SERVER_TYPE=jellyfin # the allowed types are: jellyfin, navidrome, subsonic. These values are case insensitive - SERVER_URL= # http://address:port or https://address:port + - ANALYTICS_DISABLED=true # Set to true to disable Umami analytics tracking ports: - 9180:9180 # Alternatively, to restrict to only localhost, - 127.0.0.1:9180:8190 @@ -129,6 +130,8 @@ services: 4. _Optional_ - To hard code the server url, pass the following environment variables: `SERVER_NAME`, `SERVER_TYPE` (one of `jellyfin` or `navidrome` or `subsonic`), `SERVER_URL`. To prevent users from changing these settings, pass `SERVER_LOCK=true`. This can only be set if all three of the previous values are set. +5. _Optional_ - To disable Umami analytics tracking in the Docker/web version, set the environment variable `ANALYTICS_DISABLED=true`. When enabled, the analytics script will not be loaded and all tracking will be disabled. + ## FAQ ### MPV is either not working or is rapidly switching between pause/play states diff --git a/settings.js.template b/settings.js.template index 782f0d7e8..d866d234b 100644 --- a/settings.js.template +++ b/settings.js.template @@ -1 +1 @@ -"use strict";window.SERVER_URL="${SERVER_URL}";window.SERVER_NAME="${SERVER_NAME}";window.SERVER_TYPE="${SERVER_TYPE}";window.SERVER_LOCK=${SERVER_LOCK}; +"use strict";window.SERVER_URL="${SERVER_URL}";window.SERVER_NAME="${SERVER_NAME}";window.SERVER_TYPE="${SERVER_TYPE}";window.SERVER_LOCK=${SERVER_LOCK};window.ANALYTICS_DISABLED="${ANALYTICS_DISABLED}"; diff --git a/src/renderer/features/analytics/hooks/use-analytics-disabled.ts b/src/renderer/features/analytics/hooks/use-analytics-disabled.ts index db81166e7..3570f19ae 100644 --- a/src/renderer/features/analytics/hooks/use-analytics-disabled.ts +++ b/src/renderer/features/analytics/hooks/use-analytics-disabled.ts @@ -1,3 +1,8 @@ export const isAnalyticsDisabled = () => { - return localStorage.getItem('umami.disabled') === '1' || process.env.NODE_ENV === 'development'; + const isSettingOptOut = localStorage.getItem('umami.disabled') === '1'; + const isDevMode = process.env.NODE_ENV === 'development'; + const isEnvOptOut = + window && (window.ANALYTICS_DISABLED === true || window.ANALYTICS_DISABLED === 'true'); + + return isSettingOptOut || isDevMode || isEnvOptOut; }; diff --git a/src/renderer/global.d.ts b/src/renderer/global.d.ts index 81dc336a4..99aed2bb0 100644 --- a/src/renderer/global.d.ts +++ b/src/renderer/global.d.ts @@ -1,5 +1,10 @@ declare global { interface Window { + ANALYTICS_DISABLED?: boolean | string; + SERVER_LOCK?: boolean; + SERVER_NAME?: string; + SERVER_TYPE?: string; + SERVER_URL?: string; umami?: { identify(unique_id: string): void; identify(unique_id: string, data: object): void;