hi, this is colon from the future.
what the FUCK was wrong with me back then???? seriously this is some of the worst code i've ever seen
welp, here's the readme. but you've been warned,,,
Uh... so I've never actually used GitHub before this. But I'll try to explain everything going on here.
Sorry for my messy code. It's why I was skeptical about making this open source, but you know what, the code runs fine in the end.
How do I run this?
If you're just here to use GDBrowser locally because the site is down or blocked or restricted or god knows what, this is the only part you really need to read
To run GDBrowser locally:
- Install node.js if you don't already have it
- Clone/download this repository
- Open cmd/powershell/terminal in the main folder (with index.js)
npm ito flood your hard drive with code that's 99% useless
node indexto run the web server
- GDBrowser is now running locally at http://localhost:2000
If you want to disable rate limits, ip forwarding, etc you can do so by modifying
settings.js. Doing this is probably a good idea if you feel like obliterating Rob's servers for some reason. (please don't)
Using this for a GDPS?
I mean, sure. Why not.
Hold up, wait a minute... private servers are an official feature now!
If you would like to add your GDPS to GDBrowser, fill out this quick form and I'll be happy to add it (provided the server is relatively large and active)
If you 100% insist on adding a private server to your own magical little fork, you can do so by adding it to servers.json. Simply add a new object to the array with the following information:
||The display name of the server|
||The server's website URL (unrelated to the actual endpoint)|
||The creator(s) of the server|
||The URL to open when clicking on the creator's name|
||An ID for the server, also used as the subdomain (e.g.
||The actual endpoint to
There's also a few optional values for fine-tuning. I'll add more over time
||A string to append at the end of timestamps. Vanilla GD uses " ago"||string|
||The URL of the server's Demon List API, if it has one (e.g.
||An array of menu buttons to "disable" (mappacks, gauntlets, daily, weekly, etc). They appear greyed out but are still clickable.||array|
||"Pins" the server to the top of the GDPS list. It appears above all unpinned servers and is not placed in alphabetical order.||bool|
||Makes a bunch of fancy changes to better fit 1.9 servers. (removes orbs/diamonds, hides some pointless buttons, etc)||bool|
||Enables the lost but not forgotten Weekly Leaderboard, for servers that still milk it||bool|
||A list of parameter substitutions, because some servers rename/obfuscate them. (e.g.
||A list of endpoint substitutions, because some servers use renamed or older versions. (e.g.
GDBrowser has a lot of folders. 
I pride myself in keeping my files neat, without doing the whole
Most folders contain exactly what you'd expect, but here's some in-depth info in case you're in the dark.
This is where all the backend stuff happens! Yipee!
They're all fairly similar. Fetch something, parse the response, and serve it in a crisp and non-intimidating JSON. This is probably what you came for.
Assets! Assets everywhere!
I'd explain what's in all the subfolders but it's pretty obvious. I tried my best to organize everything nicely.
What's a class you ask? Good question.
I guess the best way to put it is uh... super fancy functions???
Level.js parses the server's disgusting response and sends back a nice object with all the level info
XOR.js encrypts/decrypts stuff like GD passwords
The HTML files! Nothing too fancy, since it can all be seen directly from gdbrowser. Note that profile.html and level.html (and some parts of home.html) have [[VARIABLES]] (name, id, etc) replaced by the server when they're sent.
Inevitable misc folder
Level Analysis Stuff (in a separate folder)
||The object IDs in the different 'families' of blocks|
||Color channel cheatsheet|
||Level settings cheatsheet|
||Object property cheatsheet. Low budget version of AlFas' one|
||IDs for portals, orbs, triggers, and misc stuff|
||List of all GD/meltdown/subzero/etc achievements.
||An object containing different categories of achievements (stars, shards, vault, etc) and how to identify them|
||Credits! (shown on the homepage)|
||Used on several pages for drag scrolling|
||Excecuted on most pages. Used for the 'page isn't wide enough' message, back button, icons, and a few other things|
||An array of the official GD tracks (name, artist)|
||A pool of icons, one of which will randomly appear when visiting the icon kit. Syntax is [Name, ID, Col1, Col2, Glow]|
||GJP goes here, needed for level leaderboards. Not included in the repo for obvious reasons|
happy gdbrowsing and god bless.