crystal-gauntlet

a Geometry Dash server reimplementation in Crystal, focusing on speed and 1:1 recreations of vanilla GD features

this project is still in its very early stages. you can see a rough estimate of the current progress in this issue.

why?

i was highly disappointed with the lack of options in private server choices - the two most well known ones that i noticed were Cvolton's GDPS which has very little customization and some of the most atrocious code i've seen in a while (though i can't really blame it, being written in PHP), and Realistik's buzzword-filled Python GDPS which i find hard to believe is seriously trying to sell itself with docker and mongodb.

i was also disappointed with the sheer simplicity of servers - most will get data and serve data and that's about it, but looking into how they're implemented made me realize many security pitfalls in Geometry Dash's server structure. for instance - even if you're storing the amount of objects a level has, you're trusting the client that they've given you an accurate count, and they could really have way more, making games unexpectedly severely lag or crash.

additionally, the lack of configuration compelled me even more to write my own solution, so one night of considering XKCD 927 later, here we are

features

build

shards install && shards build

configuration

copy .env.example to .env and fill it out, same for config.example.toml -> config.toml

by default, the config emulates vanilla GD servers as closely as possible, but you'll likely want to change it - most options have comments detailing what exactly they do

setup

run bin/crystal-gauntlet migrate (or shards run -- migrate)

schemas are highly unstable so you will be offered 0 support in migrating databases for now, however in the future you'll want to run this each time you update

then bin/crystal-gauntlet (or shards run) to start the server

attributions & credits

real

real

real