A fully rewritten version of the Geometry Dash backend in Node.js, with account storage, levels, custom songs, rewards, and an admin dashboard.
Requirements: Node.js 22+ and npm.
npm install
cp .env.example .env
npm startThe server runs on port 10000 by default. Change the port value at the top of config.js to pick another port.
Open http://localhost:10000/dashboard/ after starting the server.
Configure these values in .env:
DASHBOARD_PATH=/dashboard
DASHBOARD_USER=moderator
DASHBOARD_PASSWORD=use-a-long-random-password
DASHBOARD_ACCOUNT_ID=123
DASHBOARD_SECURE_COOKIES=0
TRUST_PROXY_HOPS=0The account must already exist and have modLevel=2 (moderator). Change the default dashboard path and password before exposing the server to the internet. Set DASHBOARD_SECURE_COOKIES=1 when using HTTPS.
- Geometry Dash-compatible account, level, list, score, comment, message, social, rating, reward, and moderation endpoints
- Custom song hosting at
/songs/<filename> - GDPS Switcher support at
/switcher/getInfo.php - SQLite database created automatically as
gd_server.db - Dashboard tools for users, levels, ratings, songs, collections, rewards, quests, and server scheduling
API routes are loaded automatically from endpoints/. All game requests use POST form data, matching the Geometry Dash client protocol.
The server starts at / by default. You don't need to append /database to your links, simply use the hostname, the port (if necessary) and the endpoint.
See .env.example for all available settings, including daily chest wait times and reward ranges.
The application allows 100 requests per minute per client. Dashboard login is limited to 10 attempts per 15 minutes.
npm testTo measure SQLite on your hardware with a temporary database:
npm run benchmark:sqlite -- --rows=1000000 --writers=4 --rounds=5000The benchmark reports seed speed, mixed indexed read/write throughput, and
95th-percentile operation latency. Increase rows until it matches your
expected population, then increase writers and rounds to model traffic.
Move to a server database when measured write latency or throughput no longer meets your requirements!
To add an endpoint, create a module in endpoints/ that exports method, path, and handler. It will be registered automatically when the server restarts.
This project's versioning system is close to RobTop's. Versions are incremented usually +0.1 for each patch or major version. For example, if you see a jump from 1.9R to 2.0R, this doesn't mean it's a major version, it could simply be a minor patch, or even just a version bump.
Keep that in mind when updating your server, only update if you deem it necessary, and always check commit names first, versions don't tell the whole story!
Open-source as all things should be, MIT Licensed
Not affiliated with, endorsed or approved by RobTop Games AB. Purchase the game on stores such as Steam, Google Play Store or the Apple App Store.