{"id":15762391,"url":"https://github.com/williamvenner/steamlocate-rs","last_synced_at":"2025-04-04T18:05:33.920Z","repository":{"id":38246710,"uuid":"340755606","full_name":"WilliamVenner/steamlocate-rs","owner":"WilliamVenner","description":"🎮 Rust Crate for locating Steam game installation directories (and Steam itself!)","archived":false,"fork":false,"pushed_at":"2025-03-06T06:15:20.000Z","size":161,"stargazers_count":44,"open_issues_count":3,"forks_count":16,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-03-28T17:06:55.997Z","etag":null,"topics":["acf","acf-format","appmanifest","cargo","crate","game","games","library","module","rust","steam","steamapp","steamapps","vdf","vdf-format"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/WilliamVenner.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","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}},"created_at":"2021-02-20T21:19:16.000Z","updated_at":"2025-03-06T06:15:24.000Z","dependencies_parsed_at":"2024-08-04T08:08:21.841Z","dependency_job_id":"52202f40-b88d-41d2-8b95-1a098ca9269c","html_url":"https://github.com/WilliamVenner/steamlocate-rs","commit_stats":{"total_commits":63,"total_committers":5,"mean_commits":12.6,"dds":0.5714285714285714,"last_synced_commit":"3ab10d414177daddd74878ee376caa574a84b762"},"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WilliamVenner%2Fsteamlocate-rs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WilliamVenner%2Fsteamlocate-rs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WilliamVenner%2Fsteamlocate-rs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WilliamVenner%2Fsteamlocate-rs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/WilliamVenner","download_url":"https://codeload.github.com/WilliamVenner/steamlocate-rs/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247226213,"owners_count":20904465,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["acf","acf-format","appmanifest","cargo","crate","game","games","library","module","rust","steam","steamapp","steamapps","vdf","vdf-format"],"created_at":"2024-10-04T11:09:00.386Z","updated_at":"2025-04-04T18:05:33.895Z","avatar_url":"https://github.com/WilliamVenner.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![crates.io](https://img.shields.io/crates/v/steamlocate.svg)](https://crates.io/crates/steamlocate)\n[![docs.rs](https://docs.rs/steamlocate/badge.svg)](https://docs.rs/steamlocate/)\n[![license](https://img.shields.io/crates/l/steamlocate)](https://github.com/WilliamVenner/steamlocate/blob/master/LICENSE)\n[![Workflow Status](https://github.com/WilliamVenner/steamlocate-rs/workflows/ci/badge.svg)](https://github.com/WilliamVenner/steamlocate-rs/actions?query=workflow%3A%22ci%22)\n\n# steamlocate\n\nA crate which efficiently locates any Steam application on the filesystem,\nand/or the Steam installation itself.\n\nThis crate is best used when you do not want to depend on the Steamworks API\nfor your program. In some cases the Steamworks API may be more appropriate to\nuse, in which case I recommend the fantastic\n[steamworks](https://github.com/Thinkofname/steamworks-rs) crate. You don't\nneed to be a Steamworks partner to get installation directory locations from\nthe Steamworks API.\n\n# Using steamlocate\n\nSimply add `steamlocate` using\n[`cargo`](https://doc.rust-lang.org/cargo/getting-started/installation.html).\n\n```console\n$ cargo add steamlocate\n```\n\n# Examples\n\n## Locate the Steam installation and a specific game\n\nThe `SteamDir` is going to be your entrypoint into _most_ parts of the API.\nAfter you locate it you can access related information.\n\n```rust,ignore\nlet steam_dir = steamlocate::SteamDir::locate()?;\nprintln!(\"Steam installation - {}\", steam_dir.path().display());\n// ^^ prints something like `Steam installation - C:\\Program Files (x86)\\Steam`\n\nconst GMOD_APP_ID: u32 = 4_000;\nlet (garrys_mod, _lib) = steam_dir\n    .find_app(GMOD_APP_ID)?\n    .expect(\"Of course we have G Mod\");\nassert_eq!(garrys_mod.name.as_ref().unwrap(), \"Garry's Mod\");\nprintln!(\"{garrys_mod:#?}\");\n// ^^ prints something like vv\n```\n```rust,ignore\nApp {\n    app_id: 4_000,\n    install_dir: \"GarrysMod\",\n    name: Some(\"Garry's Mod\"),\n    universe: Some(Public),\n    // much much more data\n}\n```\n\n## Get an overview of all libraries and apps on the system\n\nYou can iterate over all of Steam's libraries from the steam dir. Then from each library you\ncan iterate over all of its apps.\n\n```rust,ignore\nlet steam_dir = steamlocate::SteamDir::locate()?;\n\nfor library in steam_dir.libraries()? {\n    let library = library?;\n    println!(\"Library - {}\", library.path().display());\n\n    for app in library.apps() {\n        let app = app?;\n        println!(\"    App {} - {:?}\", app.app_id, app.name);\n    }\n}\n```\n\nOn my laptop this prints\n\n```text\nLibrary - /home/wintermute/.local/share/Steam\n    App 1628350 - Steam Linux Runtime 3.0 (sniper)\n    App 1493710 - Proton Experimental\n    App 4000 - Garry's Mod\nLibrary - /home/wintermute/temp steam lib\n    App 391540 - Undertale\n    App 1714040 - Super Auto Pets\n    App 2348590 - Proton 8.0\n```\n\n## Contribution\n\nUnless you explicitly state otherwise, any contribution intentionally\nsubmitted for inclusion in the work by you, as defined in the MIT license,\nshall be licensed as above, without any additional terms or conditions.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwilliamvenner%2Fsteamlocate-rs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwilliamvenner%2Fsteamlocate-rs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwilliamvenner%2Fsteamlocate-rs/lists"}