Retro BASIC programming, native on Linux with Vulkan.
A separate Linux edition of BambooBasic — not a compatibility layer, not Wine. The same language and the same IDE, rebuilt on Vulkan, SDL2 and wxWidgets. Your program transpiles to C++ and compiles with g++ into a native 64-bit ELF binary. 2D graphics, audio, shaders, palette cycling, networking and a working debugger.
Please check this before downloading. It is the single most common problem.
This build needs glibc 2.38 or newer and a
libstdc++ from GCC 13 or newer. That is not a package you can
install — it is the age of the distribution itself. If yours is older, the
program will refuse to start with a message like
version `GLIBC_2.38' not found.
That is not a corrupt download and not a bug.
| Distribution | glibc | Will it run? |
|---|---|---|
| Ubuntu 24.04 LTS and newer | 2.39 | Yes |
| Ubuntu 22.04 LTS | 2.35 | No — too old |
| Debian 13 (trixie) | 2.41 | Yes |
| Debian 12 (bookworm) | 2.36 | No — too old |
| Fedora 39 and newer | 2.38 | Yes |
| Arch, CachyOS, Manjaro, EndeavourOS | current | Yes |
| RHEL / Rocky / Alma 9 | 2.34 | No — too old |
Not sure? The package ships a script that answers it for you, and tells you plainly which of the two problems you have — a missing package, or a distribution that is simply too old:
SDL2, the Vulkan loader, and an actual Vulkan driver. The loader is not a driver — with the loader installed but no driver you get "no Vulkan device", which looks like a broken program but is a missing package. The script above checks for all three separately and installs only what is missing. It understands apt, dnf, pacman and zypper, and never installs a compiler.
Ubuntu 26.04 LTS and CachyOS (from the 2026-08-09 desktop ISO), both on real hardware with NVIDIA GPUs rather than only in a virtual machine. Other distributions are expected to work but are not tested — Debian and Arch derivatives are the most likely to be fine since they share those package sets. Fedora and openSUSE are the least: the package lists exist but have never actually been run on either.
Two builds, same contents. Pick the one for your distribution — extract it and run it, there is no installer.
Both archives hold the same transpiler, runtime, documentation and
examples. Only the IDE differs, because it links wxWidgets
3.2 — and wx 3.2 is not ABI-stable across the point releases
that different distributions ship, so the IDE from the wrong build
cannot start. If ./BambooBasic
exits immediately with
has different size in shared object,
you have the wrong one — take the other and nothing else needs changing.
Debian • Ubuntu • Mint • Pop!_OS
Version 1.2Lc • 29 MB
x86-64 • glibc 2.38+ • Vulkan
By downloading, you agree to the End User
License Agreement HERE
Arch • CachyOS • EndeavourOS • Manjaro
Version 1.2Lc • 21 MB
x86-64 • glibc 2.38+ • Vulkan
By downloading, you agree to the End User
License Agreement HERE
SHA-256 checksums for both archives: SHA256SUMS.txt
Three steps. None of them need root except the dependency install.
Substitute -arch for
-debian if that is the build you took.
No installer, and nothing is written outside the folder. Delete the folder
to uninstall.
Checks first and only installs what is actually missing, so it is safe to run on a machine that is already set up. This one does install g++, because BambooBasic transpiles your program to C++ and then compiles it — see the note below.
Then open something from examples/, or a
whole game from games/Anti-Tetrafied/.
Press Build and Run.
Want it in your applications menu with an icon?
./scripts/install-desktop.sh — per-user, no
root, and --uninstall reverses it. On
Wayland this is not just cosmetic: the compositor ignores the icon an
application sets for itself and takes it from an installed
.desktop file instead, so without it the
IDE has no icon at all.
Every one of these is in the documentation. Every one of these still gets asked. Two minutes here will save you an evening.
Each dimension gets its own brackets. Commas are not it.
✗ Local grid:Int[10,10]
✓ Local grid:Int[10][10]
Not +. This one matters because + on strings does
not fail to build — it quietly does pointer arithmetic and prints
garbage.
✗ Print "Score: " + score
✓ Print "Score: " & score
BBRuntimeLinux.so is loaded at run time from the program's own
folder. Move the executable somewhere on its own and it will not start.
When you share a game, ship the .so next to it.
The IDE finds config/, bin/ and
userlibs/ relative to its own location. Copying just the
BambooBasic binary somewhere else will not work.
BambooBasic is a transpiler. Your program becomes C++ and is then compiled into a native binary, so a C++ compiler is required on the machine you are writing on. People playing your finished game do not need one.
Inside a string, ~q is a quote character — not
\". And {} is interpolation syntax:
{$name}, {%count}, {!ratio}.
Not radians. If your animation looks completely frozen, this is usually
why — a step of 0.05 per frame is a rounding error in degrees.
A Const inside a function does not produce a helpful error —
it produces a confusing one from the C++ compiler. Put them at the top of
the file.
A program using UseConsole is launched in a terminal window by
the IDE. If you run the built binary by double-clicking it from a file
manager instead, it has no terminal and input will appear to do nothing.
This is a 2D edition. Please read the right-hand column before asking where something is.
.so at run timeb3d
prefix. This is a future extension, not an oversight.A 2D program usually moves across in minutes. A full 1,500-line game with images, audio, fonts and three shaders took three changes.
Import "BBRuntime64.decls" becomes
Import "BBRuntimeLinux.decls".
Vulkan consumes SPIR-V, so shaders are GLSL here, not HLSL.
Shader files are not portable between the editions even though the
shader API is identical. The documentation includes an HLSL → GLSL
translation table. Two things catch people out: use
gl_FragCoord where a Windows shader used
input.position, and
tint where it used
input.color.
sysQuitRequested() is Linux-only — there is no
Windows equivalent. Windows terminates the process from inside the event pump;
this edition lets your program exit gracefully, so code after your main loop
actually runs. Poll it in your loop. A program written against the Linux
runtime will need this removing before it builds on Windows.
In a fullscreen mode where your requested resolution does not match the screen,
Windows stretches and Linux letterboxes. Both fill the screen
when the aspect ratios agree; when they do not, Windows distorts and Linux adds
black bars and preserves your aspect ratio. Ask a monitor for its own
resolution with sysGetMonitorWidth /
Height and open fullscreen at exactly that for
a pixel-perfect 1:1 surface.
It ships with the package. It is genuinely complete.
docs/index.html from the folder you extractedEvery one of the 356 runtime functions has its own reference page, with the signature, what it returns, and the things that are easy to get wrong. The documentation was rebuilt for this edition rather than copied — the function list is generated from what the runtime actually exports, so it can never list something that is not there.
There are also 59 working examples in
examples/ covering every part of the language
and runtime, and a complete playable game with full source in
games/. If you are stuck on how something fits
together, there is almost certainly an example of it.
Copy your executable, BBRuntimeLinux.so
beside it, your assets, and
scripts/deps-runtime.sh so the player can
check their own system. Your player needs no compiler and no BambooBasic
install. See scripts/README.md for the details,
including which distributions your build will reach.
Please check the documentation and the examples first — but if it is genuinely broken, do say so.
When reporting a Linux problem, please include your distribution and version, and
the output of ./scripts/deps-runtime.sh. It answers
most of the first questions before they get asked.