Sign in

Excalibur.js

@excaliburjs.com
107 followers 25 following 63 posts

Your friendly TypeScript 2D game engine for the web! ⚔️ excaliburjs.com

PostsRepliesMedia
Excalibur.js @excaliburjs.com · 23/12/2025
The Excalibur browser extension got a massive upgrade! 🔍 New features: ECS system timing sparklines for perf debugging! Color blindness simulation for a11y testing! Change debug draw colors on everything! Scene navigation buttons! Screen & camera details panel! Tweak Physics Settings on the Fly!
110
Excalibur.js @excaliburjs.com · 23/12/2025
Developer experience got so much better in v0.32.0! 🛠️ Now you can set default graphics/materials right in the Actor constructor:
const actor = new ex.Actor({
  graphic: cloudSprite,
  material: swirlMaterial
});
110
Excalibur.js @excaliburjs.com · 02/10/2025
We have 4 types right now!
4 different types of stickers, sword logo, text logo, May-trix from Sum-Monsters Game, and Cal the robot
030
Excalibur.js @excaliburjs.com · 02/10/2025
We got excalibur stickers for purchase now via Stripe! excaliburjs.com
https://excaliburjs.com sticker link for purchase
120
Excalibur.js @excaliburjs.com · 01/10/2025
DevContainers for contributors to run the development environment in a consistent way!
Screenshot of VSCode running the new excalibur dev container

```json
// .devcontainer/devcontainer.json
{
  "name": "Node.js & TypeScript (Playwright)",
  "image": "mcr.microsoft.com/playwright:v1.55.1-noble",
  // Install browsers
  "postCreateCommand": "npm install; npx playwright install",
  // Start virtual Xserver for tests and leave running
  "postStartCommand": "nohup bash -c 'Xvfb $DISPLAY -screen 0 1280x720x16 &'",
  "containerEnv": {
    "DISPLAY": ":99"
  },
  "portsAttributes": {
    "51204": {
      "label": "Vitest UI"
    },
    "5173": {
      "label": "Vite Dev Server"
    },
    "6006": {
      "label": "Storybook"
    },
    "3000": {
      "label": "Docs Site"
    }
  }
}

```
120
Excalibur.js @excaliburjs.com · 01/10/2025
ECS Queries can now take additional options to filter in/out by components or tags.
```typescript
const query = new Query({
  // all fields are optional
  components: {
    all: [ComponentA, ComponentB] as const, // important for type safety!
    any: [ComponentC, ComponentD] as const, // important for type safety!
    not: [ComponentE]
  },
  tags: {
    all: ['tagA', 'tagB'],
    any: ['tagC', 'tagD'],
    not: ['tagE']
  }
})

// previous constructor type still works and is shorthand for components.all
new Query([ComponentA, ComponentB] as const)
```
110
Excalibur.js @excaliburjs.com · 01/10/2025
SoundManager can manage groups of audio clips volume at once, great for background music, sound effects, and more!
```typescript
import * as ex from 'excalibur'

const soundManager = new ex.SoundManger({
  channels: ['fx', 'music', 'background'],
  sounds: {
    jumpSnd: { sound: jumpSnd, volume: 0.4, channels: ['fx'] },
    forestSnd: { sound: forestSnd, volume: 0.2, channels: ['music', 'background'] },
    challengeMusic: { sound: challengeMusic, volume: 0.2, channels: ['music'] },
    guitarLoop: { sound: guitarLoop, volume: 0.2, channels: ['music'] }
  }
});

// play a specific sound
soundManager.play('jumpSnd');

// mute a specific channel with all member sounds
soundManager.channel.mute('music');

// mute all sound
soundManager.mute();
// unmute all sound that was previously muted, and resume playing from the current location
soundManager.unmute();

// unmute a specific channel that was muted
soundManager.channel.unmute('music');

// play a specific channel
soundManager.channel.play('music');

// set the max volume of an entire channel
soundManager.channel.setVolume('music', 0.9);

```
110
Excalibur.js @excaliburjs.com · 22/09/2025
🧱 Excalitris! A brand new Excalibur tetris-like sample is live! Check it out now! You can even do vim motions! Thanks to @chrisk-7777.bsky.social Did you know you can do game dev with TypeScript? Play: excaliburjs.com/sample-excal... Repo: github.com/excaliburjs/... #typescript #gamedev #tetris
0144
Excalibur.js @excaliburjs.com · 27/06/2025
🗺️ New Graph module to do graph data structures and algorithms with built in path finding! Thanks @mookie4242.bsky.social! Features: - Nodes with custom data - Weighted, directed or undirected edges - Position nodes in 2D space for spatial algorithms - Built in BFS and DFS - Path finding!
Code Snippet

