Galleries, Existential Coalescing, Slow Motion and more! (Feb 2026 update)
Easel continues to improve! Keep reading to learn what is new with Easel this month.
Easel is a beginner-friendly 2D game programming language with automatic multiplayer. Intrigued? Visit our home page to learn more.
Galleries
Games have entities, and they have user interface panels, and when the hierarchy of the two do not line up, sometimes complex code was required to wire the two together. Galleries are a new powerful feature that streamlines this process.
Let's say you are making an inventory management panel. Instead of needing to ship all the data from each inventory item to the panel, each item can instead just display itself in the gallery. Your logic stays local, staying within the context where the data already is and reducing boilerplate.
Galleries allow you to separate the decision of "what" should be displayed from "where" to display it, decoupling the logic of your game from the structure of your user interface, which can simplify your code.
See Galleries to learn more.
Existential coalescing
The new existential coalescing ??? and existential assignment ???= operators
check for existence, and can make your code more succinct.
For example, let's say in your game, a hero can only have one shield.
If they pickup another shield powerup, it should do nothing.
However, let's say the shield expires after a while,
at which point they are allowed to pick up a new shield.
We can implement this succinctly with the existential assignment operator ???=:
HeroShield ???= Subspawn shield {
// only runs if the hero does not already have an existing shield
}
If the left side (HeroShield in this case) already exists, it will short circuit,
meaning the right-hand side will not execute at all (Subspawn shield in this case).
See Operators and Assignments to learn more about these new operators.
More initializers
You can now initialize a field or prop with an Array or Map literal.
Let's say in our game, a player can receive multiple curses, but each player can only curse another player once.
This can be implemented succinctly using a field initialized with Map, like this:
pub field hero.HeroCurses = {} // a map of { owner => curse }
Now it only takes one line to add a new curse to the hero's HeroCurses Map,
if it does not already exist:
HeroCurses[owner] ???= Subspawn curse {
// only runs if the hero does not already have an existing curse from this player
}
Here is an example of initializing a field with an Array:
pub field hero.SnakeSegments = [] // initialize with an empty array
Also, now various arithmetic operators can also be used in initializers, which means you can now initialize a field with flags like this:
pub field hero.PickupTypes = PickupType:Weapon | PickupType:Powerup
More engaging homepages
Preivously toolbars would reserve space at the top of the screen, above any content, and this area could not be stylized in any way.
Now a ContentScreen will now fill the entire screen all the way to the top, with the Toolbar overlaid on top. This allows you to make more immersive homepages and let your content stand out even more. See Turret Tumblers for an example of a homepage video that now reaches all the way to the top of the screen.
Also, now if you want to encourage players to scroll below the ContentScreen,
you can set ContentScreen(expand=false). This makes the ContentScreen only take as much height as it needs,
rather than filling the full height of the screen,
making room for any content below it to be visible and enticing players to scroll down.
See Beelines
for an example of a homepage that encourages players to scroll down.
By default, pages have a max width to keep your paragraphs of text legible,
but the new Content(maxWidth=64) parameter lets you change this limit or remove it entirely,
if you would like your content to better fill the whole page.
Pausing physics
The new PhysicsTimescale property lets you slow down, speed up, while the rest of the simulation continues at normal speed. You could use this for a slow motion powerup, or to pause the physics simulation while the player is selecting an upgrade, for example.
Editor improvements
In order to keep you in the flow of coding, a number of improvements have been made to the editor.
Ctrl+Fwill now search for selected text, helping you more quickly find other instances of the same function.- Press
F3orShift+F3to jump to the next or previous search result, respectively. - The new
Ctrl+Pshortcut lets you jump to a file by name, making it faster to navigate between files. Ctrl+Tablets you jump back to a recently opened file. HoldCtrland keep tappingTaborShift+Tabto cycle through your recently opened files. Depending on your browser and operating system, you may want to tryCtrl+Alt+TaborOption+TabifCtrl+Tabdoes not work for you.- For power users, the new Vim mode allows you to use Vim keybindings in the editor.
- One subtle but important improvement is the focus will be retuned to the editor whenever you do various actions like selecting another file, reducing the number of clicks to get back to coding.
See Keyboard Shortcuts for more information.
Other changes
- The new
hoverColorparameter lets you customize the hover color of buttonsButton(hoverColor=#0fc)or linksLink(hoverColor=#f80). See Button. - The new
shadowparameter lets you customize the strength of panel shadowsPanel(shadow=0.5). In particular,Panel(shadow=0)can help you make effects like progress bars or title bars without the shadow interfering. See Panel. - The new LoginToggle lets you add a login/manage account button to your homepage with a single line of code.
Now you can make even more fun and engaging games with Easel!
