Launcher is a customizable delivery tool for partners who develop video games. The product optimizes content delivery costs while centralizing modules for everything from virtual currency to video streaming. Features:

  • Selling virtual items and physical goods in Store
  • Built-in Login with customizable UI and authentication methods
  • Customizable Launcher UI
  • Runs on Windows
  • UI localized into 20 languages
  • Automatic delivery of Launcher updates to users
  • P2P/CDN game delivery and updates
  • Multigame support
  • Purchasing game via Launcher with automatic key activation
  • Configurable from Xsolla Publisher Account
  • News and banner management
  • Friends from social networks
  • In-game friends list
  • Users can select game region
  • Channeling Partner Bridge: seamless integration of games into pre-integrated game platforms

Note: If you already have any of the Xsolla modules installed and want to integrate Launcher, please contact your Account Manager.

Integration Flow

  1. Register an Xsolla Publisher Account.
  2. Create a project.
  3. Set up Launcher.
  4. Customize Launcher UI.
  5. Generate a Launcher installation file and build archive.
  6. Upload the game build to the Xsolla update server.
  7. Send the Launcher installation file to new users.

Creating a Project

  1. Go to Projects and click Create new project.
  2. In setup mode:
    1. Add Project Name.
    2. Set a link to the game’s Website.

Note: Each project in Publisher Account corresponds to one game.

Setting up Launcher

Proceed to creating a Launcher instance in your Publisher Account and then:

  1. Set Launcher name.
  2. Choose the UI languages.
  3. Pick one of the predefined Login configurations or create your own by sending its name.
  4. Add one or more projects that you have set up in Publisher Account.
  5. Open Login settings and customize the widget UI.

After finalizing Launcher settings in Publisher Account, clone the Launcher from its GitHub repository and specify in config.json:

  • launcher_project_id: Launcher ID from Publisher Account.
  • login_project_id: Login ID from Publisher Account.
  • product_name: Launcher name in the Start menu. Duplicate the name in the scripts/win/Install_scripts/XsollaInstaller.nsi file of the cloned repository in the PRODUCT_NAME parameter.

  "launcher_project_id": "bd2e1104-5494-48f9-ac50-98f230062df1",
  "login_project_id": "bd2e1104-5494-48f9-ac50-98f230062df1",
  "product_name": "Cool Games"

Customizing Launcher UI

To change the images, fonts, and colors, go to the cloned repository. All customization parameters are represented as JSON objects in launcher/win/UIStyle.json. To customize Store in Launcher use config.json.

UIStyle.json Structure

UIStyle.json describes the following objects:

Object Description
main_window Main Launcher window.
launcher_update_window Launcher update window.
settings_screen Settings window.
change_username_window Change username window.
login_window Login Widget window.
login_window: regions_combo_box Select game region component.
steam_login_window Login Widget window for Steam.
error_window Error window for non-critical errors such as wrong username/password.
error_report_window Error window for criticial errors such as cannot load social links.
game_install_window Game installation window with configuration parameters such as installation folder, required disk space, etc.
chars_window Window to select the character before the first launch.
friends_window Friends list window.
connect_social_network_window Window with the list of connected social profiles.
world_loading_window Game world loading window.
social_links_window Window with links to social networks.
game_page Game section. The object can be customized for each game using its project ID. See an example below.
default_game_page Game section. The object is customized for Launcher as a whole.
game_page: change_char Change character window.
news_screen News section.
store_screen Store section.
banner_component Banners section.
highlights_component Video highlights section.
ui_components: combobox Combobox.
ui_components: scrollbar Scrollbar.
ui_components: orange_button Button with orange background.
ui_components: progressbar Progress bar.
ui_components: text_label Text caption.
ui_components: transparent_button Button with transparent background.
ui_components: transparent_textfield Text input field.
ui_components: window_buttons_bar System buttons.
ui_components: placeholder_image Background image to replace the main one, e.g., when loading an element.
ui_components: notification_window Notification window.
ui_components: shadow_window_background_image Background image shadow.
fonts Fonts.

Each object except for fonts has a matching QML file. An object may contain window element styles and/or nested objects.