```typescript
import { Graph } from 'excalibur';

// Create an empty graph of strings
const graph = new Graph<string>();

// Add a few nodes with string data
const nodeA = graph.addNode("A");
const nodeB = graph.addNode("B");
const nodeC = graph.addNode("C");

// Connect nodes with bidirectional edges (default)
graph.addEdge(nodeA, nodeB);
graph.addEdge(nodeB, nodeC);
graph.addEdge(nodeC, nodeD);
graph.addEdge(nodeD, nodeE);

// Check if nodes are connected
const connected = graph.areNodesConnected(nodeA, nodeB); // true

// Get neighbors of a node
const neighbors = graph.getNeighbors(nodeA); // [nodeB]

// Find shortest path from A to C
const { path, distance } = graph.shortestPathDijkstra(nodeA, nodeC);

const aStarResults = graph.astar(nodeA, nodeB);
```
051
Excalibur.js @excaliburjs.com · 27/06/2025
🧩 New ECS feature to improve Query options just landed in main Excalibur thanks to @mattjennin.gs! Latest alpha `npm install excalibur@next` Queries can now take additional options to filter in/out by components or tags! This is huge for our ECS fans out there and a long requested feature!
Code Snippet: 

```typescript
const query = new Query({
  // all fields are optional
  components: {
    all: [ComponentA, ComponentB] as const, // important for type safety!
    any: [ComponentC, ComponentD] as const, // important for type safety!
    not: [ComponentE]
  },
  tags: {
    all: ['tagA', 'tagB'],
    any: ['tagC', 'tagD'],
    not: ['tagE']
  }
})
```
021
Excalibur.js @excaliburjs.com · 03/06/2025
Good News everyone! A new version Excalibur Dev Tools Extension had been deployed to the Chrome/FF web stores!!! Release: github.com/excaliburjs/... Chrome: chromewebstore.google.com/detail/excal... FF: addons.mozilla.org/en-US/firefo...
Futurama character, Professor Farnsworth saying "Good news, Everyone!"
131
Excalibur.js @excaliburjs.com · 23/08/2024
Hi friends! Excalibur.js is at 2D Con in Bloomington Minnesota! Come by and check out the booth we have LOOOOTS of stickers. #excaliburjs #javascript #typescript #gamedev
Excalibur.js 2DCon booth
041
Excalibur.js @excaliburjs.com · 05/07/2024
Have you been looking for a multiplayer solution for your web games? Check out MassiveRealm, a low effort way to add large scale multiplayer to your games. Then have new official Excalibur.js samples 🥰 github.com/MassiveRealm... docs.massiverealm.com/usage/ #gamedev #typescript #multiplayer
Integrate MassiveRealm with playcanvas, excalibur, react, and vue.js examples
011
Excalibur.js @excaliburjs.com · 21/06/2024
New blog post from Justin Young about Cellular Automata! This technique is mega useful for doing level procedural generation, simulating natural processes like spreading liquid, and doing those fun sand simulations! #gamedev #excaliburjs dev.to/excaliburjs/...
Cellular Automata procedural generation
041