diff --git a/src/social_integration.h b/src/social_integration.h
new file mode 100644
--- /dev/null
+++ b/src/social_integration.h
@@ -0,0 +1,85 @@
+/*
+ * This file is part of OpenTTD.
+ * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
+ * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see .
+ */
+
+/** @file social_integration.h Interface definitions for game to report/respond to social integration. */
+
+#ifndef SOCIAL_INTEGRATION_H
+#define SOCIAL_INTEGRATION_H
+
+class SocialIntegrationPlugin {
+public:
+ enum State {
+ RUNNING, ///< The plugin is successfully loaded and running.
+
+ FAILED, ///< The plugin failed to initialize.
+ PLATFORM_NOT_RUNNING, ///< The plugin failed to initialize because the Social Platform is not running.
+ UNLOADED, ///< The plugin is unloaded upon request.
+ DUPLICATE, ///< Another plugin of the same Social Platform is already loaded.
+ UNSUPPORTED_API, ///< The plugin does not support the current API version.
+ INVALID_SIGNATURE, ///< The signature of the plugin is invalid.
+ };
+
+ std::string basepath; ///< Base path of the plugin.
+
+ std::string social_platform = "unknown"; ///< Social platform this plugin is for.
+ std::string name = ""; ///< Name of the plugin.
+ std::string version = ""; ///< Version of the plugin.
+
+ State state = FAILED; ///< Result of the plugin's init function.
+
+ SocialIntegrationPlugin(const std::string &basepath) : basepath(basepath) {}
+};
+
+class SocialIntegration {
+public:
+ /**
+ * Get the list of loaded social integration plugins.
+ */
+ static std::vector GetPlugins();
+
+ /**
+ * Initialize the social integration system, loading any social integration plugins that are available.
+ */
+ static void Initialize();
+
+ /**
+ * Shutdown the social integration system, and all social integration plugins that are loaded.
+ */
+ static void Shutdown();
+
+ /**
+ * Allow any social integration library to handle their own events.
+ */
+ static void RunCallbacks();
+
+ /**
+ * Event: user entered the main menu.
+ */
+ static void EventEnterMainMenu();
+
+ /**
+ * Event: user entered the Scenario Editor.
+ */
+ static void EventEnterScenarioEditor(uint map_width, uint map_height);
+
+ /**
+ * Event: user entered a singleplayer game.
+ */
+ static void EventEnterSingleplayer(uint map_width, uint map_height);
+
+ /**
+ * Event: user entered a multiplayer game.
+ */
+ static void EventEnterMultiplayer(uint map_width, uint map_height);
+
+ /**
+ * Event: user is joining a multiplayer game.
+ */
+ static void EventJoiningMultiplayer();
+};
+
+#endif /* SOCIAL_INTEGRATION_H */