Free and open source sandbox game with online multiplayer, world editor, PvP, and a physics-based building system you can use to make worlds, contraptions, vehicles and more. Made with Godot 4 using GDScript.
Tinybox is free software licensed under the GNU Affero General Public License v3 (GNU AGPLv3), located in COPYING.txt.
Some assets (textures, audio, music, etc.) are under different licensing. These licenses include, but are not necessarily limited to:
- GNU AGPLv3
- Creative Commons CC0
- Creative Commons CC-BY-SA 4.0
- MIT License
Files with different licenses are denoted in the various licenses.txt files located in the respective data folders, which point to the file's source and their license.
The Godot Engine is under its own license, the details of which are noted at https://godotengine.org/license/.
Like any other Godot project, working on a copy of Tinybox is mostly just a matter of opening it in the Godot editor. Note that active development sometimes happens on the main branch, so pre-release versions of the game may be unstable. The project's current Godot version is linked above.
An additional step you will have to take is linking a Blender 4.4.0+ executable in your Godot Editor settings. I recommend you do this before loading the project to avoid import errors.
Editor > Editor Settings > FileSystem > Import > Blender 3 Path
If done correctly, you should be able to see the .blend files in the /data/models directory within the Editor filesystem. On macOS, you will have to link the actual executeable within the Blender.app Contents, not Blender.app binary itself. For example, on my macOS install the path I have set is:
/Applications/Blender.app/Contents/MacOS
If you're working on this (or any multiplayer project) and running Windows, I recommend using the app clumsy, which is very helpful for simulating bad network conditions (latency, dropped packets, throttled connection, etc.) when testing.
Tinybox enforces statically typed GDScript - see the static typing guide here.
There is a feature in the game that contacts a remote API. Using this API, the user can upload their own worlds and fetch worlds made by other users.
By default it links to https://tinybox-worlds.caelan-douglas.workers.dev/. You can change the world repo in-game in Settings -> World Database Repo. If you wish to make your own repo, you can implement this API however you like, but these are the guidelines on the data that the game expects to recieve & what it sends.
The functionality of the repo is as follows (where / is the root of the API web page):
Returns an array containing all the worlds in the database. Each entry has a dictionary with the following:
id(int): world ID in the databasename(string)featured(int): 1 for featured, 0 for not featureddate(string): format YYYY-MM-DDdownloads(int): download count (updated via a method defined later)version(string): internal server version of map (ie. 12020)author(string): author nameimage(string): base64 image preview
Returns TBW file of map, where X is the map ID; used for downloading. No other data is returned.
tbw(string): full TBW world file plaintext
Internally, this also increments the downloads member of the world in the database.
Reports a map, where X is its ID. Internally this increments the reports member of the world in the database.
Uploads a map to the database. The Content-Type header should be application/json. The body should contain the following values:
name(string): name of the maptbw(string): full plaintext tbw file. Information like the preview image, author name, and version can be parsed from this file and then stored in the database.
Returns body with OK if the upload was successful. If the body does not return OK, then the game will consider the upload failed.
This is ratelimited by the server on a per-user basis.




