Git Editor (Collab, History, Backup)

imes

Git Editor

A real diff-based history for the editor, so you can undo a change without reverting the whole level.

DON'T FORGET TO CHECK THE CHANGELOG!!!

Collab guide at the bottom!


Features

All of these can be found in the editor pause menu at the top :3

Commit

Name and save your changes into a delta snapshot in the history.

I recommend committing small changes like adding decoration, trigger changes, or buffing a section instead of doing one massive commit.

Note: Make sure to assign the intended z-order for your overlapping objects. This mod does NOT care about the order in which objects were placed.

History

A list of all commits for the level you're currently in.

Long histories may briefly show Loading commits... while the list prepares.

  • Revert: Undo a specific commit without rolling back any of the changes made after it.
  • Checkout: Load a past commit's state into the editor. You can safely revert this when you're done checking out. Heh.
  • Squash: Combine adjacent commits into a single, clean commit.

Levels

A list of all levels that have an active commit history.

If you have a ton of levels, it might show Loading levels... for a moment.

  • Load: Overwrite the current level data with the data and history from another level.
  • Delete: Permanently delete the history of the selected level.

Merge

Combine multiple level databases into one.

  • .gdge: This stands for Geometry Dash Git Editor.
  • Export/Import: Export your current level history to a .gdge file, or import a modified .gdge file to trigger a smart merge.
  • 3-Way Merge: The mod analyzes the original base of your level and automatically resolves object conflicts for you. (Does NOT fix bad collab hosts giving out incorrect color channels and group IDs... yet).

Note: Everything is saved offline as a SQLite database inside the mod's save folder (git-editor.db). Exported .gdge files are automatically compressed into ZIP format to save disk space.


Some Examples of What You Can Do

  • Time Travel: You can checkout an earlier commit to go back in time, make a change, and commit it. Then, revert the checkout to rewrite history with your new commit. You can also squash them later to keep things tidy.
  • Backup System: Keep a complete, uncorrupted history of your levels.

Pro tip: You can manually add git-editor.db to a ZIP file to compress it to 10% of its size, making it easy to back up to Google Drive or Discord.


Current Limits

  • No branches or rebasing yet: Though you can manually merge by using checkout -> copy objects -> revert checkout -> paste objects -> commit.
  • Object Identity: Large or sweeping edits may show up as an "add + remove" instead of a "modify." This is normal behavior, not a bug.
  • Commit Messages: Strictly capped at 120 characters.

If you ever need help or a custom migration script, feel free to contact me on Discord!


Collab Guide

  1. Create your base layout.
  2. Commit and squash everything into a single layout commit.
  3. Export the .gdge file and send it to your decorators.
  4. Decorators do their work and commit their specific changes.
  5. Have your decorators export their finished work back to .gdge files.
  6. Click import .gdge (importing all of them at once should work).
  7. ???
  8. Profit!

Note: Your layout acts as the base. When you import the decorators' files, all of their unique commits will cleanly apply directly onto your layout. If you don't send the original layout as a .gdge file first, the smart merge system won't know how to sync them.

Changelog

Check the project out on GitHub!

Consider giving it a star and check the commit history for a more technical changelog.

Known issues

  • Failed exports may leave a .tmp zip next to the destination, compressed export also builds a .sqlite-tmp that is removed after packing. Incomplete runs are less likely to delete the existing .gdge before the new file is safely in place.
  • Some updates will not be able to properly read old .gdge files.

1.0.0-beta.12

  • Bigger action/commit size (SQLite max length is now 1,000,000,000), basically uncapped.
  • Improved error feedback.

1.0.0-beta.11 - The "Better for All" Update

This update focuses on the project's codebase, making it much easier for anyone to contribute. Most of the codebase has been reworked, and full documentation is now available.

If you're already using this then you can expect better long-term support, stability, and future improvements.

  • UI/UX improvements, no more massive stuttering when clicking buttons while working on a big level.
  • New "What changed" menu, diff texts no longer cap out or lag, and you can now flip through them like pages.
  • Fixed crashes, performance issues, and the bug where the game gets stuck on a black screen when exiting the editor.
  • Lots of internal cleanup for stability and speed.

1.0.0-beta.10

Going forward, I'll be adding auto-migrations once the mod leaves beta. However, migration scripts likely won't be needed as the save format is now finalized. TL;DR You can daily drive this mod.

  • New icon and about page.

1.0.0-beta.9

  • Fixed crash when opening "Edit Object" on a startpos (actually any objects that uses kA*/kS*/whatever) after a revert or checkout.
  • Added round-trip regression test for start-pos kA* keys.

1.0.0-beta.8

  • Added automated test, check settings menu.
  • Increased state cache size.
  • Internal improvements like reusing prepared statement and level parser optimization.

1.0.0-beta.7

  • SQLite prepared statements finalized on all paths where it mattered, new commits that advance HEAD persist insert + HEAD in one transaction.
  • Added import/export decompress cap for stored blob size.
  • Added atomic replace for zip exports on Windows.
  • Moved History and Levels load lists (and History rename) on to the git worker with a loading label.

1.0.0-beta.6

THIS UPDATE WIPES YOUR DATABASE!

  • Added blob compression (with zlib). This also make the old .gdge file invalid.
  • Added file size estimations in the mod's level page.
  • Internal improvements like using more Geode's utils.

1.0.0-beta.5

  • Check the GitHub commit for this one, it's mostly code changes/improvements.

1.0.0-beta.4

  • Added default-on compression for exported .gdge files, stored as zips with automatic detection on import, both compressed and raw files are supported.
  • Added more Node IDs (including popups: History, Levels, commit message, delta detail).
  • Unified path system (geode::utils::string::pathToString via PathUtf8).
  • Simplified revert action message for missing objects (Refactored revert payload system).
  • Simplified in-memory caching system (LRU to map and flush-on-full).
  • Vendored SQLite 3.53.0 amalgamation (was 3.38.2 via CPM).
  • Removed legacy code and other internal improvements like postToGitWorker no longer wraps jobs in C++ try/catch.

1.0.0-beta.3

THIS UPDATE WIPES YOUR DATABASE!

  • Switched level keying to Editor Level ID API (cvolton.level-id-api).
  • Switched to Geode's async runtime for background git and database work.
  • Removed legacy local/localid alias-key from runtime/store schema paths.
  • Bumped commit DB schema version.

1.0.0-beta.2

  • Replaced .gdge metadata integer parsing with non-throwing parsing.
  • Replaced import/export and merge filename path conversions with UTF-8-safe handling.
  • Added GitHub link in mod.json.

1.0.0-beta.1

  • Initial version, expect edge cases. Report bugs at my Discord server.
The recommended way to install mods is through the in-game mod loader . You will have to manually install the .geode files you get from this page.

Some mods also require other mods as dependencies ; you will need to find and install them yourself.

Site made by HJfod. Thank you to nekit for the domain!

Geode Team 2026