Steam 카드 및 게임 페이지에 gamestatus.info 추가 게임 정보를 표시
A userscript for the Steam store and Steam Community that adds extra game information from GameStatus.info — protection, release dates, scores, hardware specs, and more.
While browsing Steam, you see compact info badges on game cards and in the game page header — without leaving the store.
Compatible with Tampermonkey, Violentmonkey, Greasemonkey, ScriptCat, and other managers that support the // ==UserScript== metadata block.
Install URL:
https://raw.githubusercontent.com/NemoKing1210/steam-gamestatus/main/steam-gamestatus.user.js
| Manager | Path |
|---|---|
| Tampermonkey | Dashboard → Utilities → Install from URL |
| Violentmonkey | Dashboard → + → Install from URL |
| Greasemonkey | Add-on menu → New User Script → paste the raw URL |
Paste the install URL above.
steam-gamestatus.user.js in this repository.The script includes @updateURL and @downloadURL metadata pointing to the raw GitHub file. Supported managers check for updates automatically (Tampermonkey: Dashboard → check interval; Violentmonkey: similar).
To release a new version:
@version in steam-gamestatus.user.js and steam-gamestatus.meta.js.CHANGELOG.md.main (or create a GitHub Release).Managers compare the installed @version with the remote metadata to decide whether to offer an update.
/app/{id} links.apphub_OtherSiteInfo next to Community Hub / Store Page links.app_tag, tooltips like store hover popovers| Site | URL pattern |
|---|---|
| Steam Store | https://store.steampowered.com/* |
| Steam Community (app hub) | https://steamcommunity.com/app/* |
Each badge has a colored dot that reflects the game’s status on GameStatus.info:
| Color | Status | Meaning |
|---|---|---|
| Green | Ready | Status indicates the game is ready / available |
| Orange | Pending (recent) | Pending status; released less than one month ago |
| Red | Pending (long wait) | Pending status; released more than one month ago |
| Orange | Protection bypass | Status indicates a protection bypass method |
| Blue | Release today | Game releases today; status may still be pending |
| Gray | Unknown / Not in database | Status unclear, or game not found on GameStatus.info |
| Blue (spinner) | Loading | Data is being fetched from the API |
Clicking a badge opens the game’s page on GameStatus.info (or the site homepage if the game was not found).
Hovering a badge opens a Steam-like popover that may show:
If a game is not in the database, the popover shows a “not in database” chip and lists the API URLs tried during lookup.
Steam page loads
│
▼
Scan DOM for links matching /app/{appId}/
│
├── Game page? ──► Insert loader badge in `.apphub_OtherSiteInfo`
│
└── Listing page? ──► Find card containers, insert loader badges
│
▼
IntersectionObserver (cards near viewport only)
│
▼
Resolve game slug from URL, title, alt text, canonical link
│
▼
Check local cache (GM_getValue)
│
cache miss ──► GET gamestatus.info/back/api/gameinfo/game/{slug}/
│ (up to 2 concurrent requests, slug fallback chain)
▼
Match response by steam_prod_id, cache result
│
▼
Replace loader with colored badge + bind tooltip
The script does not call the GameStatus API by Steam App ID directly. It builds one or more URL slugs from:
/app/{id}/{slug} segment in the link/app/{id}?… only), the Steam Store appdetails name is fetched and slugifiedEach slug is tried in order until a matching record is found (steam_prod_id equals the Steam App ID). Invalid slugs (CDN hostnames, numeric-only segments, etc.) are filtered out.
Results are stored in Tampermonkey/Violentmonkey storage (gs_steam_cache_v5). TTL is configurable in the settings panel (default 6 hours for both found and not-found results; 0 disables caching). Use Clear cache in settings to drop all stored lookups.
Duplicate in-flight requests for the same App ID are deduplicated.
Open GameStatus in the Steam header (or the userscript manager menu) to configure:
| Setting | Default | Notes |
|---|---|---|
| Badge position (vertical / horizontal) | Top / Left | Card badges only; game-page chips stay in the header |
| Badge size | Medium | Small / Medium / Large / Very large; card badges only |
| Show “not in database” badges | On | When off, unmatched cards stay unmarked |
| Cache duration (hours) | 6 | Applies to all cached lookups; max 168 (7 days) |
| Clear cache | — | Immediate; does not require Save |
Steam loads many lists via AJAX (infinite scroll, tab switches). A filtered MutationObserver watches for new game cards and schedules an incremental debounced re-scan (SCAN_DEBOUNCE_MS). Hydration pauses during active scrolling and resumes in small batches when scrolling stops.
steam-gamestatus/
├── steam-gamestatus.user.js # Installable userscript (canonical distribution file)
├── steam-gamestatus.meta.js # Metadata-only companion for faster update checks
├── README.md # Documentation and install instructions
├── CHANGELOG.md # Version history
├── LICENSE # MIT license
└── .gitattributes # GitHub linguist overrides
| File | Purpose |
|---|---|
steam-gamestatus.user.js |
Full script served at @downloadURL / @updateURL |
steam-gamestatus.meta.js |
Lightweight metadata mirror; managers may fetch it instead of the full script when checking for updates |
Key // ==UserScript== fields used by managers:
| Field | Value |
|---|---|
@namespace |
https://github.com/NemoKing1210/steam-gamestatus |
@version |
Semantic version (must be bumped on every release) |
@updateURL / @downloadURL |
Raw GitHub URL of steam-gamestatus.user.js |
@homepageURL |
This repository |
@supportURL |
GitHub Issues |
@license |
MIT |
@grant |
GM_xmlhttpRequest, GM_getValue, GM_setValue, GM_addStyle |
@connect |
gamestatus.info, cdn.gamestatus.info |
Localized @name and @description tags are provided for en, ru, zh-CN, es, pt-BR, de, fr, ja, ko, and pl.
| Grant | Purpose |
|---|---|
GM_xmlhttpRequest |
Fetch game data from GameStatus.info (bypasses CORS) |
GM_getValue / GM_setValue |
Persist response cache between sessions |
GM_addStyle |
Inject badge and tooltip styles |
@connect is limited to gamestatus.info and cdn.gamestatus.info.
steam-gamestatus.user.js file.Tampermonkey does not track local files natively. Options:
@updateURL / @downloadURL to http://localhost:... during development (do not commit local URLs).Constants near the top of steam-gamestatus.user.js can be adjusted:
| Constant | Default | Description |
|---|---|---|
MAX_CONCURRENT |
2 | Parallel API requests |
REQUEST_DELAY_MS |
75 ms | Delay between starting queued API tasks |
MAX_SLUG_ATTEMPTS |
2 | Slug candidates tried per game lookup |
CACHE_TTL_MS |
6 hours | Cache lifetime for found games |
NEGATIVE_CACHE_TTL_MS |
24 hours | Cache lifetime for “not found” results |
CACHE_PERSIST_MS |
1000 ms | Debounce interval for writing cache to storage |
CARD_ROOT_MARGIN |
80px 0px |
How far ahead of the viewport to prefetch cards |
SCAN_DEBOUNCE_MS |
450 ms | Debounce for DOM mutation rescans |
SCROLL_IDLE_MS |
150 ms | Wait after scroll stops before hydrating cards |
HYDRATE_BATCH_SIZE |
3 | Cards hydrated per animation frame |
API responses use the browser’s Accept-Language header (fallback en-US). Dates are formatted with navigator.language.
All game data comes from the public GameStatus.info API:
GET https://gamestatus.info/back/api/gameinfo/game/{slug}/
This project is not affiliated with Valve, Steam, or GameStatus.info. Status information is community-maintained and may be incomplete or outdated. Use it as a reference, not as a guarantee.
MIT — Copyright (c) 2026 NemoKing