This documentation is still a work in progress. Please ask in one of the community channels if you run into issues or find a mistake.

Overview

Crankshaft is a plugin manager and framework for the Steam client. Most of the Steam client is using web technologies, running inside Chromium (specifically Chromium Embedded Framework). By enabling Chromium’s debugging protocol, we can inject arbitrary scripts into the Steam client, allowing us to load plugins.

There are three main parts to Crankshaft.

Client-side scripts 🔗

Crankshaft injects it’s own scripts into the Steam client, before injecting plugins. These client-side scripts provide plugins with APIs to perform a variety of functions.

Patcher 🔗

Before injecting any code, Crankshaft makes some patches to the Steam client code. These are made sparingly, and add a few events to help with plugin loading.

Daemon 🔗

Finally, there’s a daemon that runs in the background. This is the program that handles patching Steam, and injecting scripts and plugins.

This daemon also helps provide an API to plugins for functionality like making network requests, filesystem access, and running commands on the host system. Plugins are running inside of a web browser, which means they have limited capabilities. A program running on the host is required to fill those gaps in available functionality.