Skip to content
SDK powering - a modding API for game developers
C++ C Python Shell CMake M4 Other
Branch: devel
Clone or download
Pull request Compare This branch is 14 commits ahead of modio:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
.github/workflows Convert the wiki with mdBook Dec 5, 2019
additional_dependencies/curl Replace zlib with miniz to reduce dependencies May 27, 2019
book Convert the wiki with mdBook Dec 5, 2019
examples fixed some asc/desc sorting attributes Oct 30, 2019
ext added ue4 preprocessor flag Dec 28, 2018
include added minimum poll intervals Dec 12, 2019
lib now using dynamic ssl Sep 17, 2019
src added minimum poll intervals Dec 12, 2019
test fixed tests includes Nov 22, 2019
.gitignore Convert the wiki with mdBook Dec 5, 2019
CMakeLists.txt Merge branch 'master' into devel Oct 15, 2019
LICENSE Update LICENSE Feb 6, 2019 Badge for CI workflow Nov 27, 2019
appveyor.yml removed old appveyor run unit test executables Mar 22, 2019
appveyor_build_config.bat Replace mode=static with CMake's BUILD_SHARED_LIBS flag Aug 1, 2019 SDK

License Discord Master docs Travis GitHub Action

Welcome to the SDK repository, built using C and C++. It allows game developers to host and automatically install user-created mods in their games. It connects to the API, and documentation for its functions can be viewed here.


Feature Supported
Windows / Linux / MacOS
Open Source
Async Callbacks
Prebuilt download and upload queue
Automatic downloads and updates
Email / Steam / GOG authentication
Browse / search / tag mods
Mod dependencies / comments / stats
Multilanguage C interface
MIT license


Browse mods

modio::FilterCreator filter_creator;
filter_creator.setLimit(5); // limit the number of results
filter_creator.setOffset(0); // paginate through the results by using a limit and offset together
filter_creator.setSort("date_updated", false); // the filtering system allows flexible queries

modio_instance.getAllMods(filter_creator, [&](const modio::Response& response, const std::vector<modio::Mod> & mods)
  if(response.code == 200)
    // Mod data retrieved!

Auth (via email)

Authentication enables automatic installs and updates under the hood.

First step is to request a security code to your email.

modio_instance.emailRequest("", [&](const modio::Response& response)
  if (response.code == 200)
    // Authentication code successfully sent to the e-mail

Finish authentication by submitting the 5-digit code.

modio_instance.emailExchange("50AD4", [&](const modio::Response& response)
  if (response.code == 200)
    // Email exchanged successfully, you are now authenticated

External Auth

If your game is running inside a popular distribution platform such as Steam or GOG Galaxy you can authenticate 100% seamlessly.

Galaxy Auth

modio_instance.galaxyAuth(appdata, [&](const modio::Response &response)
  if (response.code == 200)
    // Successful Galaxy authentication

Oculus Auth

modio_instance.oculusAuth(nonce, oculus_user_id, access_token, email, date_expires, [&](const modio::Response &response)
  if (response.code == 200)
    // Successful Oculus authentication

Steam Auth

modio_instance.steamAuth(rgubTicket, cubTicket, [&](const modio::Response &response)
  if (response.code == 200)
    // Successful Steam authentication


Download mods automatically by subscribing, uninstall them by unsubscribing.


modio_instance.subscribeToMod(mod_id, [&](const modio::Response& response, const modio::Mod& mod)
  if(response.code == 201)
    // Subscribed to mod successfully, the mod will be added automatically to the download queue


modio_instance.unsubscribeFromMod(mod_id, [&](const modio::Response& response)
  if(response.code == 204)
    // Unsubscribed from mod successfully, it will be uninstalled from local storage

Mod ratings

modio_instance.addModRating(mod_id, 1 /*or -1 for negative rating*/, [&](const modio::Response& response)
  if(response.code == 201)
    // Mod rating submitted successfully

Mod submission

Share mods by creating a mod profile and attaching modfiles to it.

Create a mod profile

modio::ModCreator mod_creator;
mod_creator.setName("Graphics Overhaul Mod");
mod_creator.setSummary("Short descriptive summary here.");

modio_instance.addMod(mod_creator, [&](const modio::Response& response, const modio::Mod& mod)
  if(response.code == 201)
    // Mod profile successfully added

Upload a modfile

modio::ModfileCreator modfile_creator;
modfile_creator.setModfileChangelog("<p>Rogue Knights v1.2.0 Changelog</p></p>New Featu...");

modio_instance.addModfile(, modfile_creator);


Download listener

modio_instance.setDownloadListener([&](u32 response_code, u32 mod_id) {
  if (response_code == 200)
    // Mod successfully downloaded. Call the modio_instance.installDownloadedMods(); to install, keep in mind this is not an async function.

Upload listener

modio_instance.setUploadListener([&](u32 response_code, u32 mod_id) {
  if (response_code == 201)
    //Mod successfully uploaded

Feature rich integration

Visit the wiki to learn how to integrate dependencies, comments, stats, reports and more.

Getting started

If you are a game developer, first step is to add mod support to your game. Once mod support is up and running, create your games profile on, to get an API key and access to all functionality offers. Next, download the latest SDK release and unpack it into your project, then head over to the GitHub Wiki and follow the guides corresponding to your setup.

#include "modio.h"

// ...

modio::Instance modio_instance(MODIO_ENVIRONMENT_TEST, MY_GAME_ID, "MY API KEY");

// ...

void myGameTick()

Contributions Welcome

Our SDK is public and open source. Game developers are welcome to utilize it directly, to add support for mods in their games, or fork it to create plugins and wrappers for other engines and codebases. Many of these contributions are shared here. Want to make changes to our SDK? Submit a pull request with your recommended changes to be reviewed.

Wrappers SDK wrappers are available for the following languages and engines:

Are you creating a wrapper? Let us know!

Building instructions

Learn how to build SDK in our building instruction guide.

Code contributions

  1. Fork it
  2. Add new features
git checkout -b my-new-feature
git commit -am 'Add some feature'
git push origin my-new-feature
  1. Create a pull request

Reporting a bug

If you're unable to find an open issue addressing the problem, open a new one. Be sure to include a title and clear description, as much relevant information as possible, and a code sample or an executable test case demonstrating the expected behavior that is not occurring.

Other Repositories

Our aim with, is to provide an open modding API. You are welcome to view, fork and contribute to our other codebases in use:

You can’t perform that action at this time.