Appearance
Shipping your app
How to package a finished app for users, by host language. Sizes are for Linux x86-64.
| Host | Ship as | Size |
|---|---|---|
| Bun / TypeScript | one self-contained executable | ~32 MB |
| Python | a wheel depending on godot-ui-sdk | wheel + ~21 MB SDK dependency |
| Compiled (C/Rust/Zig/...) | one statically linked binary | ~22 MB |
| Any | your app + the guido tarball | app + ~8 MB compressed runtime |
Bun: single executable
bash
cd demo-apps
bun run bundle:inprocThe bundler compiles your app with bun build --compile, embeds the runtime (compressed to about 6 MB), and wraps the output in a self-extracting stub. The resulting file is ~32 MB; without the stub it would be ~96 MB, most of which is Bun's own runtime. First launch extracts once to the user's cache directory; subsequent launches start in about one second, the same as an uncompressed binary. --pack=none skips the stub and keeps the raw executable.
Python: a wheel
Declare a dependency on godot-ui-sdk; the runtime is inside that wheel. pip install yourapp is the complete install procedure.
For a single-file build with PyInstaller or similar, include the SDK's _runtime/libguido.so as a data file. The SDK's path resolution finds it.
Compiled languages: static or side-by-side
Static linking produces one self-contained ~22 MB executable with no extraction step:
make
cc -O2 -DGUIDO_STATIC -I~/.local/include -o app main.c libguido.a \
-static-libgcc -static-libstdc++ -lstdc++ -lm -lpthread -ldl \
-Wl,--gc-sections -sThe static archive (libguido.a) is distributed separately from the tarball because of its size; download it from a release or build it once (see Building from source).
Alternatively, ship libguido.so next to your executable and dlopen it by a path relative to the executable. This adds ~21 MB uncompressed (~8 MB in a compressed download) and requires no special build steps.
Any language: bundle the tarball
The release tarball (guido-<version>-linux-x86_64.tar.gz) contains the runtime, C header, themes, the packing tool, and an install.sh that copies into ~/.local (or PREFIX=/usr/local). It is plain files under one directory, suitable for wrapping in a .deb, Flatpak, AppImage or your own installer.
Programs then locate the runtime the same way the SDKs do: guido on PATH, or the GUIDO_BIN/GUIDO_LIB environment variables.
Scene packs
If your UI uses editor-designed scenes, export them as a .pck and ship the file with the app, mounting it at launch with --bridge-pack /abs/path/app.pck. See Custom scenes & assets.
Runtime size
The 21 MB breaks down as roughly 14 MB engine code (widget toolkit, layout, GL renderer, resource loading), 4 MB ICU + HarfBuzz for correct text rendering across scripts (Arabic shaping, CJK, bidirectional text), and the remainder static data. The runtime's only hard dependencies are libc and libm; graphics libraries are loaded lazily, so the same binary runs headless on servers with --headless.