Repository Structure
A tour of the TuxBlox repository, for anyone about to change something in it.
Two halves, two licenses
This is the most important thing to understand before touching anything.
| Part | License |
|---|---|
Everything outside compat/ |
GPLv3 |
compat/ |
LGPLv2.1, inherited from Wine and Proton |
compat/tuxblox/ and compat/webkitgtk/bundle/ |
GPLv3, TuxBlox's own code inside the layer |
third_party_licenses/ |
Whatever each bundled project uses. Do not modify. |
The two halves are separate compiled programs that talk to each other while running, not one program linked from both. That separation is exactly what lets the project carry two licenses cleanly, so keep it intact in any change you make.
Top level folders
| Folder | What is in it |
|---|---|
launcher/ |
Source for TuxBloxLauncher, the window you use |
installer/ |
Source for TuxBloxInstaller |
compat/ |
The compatibility layer |
bootstrapper/ |
Source for TuxBloxBootstrapper, which downloads Roblox itself |
studio-mcp/ |
Source for studio-mcp, the Studio MCP helper |
docs/ |
This documentation |
third_party_licenses/ |
License texts for everything bundled |
Top level files
| File | What it is |
|---|---|
build.sh |
Builds the installer, launcher and compatibility layer, then packages the result |
VERSION |
The version and channel. One file, read by all three components. |
Containerfile |
The container builds run inside, so they are the same on every machine |
CONTRIBUTING.md |
How to contribute |
SECURITY.md |
How to report a security issue |
LICENSE |
The GPLv3 text |
Inside compat/
The compatibility layer is by far the largest part of the repository.
compat/wine/ |
TuxBlox's Wine fork. Checked in directly and maintained here, not a submodule. |
compat/submodules/ |
Around two dozen dependencies, including DXVK and vkd3d |
compat/tuxblox/ |
TuxBlox's own C++ code for the layer, including the entry point |
compat/webkitgtk/bundle/ |
TuxBlox's own browser component, used for Studio's login screen and Toolbox |
compat/patches/ |
Changes TuxBlox applies to submodule sources |
compat/make/ |
The build rules |
How patches work
TuxBlox does not commit changes into the dependency submodules. Instead, a change lives in compat/patches/<package>/<path>, and the build copies it over its own copy of the source.
The submodules stay clean, which means updating one does not fight with local edits, and nothing has to be committed inside a submodule.
The one exception is compat/wine/, which is a fork TuxBlox maintains, so it is edited in place like any other source.
Build output
build/ holds everything a build produces and is not tracked in git.
build/
├── compat/ the compatibility layer, entry point is main
├── libtuxblox/ libraries the launcher's interface needs
├── runtime/ the virtual drive
├── TuxBloxLauncher
├── TuxBloxInstaller
├── TuxBloxBootstrapper
├── studio-mcp
└── .artifacts/ intermediate build files
That layout deliberately matches what ends up in ~/.tuxblox, so what you test is shaped like what ships.
Where to put a change
| You want to change | Go to |
|---|---|
| Something in the launcher window | launcher/src/ui_qt/ |
| How a setting behaves | launcher/src/settings.cpp |
| The install or update flow | installer/src/ |
| How Roblox is started | compat/tuxblox/src/launch/ |
| How the virtual drive is built | compat/tuxblox/src/prefix/ |
| Windows behaviour Roblox depends on | compat/wine/ |
| Studio's login screen or Toolbox | compat/webkitgtk/bundle/ |
| A dependency such as DXVK | compat/patches/<package>/ |
Before you write code
Read Contributing. It covers code style, the copyright header every TuxBlox source file needs, and what kinds of contribution are and are not accepted.