Version 2.4.1 · Manifest V3 · Chromium-based browsers (Chrome, Edge, Brave, Opera)
תוסף third-party (לא רשמי) ל-GOG.com — מטבע חי, היסטוריית מחירים, השוואת מחירים בין חנויות, תגיות אישיות, שדרוג עיצובי מלא, עברית ו-RTL, והכל ללא Google Fonts וללא analytics.
Disclaimer / הצהרה משפטית: This is an unofficial third-party extension. It is not affiliated with, endorsed by, or sponsored by GOG sp. z o.o. or CD Projekt S.A. The “GOG” name is used nominatively to describe the storefront the extension works with.
| File / Folder | Purpose |
|---|---|
extension/ |
The shippable extension — manifest.json + background/, content/, lib/, popup/, options/, onboarding/, tags/, icons/. This is what you “Load unpacked” and what gets zipped. |
store/ |
Web-Store material that is not part of the extension: STORE_LISTING.md (dashboard copy) + screenshots/ (5 listing PNGs). Uploaded separately, never bundled in the zip. |
PRIVACY.md |
Privacy policy — host this at a public URL before submitting to the Web Store |
LICENSE |
MIT license |
build.ps1 |
Build script — zips extension/ into dist/gog-enhancer-webstore.zip |
dist/ |
Build outputs (gitignored). Regenerated by build.ps1 |
tests/, package.json, vitest.config.js, eslint.config.js |
Vitest + ESLint harness for the pure utility modules. Not shipped in the extension zip. |
.github/workflows/ |
GitHub Actions: test.yml runs lint+tests on push/PR, release.yml builds the zip and publishes a Release on v*.*.* tag push |
CLAUDE.md |
Project notes for AI coding assistants |
README.md |
This file |
(The list below covers the major v2.x feature surface. For per-version detail, see the Changelog further down.)
storage.sync (קל ומסונכרן בין מכשירים), data בכבד (תגיות, היסטוריה, cache) ב-storage.local. שום דבר לא נופל מעבר למכסות.api.frankfurter.app כל 12 שעות. אפשר לערוך ידנית.gog.com/en/mods כל 24 שעות.inline-start/end במקום left/right, ו-unicode-bidi: isolate למחירים.Alt+G פותח popup, Alt+Shift+G מפעיל/מכבה, Alt+Shift+H מחליף עברית.מופעל דרך toggle “Design injection” בפופאפ. כשמופעל:
ui-monospace / Cascadia / JetBrains) ו-tabular-nums.www.gog.com — לקריאת תוכן הדף ולהזרקת UI.api.frankfurter.app — לשערי מטבע (ללא API key, ללא tracking).chrome.storage.local. לא יוצאות החוצה.gog-plus/
├── manifest.json # MV3, permissions, commands
├── lib/
│ └── storage.js # מעטפת sync/local מאוחדת
├── background/
│ └── background.js # alarms (FX/mods/wishlist) + commands
├── content/
│ ├── content.js # אורקסטרציה ראשית
│ ├── content.css # styles ל-UI שלנו
│ ├── design-injection.css # שדרוג עיצוב ל-GOG עצמו
│ ├── translations.js # מילון עברית + patterns
│ ├── currency-detection.js # זיהוי מטבע בעמוד
│ ├── price-history.js # תיעוד מחירים
│ ├── tooltips.js # טולטיפ מעוצב
│ └── toasts.js # הודעות feedback
├── popup/ # popup על אייקון בסרגל
├── options/ # עמוד הגדרות מתקדם
├── onboarding/ # wizard ראשוני (3 צעדים)
├── tags/ # לוח תגיות + יצוא CSV
└── icons/ # 16/48/128 PNGs
gog-enhancer-webstore.zip מעמוד ה-Releases וחלץ אותו לתיקייה כלשהי (או, אם קלונת את ה-repo, השתמש ישירות בתיקיית extension/).chrome://extensions/.extension/).| Shortcut | Action |
|---|---|
Alt+G |
פתח popup |
Alt+Shift+G |
toggle GOG+ on/off |
Alt+Shift+H |
toggle Hebrew translations |
ניתן לשנות ב-chrome://extensions/shortcuts.
| Permission | למה |
|---|---|
storage |
שמירת העדפות, תגיות, היסטוריה |
activeTab |
רענון הלשונית הפעילה כשלוחצים “Reload” |
alarms |
scheduling של רענון FX/mods/wishlist ברקע |
host: www.gog.com |
זריקת UI לתוך עמודי GOG |
host: api.frankfurter.app |
שליפת שערי מטבע |
gog.com/en/mods שומר על מבנה דומה. אם תהיה רגרסיה, force-refresh דרך Advanced settings./account/wishlist (TTL של 24 שעות). אם לא ביקרת לאחרונה — ה-badge יהיה ריק עד הביקור הבא. ה-tooltip של אייקון ההרחבה ימליץ לבקר.gameGenres) בביקור ראשון. Sci-fi ו-Indie עדיין מבוססים על regex ידני של שמות משחקים מוכרים — ב-GOG הם נראים משויכים ל-“Tags” הרחב יותר ולא ל-“Genre:”, ומבנה זה לא אומת במלואו. עד שמשחק מסוים לא בוקר, כל חמשת הז’אנרים נופלים חזרה ל-regex הישן.rates, ההמרה לא תתבצע. כל ה-rates נשלפים אוטומטית כל 12 שעות מ-frankfurter.app.gameGenres, local/per-device). Card styling
and the wishlist genre filters use this cache when available, falling back
to the old franchise/keyword regex (GENRE_PATTERNS) for anything not yet
visited or outside those three genres (sci-fi, indie — GOG appears to
classify those under its separate, unverified “Tags” cloud, not “Genre:”,
so they’re left on the regex for now). Detection is text-label based
rather than tied to a specific CSS class, since GOG’s Angular markup shifts
between releases; it silently no-ops if the label isn’t found, so the
worst case is identical to pre-2.6.0 behavior.lastSeenVersion key (local, per-device) so it
only surfaces versions you haven’t acknowledged yet — including any you
skipped if the browser was closed across several releases. Source of truth
is lib/changelog.js; add an entry there on every user-facing version bump.Adds price-trust signals while browsing, plus reliability plumbing:
defaults.js
is routed in storage.js, catching the “falls through to local” trap at PR
time. Refreshed dev dependencies to clear Dependabot advisories.Internally: the archive step in build.ps1 (added in this cycle) automatically
tucks the previous webstore zip into dist/archive/ on every version bump.
extension/ + store/Housekeeping only — no code or behavior changes. The repo root now cleanly separates what ships from what doesn’t:
extension/ holds the entire shippable extension (manifest + all code +
icons). This is what you Load-unpacked and what build.ps1 zips. All 34 code
files moved here as git renames, so per-file history is preserved.store/ holds Web-Store material that never ships: STORE_LISTING.md and
screenshots/.README, PRIVACY, LICENSE, CLAUDE.md) and dev tooling
(build.ps1, tests/, package.json, .github/) stay at the root.build.ps1 now zips extension/; test imports point at
../extension/…; the ESLint service-worker glob and the release workflow’s
manifest-path both target extension/.If you Load-unpacked from the repo before: point Chrome at the extension/
subfolder now, not the repo root.
Housekeeping pass that removed personal identifiers from the public repo’s tracked files (commit history was already clean — all commits use the GitHub noreply email):
CLAUDE.md workflow note.CLAUDE.md with a generic
<repo-root> placeholder.LICENSE, README.md,
options footer) from a personal name + city to the DrummingBird1 handle /
neutral wording.v2.1 version pills in the onboarding and options headers.No code or behavior changes.
A full security/privacy review found the codebase solid (no XSS, no privacy leaks, minimal permissions). These are the hardening fixes it produced:
notifLog no longer grows unbounded. The background dedup log (one
timestamped key per fired notification) is now pruned of entries older than
90 days on each daily run. Refund + price-alert + wishlist-jump checks were
consolidated into a single runDailyJobs() that prunes afterwards.style attribute (dashboard game cards) now passes it
through a render-time #hex validator (safeHexColor), so it can’t become a
CSS-injection vector even if a future write-path forgets to validate. All
other color usages already went through CSSOM setProperty (injection-proof).AGENTS.md gitignored. A per-machine Codex mirror of CLAUDE.md (with a
machine-specific path) is no longer flagged as untracked repo noise.No functional behavior changes. All 34 tests pass; ESLint clean.
New features
lib/i18n.js (dictionary-based, supports [data-i18n] and [data-i18n-attr] markup). Sets <html lang> + dir="rtl" automatically.notifLog. Requires the existing opt-in desktopNotifications toggle.og:image cover art. Spotify-style. Falls back to the theme accent if the image is CORS-blocked.gog-plus-pack-…json (includes tags, notes, purchase dates, tag colors), and import packs others share with you. Merge mode — never overwrites existing notes / purchase dates / colors.tag:rpg, lowest:<10, lowest:>5, snapshots:>3, since:2026. Combine freely with plain-text substring search.New features
data-gog-plus-tip tooltip system; only stamped on cards that have data.↓ button on every dashboard game card. One click downloads gog-plus-{slug}-{date}.json with that game’s tags, note, purchase date, and full price history. Backup-friendly.lib/storage historyMaxEntries setting feeds content/price-history.js via cached read + onChange.X KB · Y% of 5 MB local quota (computed locally, no Web Storage API call needed).Bug fixes
runMigrations() is now atomic across the v1→v2 split. If local.set fails, settingsVersion stays at 1 and the migration retries next run. If only sync.remove fails afterwards, data is preserved in local and the stale sync entries are logged but don’t block progress.Visual polish
prefers-reduced-motion.body::before now subtly shifts position+scale over a 90 s loop. Imperceptible motion, hints at depth. Reduced-motion friendly.Bug fixes
< $10 / < $25 filters now work in any locale. Page price is parsed in pageCurrency.code and converted to USD via the rate matrix before comparing — previously the regex only matched $ and silently no-op’d for EU/UK/IL users.cleanLayout CSS no longer hardcodes /promo/20230 and /promo/20240. It now keys off .gog-plus-expired which hideExpiredSales stamps dynamically against currentYear, so the layout stays accurate as years roll.New features
tagDashboardDensity.Infrastructure
.github/workflows/test.yml runs npm test + npm run lint on every push to main and on every PR.npm run lint is now part of the test workflow..gitattributes pins LF for text files in the repo (PowerShell stays CRLF, binaries unchanged). Keeps diffs on GitHub clean across contributors with different core.autocrlf settings.content/price-history.js: record dedup + trim to 100, lowest, stats, and the input-validation edge cases. Total 34 tests, all passing.New features
applyCardBadges now classifies covers by slug pattern (RPG / Horror / Strategy / Sci-fi / Indie) and applies mood-matched hover effects layered on top of the existing CRT-classic and neon-cyberpunk treatments.data-gog-plus-tip hover tooltips on every data point + per-render unique gradient IDs.backdrop-filter: blur+saturate and pulls the page’s og:image into a 60px-blurred backdrop layer.tagOrder, and CSV import (symmetric to the existing CSV export).- lists rendered in the dashboard view. Source stays plain text in the editor.notifications permission, OFF by default; toggle from Advanced Options. Uses local chrome.notifications only.window.GOG_PLUS_DEBUG as a checkbox in Advanced Options → Developer & diagnostics.Behavior fixes
parsePrice now correctly handles EUR-style decimal commas (€19,99 → 19.99) by tail-digit disambiguation. Was returning 1999.data-slug, recreated on mismatch) so it no longer shows stale data for the previous title.gog-plus-cover--classic / --neon / --genre-*) are cleared when the user toggles designInjection off; previously they stuck around until page reload.drmFreeBanner toggle (was sessionStorage, returned in every new tab/window).hideExpiredSales regex tightened to slug-position years only; dropped the text fallback that could false-flag live promos containing “2024” in their description.Storage.get(string|array) now honors GOG_PLUS_DEFAULTS — was inconsistent with the object form.Reset everything now requires typing RESET to confirm; the previous “type-style confirmation” was just another OK/Cancel dialog.lastFxError and surfaced in the popup rate strip + Advanced Options.MAX_ENTRIES for price history bumped 30 → 100 (still well under storage.local quota).Architecture
lib/defaults.js as the canonical source for GOG_PLUS_DEFAULTS and SETTINGS_VERSION — eliminates the four-way duplication that existed in background/content/popup/options.window.GOGPlusStorage instead of chrome.storage.sync directly. Storage scripts now load from popup.html too.gog-enhancer-webstore/ directory is gone; build.ps1 at the repo root produces gog-enhancer-webstore.zip on demand from a single source of truth.package.json, vitest.config.js, tests/) with chrome.* shimming under happy-dom. 24 tests cover storage partitioning, defaults completeness, and parsePrice across locales.PRIVACY.md — a complete privacy policy ready to be hosted publicly before submitting to the Chrome Web Store.LICENSE — MIT, with a trademark clarification appendix about the GOG name.STORE_LISTING.md — copy-paste-ready material for the developer dashboard: short/long descriptions in English and Hebrew, permission justifications, single-purpose statement, screenshot guide.position: relative על ה-anchor החיצוני של כל card, מה שגרם ל-overlays הפנימיים של GOG (תצוגות מקדימות, screenshots בקרוסלה) לקרוס פנימה ולמלא את הכרטיס בתיבות אפורות.:has(> :empty)) שגם הוא הזיקposition: relative על footer ועל card containers דרך [class*="..."]onclick from onboarding (Manifest V3 forbids it)tags.html and onboarding.html from web_accessible_resources (was a fingerprint vector for any gog.com page)/account/wishlist and reports to background (the previous fetch() regex never worked on the SPA)html.gog-plus-disabledמותאם בתחילה למשתמש ישראלי (ILS, מע”מ 18%, עברית) — אבל עובד מצוין גם ל-EU/UK/US/PL. כל שדה ניתן לעריכה.
GOG Enhancer is free, open-source, ad-free, and collects no data. If it saves you money or time and you’d like to support continued development, you can become a supporter:
Entirely optional — every feature stays free for everyone regardless.