Open-source project
bitbrain/godot-gamejam avatar
bitbrain/godot-gamejam

godot-gamejam is a Godot 4 template with the boring parts already built

🤖 Godot Engine 4 template to better get started for gamejams with your 2D or 3D game!

813 stars49 forksGDScriptMIT

At a glance

What is it?
godot-gamejam is a GitHub template repository for Godot Engine 4 that ships a main menu, settings, pause menu, save game handling, translation support and automatic itch.io builds. It is aimed at game jam entrants, and it warns that not every jam allows templates.
Who is it for?
godot-gamejam suits a solo entrant or a small team that wants the menu, settings, save and build plumbing out of the way during a jam, since all of it is in the repository and the itch.io workflow is already wired. It is the wrong choice for a jam that forbids templates or for a long term project, because the template keeps the project deliberately generic and the maintainers ask that contributions stay template scoped.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 65 days ago.
What is it written in?
Mainly GDScript, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 22, 2026, and from our analysis. They are not legal advice.

Editorial analysis

A template repository, not an addon

godot-gamejam is a Godot Engine 4 template intended to help you get started on a game jam with a 2D or 3D game. The primary language is GDScript and the licence is MIT.

The distinction between a template and an addon matters for how you use it. This is a GitHub template repository, so you create your own copy with the Use this template button, and the code becomes yours to change. The getting started steps are exactly that: click Use this template, open the project in Godot Engine 4, customise it, then open the IngameScene and start building.

The alternative, adding an addon to an existing project, would mean copying scenes in and wiring menus by hand, which is a different amount of work under a jam deadline.

There is a rule the README puts first, before anything else, and it deserves the same attention. Not all gamejams allow project templates, and using one where it is not permitted risks disqualification. A list of compatible formats follows, including GoGodotJam, Ludum Dare, GMTK Game Jam, Brackeys Gamejam, Global Game Jam, GameDevLondon Summer Jam and Godot Wild Jam.

That is the single most important thing to check before you do anything else with this repository.

What the template gives you on the first hour

The feature list is a list of things that would otherwise eat a jam weekend.

Game settings come out of the box with audio volume controls split into Master, Sound and Music, and a game language setting which is English only by default. There is bootsplash scene support, so you can use the default Godot bootsplash or define your own logo bootsplash.

The menu flow covers the main menu, the settings screen and the pause menu, with navigation between the ingame state, settings and quitting the game. The IngameScene supports a pause menu to temporarily pause the game, and save game integration saves the state of the game on exit, where starting a new game overrides the existing save.

Translation support ships with pre-defined translations that can be extended, and there is a separate section on adding a new language.

The pattern to notice is that the template deals with the parts of a game that are never the game: volume sliders, a settings screen, a pause menu, a boot logo, a save file and a localisation table. None of that is interesting to write, and all of it is needed to ship.

The Persist group is how you decide what gets saved

The save game system has one rule that a user of the template needs to understand, and the README states it plainly. Any game object that needs to be saved has to be part of the Persist group.

That is a Godot group membership rather than a hard coded list, which is the right way to do it. The save system picks up every node inside the IngameScene that belongs to the group, and it also saves nodes that were dynamically added to the scene at runtime, so a projectile spawned during play persists correctly without extra work.

Save games are enabled by default, and support can be toggled inside SaveGame.gd by changing the ENABLED property.

There is one behavioural limit stated in the documentation: currently the game will only save the scene when exiting the game via the pause menu. So a crash or a task kill loses the session. That is a sensible default for a jam game, and a jam entry that needs checkpointing would have to add it, which means the template is a starting point rather than a finished persistence layer.

Translations live in one CSV and a column per language

The localisation approach is worth a closer look because it is simple in a way that scales.

The translation file is i18n/translation.csv. Godot picks the translations up automatically if they are used inside control nodes such as Button or Label, and for anything translated manually in a script you call the tr() function. Adding a new language means adding a new column to the CSV.

Godot's standard translation setup uses exactly this format, one CSV with a column per language. A jam team editing a small table in a spreadsheet will find the single file easy to manage, and adding a language is one column. The cost appears later, when a translator works in a different tool or when the table grows.

