Data-Driven Games (October 2026 update)
Using the new data file import, you can now author content in other software programs and import them into Easel! This allows Easel to be one part of a larger creation workflow, beginning with map editors, sprite animation tools and narrative design tools, and ending with a multiplayer game that you can share with your friends.
Easel is a browser-based 2D game programming language that makes your game multiplayer automatically! Intrigued? Visit our home page to learn more.
Geography Dash
Presenting the new import statement, used to import data files!
pub import Level1Data from @level1.json
To demonstrate what's possible with this new data import feature, we chose to import a dataset that we can all identify with: the world. In Geography Dash, you race your friends to fly to a country on the world map. Do you know where Eritrea is? Can you fly to it with the map upside down? Play it and find out!

Natural Earth is a public domain dataset created by a team of volunteers led by Nathaniel Vaughn Kelso and Tom Patterson. Thanks to them and Easel, you can now race your friends around the world in an epic multiplayer game of global proportions!
JSON and CSV
Easel supports importing data from JSON and CSV files, two of the most common formats for data interchange. This means Easel can now import data from programs such as:
- Tiled, a popular level editor that can export levels as JSON files.
- LDtk, another popular level editor that exports to a combination of both JSON and CSV files.
- Spine, a popular sprite animation tool that can export animations as JSON files.
Importing and also converting
JSON supports only simple types like Strings and Numbers, whereas Easel supports a much richer set of types, including Vectors, Symbols, Colors, Assets, and more. The first task of any data import is to convert the data into Easel's richer types so they are ready to use in your game.
For this reason, when importing data into Easel using the import statement,
you can use the as keyword to specify a schema to convert to:
pub import CountryData from @world.geo.json as {
features as [{
id = properties.iso_a2 as String,
name = properties.sovereignt as String,
labelPos = @(properties.label_x, properties.label_y),
geometry as {
type as String,
coordinates as [[Vector] | [[Vector]]],
},
}]
}
Compile-time conversion
When using a schema, the data is parsed and converted at compile time. This has a number of benefits:
- Your game starts faster because the data is already processed when the game starts.
- Only the data referenced by the schema is imported, reducing the size of your game download for your players.
- If the data in the file does not match the schema, Easel will throw a compile-time error. This helps you design data files and schemas that are consistent with each other.
Static data
Easel uses rollback netcode to make your game multiplayer automatically, and one of the key considerations for rollback performance is minimizing the amount of data that needs to be rolled back.
For this reason, data files are imported as static and cannot be changed at runtime:
pub import WorldData from @world.geo.json
WorldData.features[123].name = "Gulf of Easel" // ❌ causes a runtime error
This means data files can be completely excluded from the rollback state, which means even if your file is as big as the whole world, it will not slow down your multiplayer game.
Supporting static collections required changing the way Arrays and Maps are handled throughout the entire engine, but if it all has gone well, you'll never notice the difference in your game.
Learn more
See Data Files to learn more about this new feature, including how to define schemas and how to import data from CSV files.
Other changes this month
- Added SymbolName, SymbolFromName and ToSymbol functions to convert between Symbols and Strings.
Thanks for being here!
Thank you for your continued support of Easel!
If you haven't already, check out this Easel game made this month!
