{"id":13305744,"url":"https://github.com/icculus/steamshim","last_synced_at":"2025-04-13T19:09:28.991Z","repository":{"id":63012255,"uuid":"381145205","full_name":"icculus/steamshim","owner":"icculus","description":"A workaround for GPL software that wants to use the Steamworks SDK.","archived":false,"fork":false,"pushed_at":"2021-07-06T00:30:08.000Z","size":23,"stargazers_count":76,"open_issues_count":1,"forks_count":13,"subscribers_count":6,"default_branch":"main","last_synced_at":"2025-02-05T23:35:31.855Z","etag":null,"topics":["gpl","steamworks"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"zlib","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/icculus.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-06-28T19:49:13.000Z","updated_at":"2025-01-26T12:14:00.000Z","dependencies_parsed_at":"2022-11-10T22:46:08.539Z","dependency_job_id":null,"html_url":"https://github.com/icculus/steamshim","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/icculus%2Fsteamshim","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/icculus%2Fsteamshim/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/icculus%2Fsteamshim/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/icculus%2Fsteamshim/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/icculus","download_url":"https://codeload.github.com/icculus/steamshim/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240113752,"owners_count":19749828,"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":["gpl","steamworks"],"created_at":"2024-07-29T17:54:34.426Z","updated_at":"2025-02-23T22:33:31.669Z","avatar_url":"https://github.com/icculus.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# steamshim\n\n## What is this?\n\nThis is a small piece of code, written in C++, that acts as a bridge between\na child process and the Steamworks SDK. The child process links against a\nsmall piece of code, written in C, to facilitate communication with the\nbridge.\n\n\n## What would I ever need this for?\n\nYou have a GPL-licensed game and can't link directly against the Steamworks\nSDK. The child process links against the simple, open source C code, which\ntalks to the open source C++ code via a pipe, which talks to Steamworks. You\ncan now add Steam achievements to your game without violating the GPL.\n\n\n## How does it work?\n\n- You get a copy of the Steamworks SDK, and link steamshim_parent.cpp against\n  it. You ship that program and the steam_api.dll (or whatever) with your game.\n- The parent process (the C++ code) gets launched as if it were your game. It\n  initializes Steamworks, creates some pipes and launches your actual game, then\n  waits on your game to talk to it over those pipes.\n- Your game links against steamshim_child.c and at some point \n  `#include \"steamshim_child.h\"` to use this functionality.\n- Your game calls `STEAMSHIM_init()` at startup to prepare the system. It can\n  then make other `STEAMSHIM_*()` calls to interact with the parent process and\n  Steamworks.\n- Your game, once a frame, calls `STEAMSHIM_pump()` until it returns NULL. Each\n  time it doesn't return NULL is a new message (event) from the parent process.\n  Often times, this is results from a command you asked the parent process to\n  do earlier, or some other out-of-band event from Steamworks.\n- Your game, when shutting down normally, calls `STEAMSHIM_deinit()`, so the\n  parent process knows you're going away. It says goodbye, shuts down the pipe,\n  waits for your game to terminate, and then terminates itself.\n\n\n## Is this all of Steamworks?\n\n- No! It's actually just enough to deal with stats and achievements right now,\n  but it can definitely be extended to offer more things. Take a look at\n\n\n## How do I get the Steamworks SDK?\n\n- Go to https://partner.steamgames.com/ and login with your Steam account. You\n  can agree to some terms and then download the SDK.\n\n\n## Is there an example?\n\n- That would be testapp.c. This example expects you to own Postal 1 on Steam and\n  will RESET ALL YOUR ACHIEVEMENTS, so be careful running it. But hey, if you\n  lose your work, it's a good exercise in SteamShim usage to put them back\n  again.  :)\n\n\n## I have other questions!\n\nAsk me. File [a GitHub issue](https://github.com/icculus/steamshim/issues)\nor just email me directly: icculus@icculus.org\n\n--ryan.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ficculus%2Fsteamshim","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ficculus%2Fsteamshim","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ficculus%2Fsteamshim/lists"}