The project also keeps an i18n directory at the root of the repository, and the game language setting in the game settings is where the player picks which of the defined languages to use.

itch.io builds run from a GitHub workflow

The template ships with automatic deployment to itch.io for MacOS, Windows, Linux and HTML5 for the web, through a workflow file at.github/workflows/godot-ci.yml. The README notes you can delete that file if you are not interested in deploying to itch.io.

Setting it up takes three steps. You generate a new API key in your itch.io settings and set up a BUTLER_API_KEY secret, you create a new game on itch.io, and you set the ITCHIO_GAME and ITCHIO_USERNAME secrets in GitHub with your itch.io username and game name.

A working example is linked from a separate repository, ggj-2023, which the README links as a working example. Looking at that rather than writing the workflow from scratch is the practical first step.

The three targets cover the usual jam platform rule, which is often that a submission must be playable in a browser. HTML5 through itch.io is what handles that, and the workflow exists so a jam entrant does not have to learn the export and upload path at midnight on the deadline.

Customising the theme and the boot splash

Two customisation paths are documented in detail.

For the UI theme, the file to find is theme.tres, and opening it brings up the Godot theme editor. Any Control node uses this theme by default, so changing it restyles the menus without touching individual scenes. That is the difference between a template and a pile of copied nodes, and it means a colour change for a jam theme requirement is one file.

For the boot splash, the scenes live under scenes/boot. You can either modify the GodotBootsplashScene or create a new node of type Control. A BootsplashScene is then added as a child and configured through its properties: Fade Duration, the time in milliseconds to fade the bootsplash in and out, Stay Duration, how long it should stay, Node, the scene to display, Next Scene, the scene to load afterwards, and Interruptable, whether it can be skipped.

The 2D versus 3D decision is deliberately left open. The README says the toolkit is not limited to either, that it was kept vague on purpose, and that you are free to build 2D or 3D scenes with it.

Repository layout and the contribution rule

The tree at the root of the repository is small. There is a godot directory holding the project itself, a docs directory with the images used in the README, a logo.png, a LICENSE and a.github directory for the workflows.

Keeping the Godot project in a subdirectory rather than at the repository root separates the game project from repository level files such as the README, the licence and the GitHub workflows, which is a practical arrangement for a template repository.

The contribution rule is stated with unusual clarity. The project is a template, and any contribution should only introduce or extend features that are template related. If something can be its own addon, such as a movement controller or specific 2D or 3D handling, it probably should be a separate addon instead.

That is the right boundary for a shared starting point. A template that accumulates game specific code stops being a template, and every entrant inherits it.

Editorial conclusion

godot-gamejam suits a solo entrant or a small team that wants the menu, settings, save and build plumbing out of the way during a jam, since all of it is in the repository and the itch.io workflow is already wired. It is the wrong choice for a jam that forbids templates or for a long term project, because the template keeps the project deliberately generic and the maintainers ask that contributions stay template scoped. Before using it, read the rules of the specific jam, click Use this template to create your own copy, and check that the platform targets the template builds are set to still match your jam's platform requirements.

Frequently asked questions

Can I use the godot-gamejam template for any game jam?

Not every jam allows project templates, and the README warns that using one where it is not permitted risks disqualification. It lists compatible formats including GoGodotJam, Ludum Dare, GMTK Game Jam, Brackeys Gamejam, Global Game Jam, GameDevLondon Summer Jam and Godot Wild Jam.

How do I make a node save with the godot-gamejam template?

Any game object that needs to be saved has to be part of the Persist group. The save system picks up those nodes inside the IngameScene, including nodes added dynamically at runtime, and save support can be toggled through the ENABLED property in SaveGame.gd.

How do I add a new language to godot-gamejam?

The translations live in i18n/translation.csv, and a new language is added as a new column in that file. Godot picks up the translations automatically when they are used in control nodes such as Button or Label, and scripts translate strings manually with the tr() function.

Official sources

  1. bitbrain/godot-gamejam on GitHub
  2. Issues
  3. License: MIT
  4. README
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/bitbrain-godot-gamejam.svg)](https://hysenlabs.com/projects/bitbrain-godot-gamejam)

Was this useful?