yusp48/geometry-dash-levels
Geometry Dash Level Dataset Subsets 2024_300k Dump of ~300k levels from the Geometry Dash servers, sorted by the number of likes. 66 JSONL shards (~660MB each, ~43GB total). Files: 2024_300k/levels-v1-00000.jsonl through 2024_300k/levels-v1-00065.jsonl 2026_50k_rated ~50k rated/featured levels scraped from the Geometry Dash servers in February 2026. 39 JSONL shards (~500MB each, ~19GB total). Files:… See the full description on the dataset page: https://huggingface.co/datasets/yusp48/geometry-dash-levels.
Geometry Dash Level Dataset
Subsets
2024_300k
Dump of \~300k levels from the Geometry Dash servers, sorted by the number of likes. 66 JSONL shards (\~660MB each, \~43GB total).
Files: 2024_300k/levels-v1-00000.jsonl through 2024_300k/levels-v1-00065.jsonl
202650krated
\~50k rated/featured levels scraped from the Geometry Dash servers in February 2026. 39 JSONL shards (\~500MB each, \~19GB total).
Files: 2026_50k_rated/levels-v2-00000.jsonl through 2026_50k_rated/levels-v2-00038.jsonl
2024300knodata
Metadata-only version of 2024300k with the `levelstring` field removed. Contains all other fields (level name, ID, likes, downloads, difficulty, stars, etc.) in a single merged JSONL file. 330,925 levels, \~261MB.
File: 2024_300k_nodata/2024_300k_nodata.jsonl
202650krated_nodata
Metadata-only version of 202650krated with the level_string field removed. Contains all other fields in a single merged JSONL file. 53,183 levels, \~28MB.
File: 2026_50k_rated_nodata/2026_50k_rated_nodata.jsonl
About the _nodata subsets
The _nodata subsets are lightweight versions of the full datasets that contain only level metadata (name, difficulty, stars, likes, downloads, game version, etc.) without the actual level geometry data (level_string). This makes them much smaller and faster to download — useful for exploratory analysis, filtering, or building indexes without needing the full \~62GB of level data.
Level String Encoding
In both full subsets, each record's level_string is stored in the same encoding Geometry Dash uses for save files:
urlsafe_base64(gzip(raw_level_string_utf8))To decode back to the raw GD level string:
import base64, gzip
def decode_level_string(s: str) -> str:
return gzip.decompress(base64.urlsafe_b64decode(s.encode("ascii"))).decode("utf-8")Notes
Passwords are not decoded. Refer to the gddocs XOR docs if you need to decode passwords.
Thanks to https://wyliemaster.github.io/gddocs/ for documentation of Geometry Dash formats.