"error_window": {
  "bg_color": "#313131",
  "text_color": "white",
  "bottom_line_color": "white"
"error_report_window": {
  "bg_color": "#313131",
  "header_text_color": "white",
  "error_text_color": "white",
  "send_error_text_color": "#80FFFFFF",
  "bottom_line_color": "white"
"game_page": [
    "game_id": 4,
    "bg_game_image": "img/Backgrounds/game_screen_bg.jpg",
    "version_text_color": "#7FFFFFFF",
    "social_text_color": "#7FFFFFFF"
    "game_id": 6,
    "bg_game_image": "img/Backgrounds/div_background.jpg",
    "version_text_color": "#7FFFFFFF",
    "social_text_color": "#7FFFFFFF"

Note: The code is self-describing, with object names directly referring to their purpose. For example, version_text_color refers to the color of the text indicating Launcher version.

Replacing Images

You can find Launcher images in the img folder, grouped by Launcher sections — Background, LoginWindow, etc. To add your own image, replace the corresponding file or add a new file to the folder and change the link in UIStyle.json.


To use my_custom_bg_image.jpg as the background of Login Widget:

  1. Place the image in img/LoginWindow.
  2. In UIStyle.json, find the login_window object and change
  3. “bg_image”:“img/LoginWindow/login_background.png” to “bg_image”:“img/LoginWindow/my_custom_image.jpg”.

Note: You can adapt Launcher to 4K screens by adding double-size images with a “@2x” suffix after the file name and before the extension, e.g., login_background@2x.png.

Changing Standard Icon

To open Launcher at a particular game’s page, a user can add a shortcut to the Start menu. The defaultIcon.ico file, located in the img/GamesIcons folder, is used as a shortcut icon by default.

You can change this default icon by one of the following methods:

  • Upload a new image in project settings in Publisher Account.
  • Upload a new file into the img/GamesIcons folder. The file format is {publisher_project_id}.ico, where {publisher_project_id} is your project ID in Publisher Account.

Example: the 12345.ico icon for Launcher to which the project with ID ’12345’ was added.

Replacing Fonts

Launcher uses Lato Regular, Medium, Bold, and Black fonts. The font files are located in the fonts folder.

To replace a font:

  1. Add the new font to the fonts folder.
  2. In UIStyle.json, specify the path to the new font in the following lines:

"fonts": {
    "regular": "fonts/Lato-Regular.ttf",
    "medium": "fonts/Lato-Medium.ttf",
    "bold": "fonts/Lato-Bold.ttf",
    "black": "fonts/Lato-Black.ttf"


To replace Lato-Black.ttf to My_Own_Cool_Font.ttf:

  1. Add My_Own_Cool_Font.ttf to the fonts folder.
  2. In UIStyle.json, indicate the path to My_Own_Cool_Font.ttf as follows:

"fonts": {
        "regular": "fonts/Lato-Regular.ttf",
        "medium": "fonts/Lato-Medium.ttf",
        "bold": "fonts/Lato-Bold.ttf",
        "black": "fonts/My_Own_Cool_Font.fft"

Changing Colors

Launcher UI element colors are grouped in UIStyle.json by windows and components. To change an element’s color, go to the corresponding section and edit the property value.

You can use the following color formats:

  • SVG Color. Example: “white”.
  • #RRGGBB. Example: “#F13900”.
  • #AARRGGBB. Example: “#40FFFFFF”.


To change the setting window background to red:

  1. Open UIStyle.json and find the settings_screen object.
  2. Change bg_color to “bg_color”: “#FF0000”.

Note: After completing the customization, add the Launcher build’s number to config.json > build_number field. Example: “build_number”: “1”.

Customizing Store

To customize an in-game store in Launcher, add an array of store fields into config.json. You can change the value of the fields specified in the table:

Field Description
id Project ID in Publisher Account.
theme Store color theme. Can be ‘default’ and ‘dark’. Default is ‘dark’.
size Element size in Store. Can be ‘small’, ‘medium’, and ‘large’. Default is ‘large’.
view Element location in Store (horizontal or vertical menu). Can be ‘vertical_navigation’ and ‘horizontal_navigation’. Default is ‘horizontal_navigation’.


"store":[ { "id" : 12345, "theme" : "default", "size" : "large", "view" : "horizontal_navigation" } ]

For full Store customization in Launcher, please send your UI Kit or Design Assets to your Account Manager.

Generating an Archive and Installer

The scripts/win/deploy.bat script generates:

  • a Launcher installer that you can send to new users,
  • a Launcher build archive for automatic update delivery to the users.

You can launch deploy.bat by:

  • double-clicking the script file - this will place the build in the cloned project folder > target subfolder;
  • from the command line prompt, using an additional --out {directory} key, where {directory} is your desired build installation path.


deploy.bat --out C:/Target

Notice: The installation file needs to be verified by a digital signature confirmed by the SSH256 certificate. You can get the certificate in any of the following certificate authorities: Thawte, Verisign/Symantec, Comodo and Digicert.
Note: You need to upload the generated archive with the Launcher build to your Publisher Account.

Uploading Game Build

To load a game build to the update server, use the Build Loader command-line utility.

Build Loader system requirements:

  • Windows 7/8/10 64-bit OS
  • 1.6 GHz CPU
  • 100 MB free RAM
  • Free disk space: 1.5 × build size

Build Loader accepts the following arguments:

  • --init — initialize the utility
  • --update — send game build to the server
  • --builds-list — get list of game builds
  • --descr {..} — send build description
  • --api-key {..} — send API key
  • --game-path {..} — send path to the game build

To upload a game build:

  1. Go to Publisher Account > Build settings.
  2. Copy the API key.
  3. Download and install Build Loader.
  4. Initialize the utility.
  5. Upload the game build(s) to the server and choose the stage in Publisher Account > Build settings.
  6. Set up the game files.

Initializing Build Loader

To initialize the utility, you need to pass the previously copied API key and the path to the game build:

> xbuild_loader.exe --init --api-key {..} --game-path {..}

Note: You only need to initialize the utility once, unless you want to change said parameters.

Uploading Game Build to the Server

To upload a game build to the server, indicate the build path:

> xbuild_loader.exe --update --game-path {..}

You can omit this parameter if you have already used it when initializing the utility or uploading the previous build.

During the first upload, the update server receives the whole game build. Afterwards it will receive game patches generated by Build Loader.

Setting up Game Files

To let Launcher send the correct files to users, first set up and initialize the installation files:

  1. In Publisher Account, go to Build settings and then Game file settings.
  2. Enter the name of the file that launches the game.
  3. Specify the game installation path.
  4. Add any redistributable packages necessary to launch the game (for example, Microsoft Visual C++ 2017 Redistributable).

Launcher sends the game the following parameters:

  • --xsolla-locale {locale}: interface language;
  • --xsolla-login-token {token}: Xsolla Login JWT (JSON Web Token);
  • --xsolla-playfab-token {token}: PlayFab token.

Launcher System Requirements

Recommended configuration for optimal Launcher operation:

  • Windows 7/8/10 64-bit OS
  • 1.6 GHz CPU
  • 300 MB free RAM
  • Free disk space: 180 MB
  • Up-to-date DirectX version


Our Recipes will help you try out some of the advanced features of Launcher:


Why would I use Xsolla Launcher when I can create my own?

You don’t want to spend the resources creating your own launcher during the final stage of development or once the game is complete.

How much is Launcher going to cost me?

Launcher is a value-added product, meaning access to Launcher is already included in the standard Xsolla fee. Additional costs may appear if you decide to use CDNs, so CDN costs would be the only potential fees associated with using Launcher. Even if you decide to use CDNs, our goal is to minimize these costs via P2P/CDN balancing technology.

Does the game require Launcher to be running in order to work?

By default, Launcher is always running. When it launches your game, it hides in the system tray so it’s not using up resources. A gamer can shut down Launcher process and the game will still be running as there is no connection during the actual gameplay session.

How does Xsolla Launcher differ from Steam? How is it similar?

Xsolla Launcher acts like a bridge between Steam and a game.

When released on Steam, will everything be downloaded from Launcher? Or will the upload to Steam be the full game + Launcher, and then additional updates fetched from Launcher?

Launcher can do any of the above. You can wrap the latest version of your game into Launcher and then distribute it on Steam, so there are no additional downloads needed (game delivery costs will be on Steam). If you want to quickly deliver an update, you can use Launcher as a fast delivery solution without the need to wrap the game into Launcher, and upload it into Steam again. So it’s up to you.

Do I need to maintain two separate builds for Steam and for a standalone? Or is it the same build that gets uploaded to Steam?

No, you won’t need two separate builds. Moreover, if you have both standalone and Steam methods of delivery, then Xsolla Launcher will serve you well by collecting your users from both platforms into one database. There is a feature that we call “seamless registration”, which allows new users who run the game for the first time in Steam to seamlessly pass the registration process as we don’t ask them anything, but at the same time they can go to your official website outside of Steam ecosystem, log in there using Steam OpenID, and become a part of an official/centralized community (e.g. communicate on the forums, discover new games, read news, etc).

I’m using Steam’s tools, including their launcher, and I have no CDN costs to worry about. Why should I take that risk?

You can use Xsolla Launcher while Steam will be paying for CDN and you can distribute your game wrapped into Launcher through Steam. There is no risk, but plenty of benefit, because via Launcher you can communicate with your active community the way you want as it’s fully customizable. You can also collect a users storage, so you can reach this audience outside of the Steam ecosystem and communicate with your fans there.

Do you have a list of CDNs which are pre-integrated with your Launcher? Do I need to contact the companies that provide CDN for further integration? Can I use a CDN which is not on your list?

Yes, Xsolla has a list of the pre-integrated CDNs: G-Core Labs, Akamai, Amazon CloudFront CDN‎, Microsoft Azure CDN, Google Cloud CDN, etc. You don’t need to contact any companies providing CDNs pre-integrated with Xsolla Launcher. If you want to use a different CDN, please contact your Account Manager.

Why shouldn’t I just use Solid State Networks?

Solid State Network’s main business is CDN, so their launcher solution isn’t designed to optimize CDN expenses.

Is there some kind of IPC solution in Launcher?

There is no IPC for now, as Launcher doesn’t have features that require IPC communication. We will be adding more features in the future, such as live streaming, and the Store in the overlay that will require IPC (via SDK), so we do have plans to add it.