{"id":48833528,"url":"https://github.com/bernardopg/steam-utility-multiplataform","last_synced_at":"2026-04-14T22:01:35.819Z","repository":{"id":350342514,"uuid":"1206416924","full_name":"bernardopg/steam-utility-multiplataform","owner":"bernardopg","description":"Cross-platform Steam utility CLI for discovery, compatibility reports, ownership checks, and Steamworks achievement/stat commands.","archived":false,"fork":false,"pushed_at":"2026-04-10T04:42:59.000Z","size":127,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-10T06:24:27.033Z","etag":null,"topics":["cli","cross-platform","csharp","dotnet","gaming","linux","proton","steam","steamworks","windows"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bernardopg.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-09T22:31:29.000Z","updated_at":"2026-04-10T04:43:03.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/bernardopg/steam-utility-multiplataform","commit_stats":null,"previous_names":["bernardopg/steam-utility-linux","bernardopg/steam-utility-multiplataform"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/bernardopg/steam-utility-multiplataform","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bernardopg%2Fsteam-utility-multiplataform","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bernardopg%2Fsteam-utility-multiplataform/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bernardopg%2Fsteam-utility-multiplataform/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bernardopg%2Fsteam-utility-multiplataform/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bernardopg","download_url":"https://codeload.github.com/bernardopg/steam-utility-multiplataform/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bernardopg%2Fsteam-utility-multiplataform/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31817128,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-14T18:05:02.291Z","status":"ssl_error","status_checked_at":"2026-04-14T18:05:01.765Z","response_time":153,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","cross-platform","csharp","dotnet","gaming","linux","proton","steam","steamworks","windows"],"created_at":"2026-04-14T22:01:32.932Z","updated_at":"2026-04-14T22:01:35.806Z","avatar_url":"https://github.com/bernardopg.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# steam-utility-multiplataform\n\n[![Version](https://img.shields.io/github/v/release/bernardopg/steam-utility-multiplataform?display_name=tag\u0026sort=semver)](https://github.com/bernardopg/steam-utility-multiplataform/releases)\n[![CI](https://github.com/bernardopg/steam-utility-multiplataform/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/bernardopg/steam-utility-multiplataform/actions/workflows/ci.yml)\n[![.NET](https://img.shields.io/badge/10-512BD4?logo=dotnet\u0026logoColor=fff)](https://dotnet.microsoft.com/en-us/download/dotnet/10.0)\n[![Steam](https://img.shields.io/badge/Steam-%23000000.svg?logo=steam\u0026logoColor=white)](https://store.steampowered.com/)\n[![Windows](https://custom-icon-badges.demolab.com/badge/Windows-0078D6?logo=windows11\u0026logoColor=white)](docs/RELEASE.md)\n[![Linux](https://img.shields.io/badge/Linux-FCC624?logo=linux\u0026logoColor=black)](docs/RELEASE.md)\n\nCross-platform .NET 10 CLI port of the original [`zevnda/steam-utility`](https://github.com/zevnda/steam-utility), focused on Linux and Windows.\n\nThis project lets you:\n- discover Steam installations, library folders, and installed apps;\n- inspect Proton/compatdata and compatibility-tool assignments;\n- summarize Steam environment state in text or JSON;\n- query ownership through the native Steam client;\n- read and mutate achievements/stats through Steamworks;\n- keep an app in an active idle session.\n\n## What this project is\n\n`steam-utility-multiplataform` is a multiplatform reimplementation of the upstream `steam-utility` command surface in C#/.NET 10.\n\nIt combines two main capabilities:\n\n1. Discovery/reporting\n   - detect Steam roots\n   - parse VDF files\n   - enumerate library folders\n   - read app manifests\n   - inspect compatdata and compatibility tools\n   - generate structured reports\n\n2. Steam-native operations\n   - check ownership through the running Steam client\n   - read achievement/stat data\n   - mutate achievements/stats\n   - keep a game session idle\n\n## Current platform status\n\n| Platform | Status | Notes |\n| --- | --- | --- |\n| Linux | Supported and validated | Real Steam-session validation was executed successfully. See [REPORT_REAL_VALIDATION_TEST_LINUX.md](REPORT_REAL_VALIDATION_TEST_LINUX.md). |\n| Windows | Supported in code and release pipeline | Runtime services and release artifacts exist, but dedicated Windows validation for locator/loaders/resolvers is still a known gap. |\n| macOS | Not supported | No macOS runtime implementation is currently shipped. |\n\n## Release assets\n\nGitHub releases currently publish self-contained single-file binaries for:\n- `linux-x64`\n- `linux-arm64`\n- `win-x64`\n\nEach release also includes SHA-256 checksums generated by the release workflow.\n\n## Requirements\n\n### For source usage\n- .NET 10 SDK\n- Steam installed on Linux or Windows\n\n### For Steam-native commands\nThe following commands require a real Steam session:\n- `check_ownership`\n- `idle`\n- `get_achievement_data`\n- `unlock_achievement`\n- `lock_achievement`\n- `toggle_achievement`\n- `unlock_all_achievements`\n- `lock_all_achievements`\n- `update_stats`\n- `reset_all_stats`\n\nFor those commands, Steam should be running and the user should be logged in.\n\n## Installation\n\n### Option 1: Run from source\n```bash\ndotnet restore\ndotnet build steam-utility-multiplataform.sln -c Release\n```\n\n### Option 2: Use a release binary\nDownload the latest archive from the [GitHub Releases page](https://github.com/bernardopg/steam-utility-multiplataform/releases), extract it, and run the published CLI binary for your platform.\n\n## Quick start\n\n### Build and validate locally\n```bash\ndotnet restore\ndotnet build steam-utility-multiplataform.sln -c Release\ndotnet run --project tests/SteamUtility.Tests -c Release\n```\n\nNote: the test project uses a custom test runner, so `dotnet run --project tests/SteamUtility.Tests -c Release` is the most direct validation path for the current repository.\n\n### Basic discovery examples\n```bash\n# detect the Steam root\ndotnet run --project src/SteamUtility.Cli -- detect\n\n# list library folders\ndotnet run --project src/SteamUtility.Cli -- libraries\n\n# list installed apps\ndotnet run --project src/SteamUtility.Cli -- apps\n\n# generate a higher-level environment summary\ndotnet run --project src/SteamUtility.Cli -- state-report\n\n# same report with JSON output\ndotnet run --project src/SteamUtility.Cli -- state-report --json\n```\n\n### Proton / compatibility examples\n```bash\n# list compatdata entries\ndotnet run --project src/SteamUtility.Cli -- compatdata\n\n# list discovered compatibility tools\ndotnet run --project src/SteamUtility.Cli -- compat-tools\n\n# list explicit compatibility mappings\ndotnet run --project src/SteamUtility.Cli -- compat-mapping\n\n# merge apps + compatdata + mappings into one report\ndotnet run --project src/SteamUtility.Cli -- compat-report --json\n```\n\n### Steam-native examples\n```bash\n# check ownership for explicit AppIDs and write an upstream-compatible games.json\ndotnet run --project src/SteamUtility.Cli -- check_ownership /tmp/games.json \"[730,570,440]\"\n\n# read achievement/stat data\ndotnet run --project src/SteamUtility.Cli -- get_achievement_data 440 /tmp/steam-utility-cache\n\n# keep an app idle\ndotnet run --project src/SteamUtility.Cli -- idle 440 \"Team Fortress 2\"\n\n# mutate achievements/stats\ndotnet run --project src/SteamUtility.Cli -- unlock_achievement 440 ACH_ID\ndotnet run --project src/SteamUtility.Cli -- lock_achievement 440 ACH_ID\ndotnet run --project src/SteamUtility.Cli -- toggle_achievement 440 ACH_ID\ndotnet run --project src/SteamUtility.Cli -- unlock_all_achievements 440\ndotnet run --project src/SteamUtility.Cli -- lock_all_achievements 440\ndotnet run --project src/SteamUtility.Cli -- update_stats 440 \"[{\\\"name\\\":\\\"STAT\\\",\\\"value\\\":100}]\"\ndotnet run --project src/SteamUtility.Cli -- reset_all_stats 440\n```\n\n## Command reference\n\n### Discovery and reporting\n\n| Command | Description | Live Steam required |\n| --- | --- | --- |\n| `detect` | Detect the local Steam installation path | No |\n| `libraries` | List discovered Steam library folders | No |\n| `apps` | List installed Steam apps from app manifests | No |\n| `compatdata` | List per-app compatdata directories | No |\n| `compat-tools` | List bundled and custom compatibility tools | No |\n| `compat-mapping` | List explicit compatibility-tool mappings from `config.vdf` | No |\n| `compat-report` | Merge apps, compatdata, and config mappings into one report | No |\n| `state-report` | Summarize Steam library, compat, and user state files | No |\n\n### Steam-native / upstream-parity commands\n\n| Command | Description | Live Steam required |\n| --- | --- | --- |\n| `check_ownership` | Query owned apps through the native Steam client and write `games.json` | Yes |\n| `idle` | Keep an app session active | Yes |\n| `get_achievement_data` | Read and cache achievement/stat data for an app | Yes |\n| `unlock_achievement` | Unlock one achievement | Yes |\n| `lock_achievement` | Lock one achievement | Yes |\n| `toggle_achievement` | Toggle one achievement | Yes |\n| `unlock_all_achievements` | Unlock all achievements for an app | Yes |\n| `lock_all_achievements` | Lock all achievements for an app | Yes |\n| `update_stats` | Update stat values from a JSON payload | Yes |\n| `reset_all_stats` | Reset all stats for an app | Yes |\n\n## Global options\n\n- `--json` — emit JSON output instead of text\n- `--diagnostics` — emit additional diagnostic logging to stderr\n- `--app-id \u003cid\u003e` — filter by a specific AppID where applicable\n- `--match \u003ctext\u003e` — case-insensitive text filter where applicable\n- `--help` / `-h` — show command help\n\n## Command aliases\n\nThe CLI accepts underscore and hyphen variants for selected commands:\n- `check_ownership` / `check-ownership`\n- `get_achievement_data` / `get-achievement-data`\n- `unlock_achievement` / `unlock-achievement`\n- `lock_achievement` / `lock-achievement`\n- `toggle_achievement` / `toggle-achievement`\n- `unlock_all_achievements` / `unlock-all-achievements`\n- `lock_all_achievements` / `lock-all-achievements`\n- `update_stats` / `update-stats`\n- `reset_all_stats` / `reset-all-stats`\n\n## JSON output contracts\n\nThe project currently has two JSON-output categories:\n\n### Versioned report outputs\nThese are the structured discovery/report commands. Their output shape is treated as a versioned contract (currently schema version 1):\n- `apps`\n- `libraries`\n- `compatdata`\n- `compat-tools`\n- `compat-mapping`\n- `compat-report`\n- `state-report`\n\n### Compatibility-first legacy outputs\nThese commands intentionally preserve legacy/upstream-oriented payload behavior and should not yet be treated as stable versioned report contracts:\n- `check_ownership`\n- `idle`\n- `get_achievement_data`\n- achievement/stat mutation commands\n\nMore detail lives in [docs/JSON_OUTPUTS.md](docs/JSON_OUTPUTS.md).\n\n## Repository structure\n\n- `src/SteamUtility.Core` — core models, scanners, parsers, platform services, and native interop\n- `src/SteamUtility.Cli` — CLI entrypoint and command dispatch\n- `tests/SteamUtility.Tests` — custom automated test runner and regression coverage\n- `docs/` — deeper documentation for release, parity, platform behavior, and JSON outputs\n- `TODO.md` — live project checklist and known remaining work\n\n## Documentation index\n\n- [docs/LIBRARY_DISCOVERY.md](docs/LIBRARY_DISCOVERY.md)\n- [docs/PROTON_AND_COMPATDATA.md](docs/PROTON_AND_COMPATDATA.md)\n- [docs/WINDOWS_DEPENDENCIES.md](docs/WINDOWS_DEPENDENCIES.md)\n- [docs/CLI_PARITY_MATRIX.md](docs/CLI_PARITY_MATRIX.md)\n- [docs/LINUX_REAL_STEAM_VALIDATION.md](docs/LINUX_REAL_STEAM_VALIDATION.md)\n- [docs/PORTING_PLAN.md](docs/PORTING_PLAN.md)\n- [docs/JSON_OUTPUTS.md](docs/JSON_OUTPUTS.md)\n- [docs/RELEASE.md](docs/RELEASE.md)\n- [CHANGELOG.md](CHANGELOG.md)\n- [REPORT_REAL_VALIDATION_TEST_LINUX.md](REPORT_REAL_VALIDATION_TEST_LINUX.md)\n\n## Known limitations\n\n- Linux is the most thoroughly validated platform today.\n- Windows support exists in code and release artifacts, but dedicated validation for some Windows-specific locator/loader paths is still pending.\n- Proton/compatdata-oriented commands are primarily meaningful on Linux/Proton environments and may legitimately return little or no data on Windows.\n- Steam-native commands depend on the target app exposing the necessary Steamworks data and on a valid local Steam session.\n- macOS is not currently supported.\n\n## Relationship to the upstream project\n\nThis repository is based on the original [`zevnda/steam-utility`](https://github.com/zevnda/steam-utility) and aims to preserve the upstream command surface while adding a modern .NET \u003e=8, cross-platform architecture for Linux and Windows.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbernardopg%2Fsteam-utility-multiplataform","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbernardopg%2Fsteam-utility-multiplataform","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbernardopg%2Fsteam-utility-multiplataform/lists"}