Launcher

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
  • Configurable from Xsolla Publisher Account
  • News and banner management
  • In-game friends list and group chat
  • 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.

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 the Publisher Account.
  5. Open Login settings and customize the widget UI.

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

  • launcher_project_id: Launcher ID from the Publisher Account;
  • login_project_id: Login ID from the Publisher Account;
  • game_local_info: ID of the project you want to be delivered via Launcher, game name and path to the game’s image file.
{
  "launcher_project_id": "bd2e1104-5494-48f9-ac50-98f230062df1",
  "login_project_id": "bd2e1104-5494-48f9-ac50-98f230062df1",
  "game_local_info": [
    {
        "id": 2346,
        "name": "Game 1",
        "icon": "img/MainWindow/GameIcons/div_icon.png"
    }
  ]
}

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.

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.
chat_window Chat window.
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.

Example

"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.

Example

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 “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.

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"
}

Example

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”.

Example

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 minor version to config.json > build_number field. Example: “build_number”: “1”.

Generating an Archive and Installer

The scripts/win/deploy.bat script generates:

  • a Launcher installer that you can send to new users,
  • an archive including the Launcher build used to deliver updates to 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.

Example

deploy.bat --out C:/Target

Note: Upload an archive with the Launcher build to your Publisher Account. We use the archive to automatically deliver Launcher updates to users.

Uploading Game Build

To load a game build to the update server, use the Build Loader command-line utility. It accepts the following arguments:

  • --init — initialize the utility
  • --update — send game build to the server
  • --regions-list — get list of regions for a project
  • --builds-list — get list of game builds
  • --descr <..> — send build description
  • --api-key <..> — send API key
  • --region-code <..> — send region code
  • --region-name <..> — send region name
  • --game-path <..> — send path to the game build

To upload a game build:

  1. Go to Publisher Account > Builds setup.
  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 > Builds setup.
  6. Set up the game files.

Initializing Build Loader

To initialize the utility, you need to pass the previously copied API key, the path to the game build, and the code and name of the region for which the build will be uploaded:

> xbuild_loader.exe --init --api-key <..> --region-code <..> --region-name <..> --game-path <..>

The command creates the specified region on the server. If no region-code, region-name is specified, an empty region will be created.

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 region code and the build path:

> xbuild_loader.exe --update --region-code <..> --game-path <..>

You can omit these parameters if you have already used them 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 Builds setup 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 additional files required to install the game.

Recipes

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

FAQ

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 them? Can I use a CDN not on your list?

Yes, Xsolla has a list of pre-integrated CDN providers (GCore, Akamai, CloudFront, Microsoft Azure CDN, Google Cloud CDN, etc.). You don’t need to contact any of the CDN providers pre-integrated with Xsolla Launcher. Xsolla will connect its Launcher with the CDN provider of your choice, even if that CDN provider is not on the current list of pre-integrated CDN providers.

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 the SDK?

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.