Skip to main content
skill Claude Code CX Codex Cursor GitHub Copilot

v3-to-v4-migration — Claude Code skill: what it does, how to install

Guides migration from Phaser 3 to Phaser 4. Explains renderer architecture changes, unified filters, and tint system updates.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add phaserjs/phaser --skill v3-to-v4-migration -a claude-code
Open on GitHub

What v3-to-v4-migration does

This skill guides developers through upgrading game projects from Phaser 3 to Phaser 4. The biggest change is the WebGL renderer. Phaser 4 removes the old pipeline architecture and replaces it with RenderNode, where each node handles a single task. Standard sprites and tilemaps work without changes, but custom pipelines require a complete rewrite registered via RenderConfig#renderNodes.

Direct gl calls in v4 disrupt WebGLGlobalWrapper and cause state issues. For low-level WebGL access, you must use an Extern game object. Phaser 4 also unifies FX and masks into a single filter system, removes BitmapMask, and replaces setTintFill() with setTintMode().

What it helps with

  • rewrite custom WebGL pipelines into RenderNode classes
  • convert v3 preFX and masks to the unified Filter system
  • replace deprecated setTintFill calls with setTintMode
  • update ColorMatrix method calls to the nested colorMatrix property

Example prompts for the agent

  • Show me how to update setTintFill to Phaser 4 tint modes
  • How do I convert a BitmapMask into a Filter in v4?
  • Explain how to migrate a custom WebGL pipeline to a render node

How to install v3-to-v4-migration

1Skills CLI (Vercel)

npx skills add phaserjs/phaser --skill v3-to-v4-migration -a claude-code

2Manually: put the files in place

~/.claude/skills/v3-to-v4-migration/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/v3-to-v4-migration/

From the same set25

The whole set →
game-setup-and-config phaserjs Guides agent setup for Phaser 4 instances and GameConfig options. Useful when configuring renderers, canvas scaling, FPS caps, and pixel art settings. Claude Code CX Codex Cursor +1 1,200installs sprites-and-images phaserjs Guides agents on creating Sprite and Image objects in Phaser 4. Explains factory methods, texture frames, mixin components, and visual transforms. Claude Code CX Codex Cursor +1 1,100installs animations phaserjs Skill for creating and controlling sprite animations in Phaser 4. Covers spritesheet and atlas loading, animation creation via AnimationManager, playback, pause, chaining, and events. Claude Code CX Codex Cursor +1 1,000installs tilemaps phaserjs Guides Phaser 4 tilemap work, from loading Tiled maps to creating layers and tile collision. Use it while building tile-based game levels. Claude Code CX Codex Cursor +1 962installs v4-new-features phaserjs Skill for learning Phaser 4 updates: Filters replace FX, RenderNodes, new game objects (CaptureFrame, Gradient, Noise, SpriteGPULayer), and tint modes. Helps navigate the rewritten WebGL engine. Claude Code CX Codex Cursor +1 951installs scenes phaserjs A Phaser 4 scene reference for your coding agent: lifecycle order, transitions, parallel scenes, and the ScenePlugin queue that fires a frame later. Claude Code CX Codex Cursor +1 942installs audio-and-sound phaserjs Adds audio loading, background music, volume controls, and spatial audio to Phaser 4 games using SoundManager and the Web Audio API. Claude Code CX Codex Cursor +1 938installs scale-and-responsive phaserjs A skill to set up responsive scaling for Phaser 4 games: choose a scale mode, center the canvas, enable fullscreen, and handle window resize events. Claude Code CX Codex Cursor +1 910installs

Similar

level-design gamedev-skills Plans playable game levels from blockout through playtesting, covering routes, pacing, gates and encounters. Use it when working on whiteboxes, critical paths or room flow. Claude Code CX Codex Cursor +1 7,500installs camera-systems gamedev-skills Engine-neutral patterns for 2D and 3D game cameras: smooth follow, deadzones, look-ahead, bounds clamping, and third-person collision. Claude Code CX Codex Cursor +1 7,100installs audio-design gamedev-skills A skill that treats game audio as a mixer graph: buses, gain in decibels, sidechain ducking, adaptive music and beat-synced events. Samples use Godot 4.7, Unity gets notes. Claude Code CX Codex Cursor +1 7,100installs performance-optimization gamedev-skills A skill that turns “the game runs slow” into a measured bottleneck and a specific fix: profile first, then pool objects, batch draw calls, cut allocations. Claude Code CX Codex Cursor +1 7,100installs orbit-card heygen-com Adds a 10-second 1920×1080 HyperFrames motion block where a single feature card orbits a dot sphere using exported Blender camera paths. Claude Code CX Codex Cursor +1 9,800installs sdf earthtojake This skill authors and validates SDFormat files for models and worlds, then helps prepare them for simulator handoff. Claude Code CX Codex Cursor +1 10,500installs urdf earthtojake This skill helps create, validate, and debug URDF robot descriptions. Use it when working with links, joints, geometry, meshes, or inertial data. Claude Code CX Codex Cursor +1 10,400installs hatch-pet official openai Creates and packages animated pets and spritesheets for Codex. Use it to turn a character concept, reference image, or brand cues into a pet. Claude Code CX Codex Cursor +1 3,300installs

Questions about v3-to-v4-migration

How to install v3-to-v4-migration in Claude Code?

Run npx skills add phaserjs/phaser --skill v3-to-v4-migration -a claude-code in your terminal.

What does the v3-to-v4-migration skill do?

It provides a step-by-step reference for breaking changes between Phaser 3 and Phaser 4. It details the new renderer nodes, filter architecture, tint modes, and camera updates.

How did mask handling change in Phaser 4?

The BitmapMask class was removed and merged into the unified filter system. You now attach masks using sprite.filters.internal.addMask(maskObject).

Source text

SKILL.md · MIT
---
name: v3-to-v4-migration
description: "Use this skill when migrating a Phaser 3 project to Phaser 4, or when a user asks about breaking changes, API differences, or how to update their v3 code. Covers renderer changes (pipelines to render nodes), FX/masks to filters, tint system, camera matrix, texture coordinates, DynamicTexture, shaders, lighting, removed game objects, and a full migration checklist. Triggers on: migrate, upgrade, v3 to v4, breaking changes, Phaser 3 to 4, migration guide, update from v3."
---

# Phaser v3 to v4 Migration Guide

This guide covers everything you need to change when upgrading a Phaser v3 project to Phaser v4. It is organized from highest-impact changes to smaller details, so you can work through it top-to-bottom.

**Related skills:** ../v4-new-features/SKILL.md, ../game-setup-and-config/SKILL.md, ../filters-and-postfx/SKILL.md

---

## Table of Contents

1. [Renderer: Pipelines to Render Nodes](#1-renderer-pipelines-to-render-nodes)
2. [Canvas Renderer Deprecated](#2-canvas-renderer-deprecated)
3. [FX and Masks are now Filters](#3-fx-and-masks-are-now-filters)
4. [Tint System](#4-tint-system)
5. [Camera System](#5-camera-system)
6. [Texture Coordinates and GL Orientation](#6-texture-coordinates-and-gl-orientation)
7. [DynamicTexture and RenderTexture](#7-dynamictexture-and-rendertexture)
8. [Shader API](#8-shader-api)
9. [GLSL Loading](#9-glsl-loading)
10. [Lighting](#10-lighting)
11. [TileSprite](#11-tilesprite)
12. [Graphics and Shape](#12-graphics-and-shape)
13. [Geometry: Point Replaced by Vector2](#13-geometry-point-replaced-by-vector2)
14. [Math Constants](#14-math-constants)
15. [Data Structures](#15-data-structures)
16. [Round Pixels](#16-round-pixels)
17. [Removed Game Objects](#17-removed-game-objects)
18. [Removed Plugins and Entry Points](#18-removed-plugins-and-entry-points)
19. [Removed Utilities and Polyfills](#19-removed-utilities-and-polyfills)
20. [Spine Plugins](#20-spine-plugins)
21. [Miscellaneous Breaking Changes](#21-miscellaneous-breaking-changes)
22. [Migration Checklist](#migration-checklist)

---

## 1. Renderer: Pipelines to Render Nodes

Phaser v4 contains a brand-new WebGL renderer. The entire rendering pipeline from v3 has been replaced. This is the single biggest change in v4.

**What was removed:**

The v3 `Pipeline` system has been removed entirely. Pipelines frequently held multiple responsibilities (e.g. the Utility pipeline handled various different rendering tasks) and each had to manage WebGL state independently, leading to conflicts where one pipeline could break another's assumptions.

**What replaced it:**

The new `RenderNode` architecture. Each render node handles a single rendering task, making the system more maintainable. All render nodes have a `run` method, and some have a `batch` method to assemble state from several sources before invoking `run`.

**What this means for you:**

- If your game only uses the standard Phaser API (Sprites, Text, Tilemaps, etc.), the new renderer should work transparently.
- If you wrote **custom WebGL pipelines** in v3, they will need to be rewritten as render nodes. Use `RenderConfig#renderNodes` to register custom render nodes at boot.
- If you accessed `WebGLRenderer` internals directly, be aware that many internal properties have been removed or restructured:
  - `WebGLRenderer.textureIndexes` is removed. Use `glTextureUnits.unitIndices` instead.
  - `WebGLRenderer#genericVertexBuffer` and `#genericVertexData` are removed (freeing ~16MB RAM/VRAM). `BatchHandler` render nodes now create their own WebGL data buffers.
  - `WebGLAttribLocationWrapper` is removed.
- Do not make direct WebGL `gl` calls in a Phaser v4 game. This can change the WebGL state without updating the internal `WebGLGlobalWrapper`, causing unpredictable behavior. If you need direct WebGL access, use an `Extern` game object, which resets state after it finishes.

---

## 2. Canvas Renderer Deprecated

The Canvas renderer is still available but should be considered deprecated. Canvas rendering does not support any of the WebGL techniques used in v4's advanced rendering features. As WebGL support is effectively baseline today, we recommend WebGL for all new projects.

Canvas retains one advantage: 27 blend modes vs WebGL's 4 native modes (NORMAL, ADD, MULTIPLY, SCREEN). In v4, the new `Blend` filter can recreate all Canvas blend modes in WebGL, though it requires indirection through a `CaptureFrame`, `DynamicTexture`, or similar.

---

## 3. FX and Masks are now Filters

This is one of the most impactful changes for v3 users who relied on the FX or Mask systems.

**What changed:**

FX (pre and post) and Masks have been unified into a single **Filter** system. A Filter takes an input image and produces an output image, usually via a single shader. All filters are mutually compatible.

**Key differences from v3:**

- **No more preFX/postFX distinction.** Filters are divided into **internal** (affects just the object) and **external** (affects the object in its rendering context, usually the full screen) lists.
- **No more object restrictions.** In v3, only certain objects supported FX. In v4, filters can be applied to **any game object or scene camera**, including `Extern` objects.
- **`BitmapMask` removed.** Use the new `Mask` filter instead. `GeometryMask` remains available in Canvas only.

**Removed derived FX and their replacements:**

| v3 FX | v4 Replacement |
|---|---|
| `Bloom` | `Phaser.Actions.AddEffectBloom()` |
| `Shine` | `Phaser.Actions.AddEffectShine()` |
| `Circle` | `Phaser.Actions.AddMaskShape()` |
| `Gradient` | `Gradient` game object |

**ColorMatrix change:**

The `ColorMatrix` filter shifted its color management methods onto a `colorMatrix` property:

```js
// v3
colorMatrix.sepia();

// v4
colorMatrix.colorMatrix.sepia();
```

**Mask migration:**

```js
// v3 - BitmapMask
const mask = new Phaser.Display.Masks.BitmapMask(scene, maskObject);
sprite.setMask(mask);

// v4 - Mask filter
sprite.filters.internal.addMask(maskObject);
```

---

## 4. Tint System

The tint system has been overhauled with a new API and additional blend modes.

**Removed:**
- `tintFill` property
- `setTintFill()` method

**Replacement:**
- Use the new `tintMode` property or `setTintMode()` method to control tint blending.
- `Phaser.TintModes` enumerates the available modes: `MULTIPLY`, `FILL`, `ADD`, `SCREEN`, `OVERLAY`, `HARD_LIGHT`.

**How to convert your code:**

```js
// v3
sprite.setTintFill(0xff0000);

// v4
sprite.setTint(0xff0000).setTintMode(Phaser.TintModes.FILL);
```

**Other tint changes:**
- `tint` and `setTint()` now purely affect color settings. In v3, calling these would silently deactivate fill mode.
- FILL mode now treats partial alpha correctly.
- BitmapText tinting now works correctly.

---

## 5. Camera System

The camera matrix system has been rewritten. If you only use standard camera properties (`scrollX`, `scrollY`, `zoom`, `rotation`), your code should work without changes. However, if you access camera matrices directly, you must update your code.

**What changed:**

| v3 | v4 |
|---|---|
| `Camera#matrix` = position + rotation + zoom | `Camera#matrix` = rotation + zoom + scroll (no position) |
| Scroll appended separately | Scroll is part of `Camera#matrix` |
| No equivalent | `Camera#matrixExternal` = position only |
| No equivalent | `Camera#matrixCombined` = `matrix` * `matrixExternal` |

**If you manipulated scroll factors manually:**

```js
// v3
spriteMatrix.e -= camera.scrollX * src.scrollFactorX;

// v4
TransformMatrix.copyWithScrollFactorFrom(matrix, scrollX, scrollY, scrollFactorX, scrollFactorY);
```

**Other camera changes:**
- `GetCalcMatrix()` now takes an additional `ignoreCameraPosition` parameter.
- `GetCalcMatrixResults` now includes a `matrixExternal` property.

---

## 6. Texture Coordinates and GL Orientation

Phaser v3 used top-left orientation for textures, which caused mismatches internally (framebuffers drawn upside-down, then flipped). Phaser v4 uses GL orientation throughout, where Y=0 is at the bottom.

**Action required:**
- If you use **compressed textures**, they must be re-compressed with the Y axis starting at the bottom and increasing upwards. This is usually available as a "flip Y" option in your texture compression software.
- Standard image textures (PNG, JPG, etc.) are handled automatically -- no action needed.
- If you write **custom shaders**, note that texture coordinates now use GL conventions where Y=0 is at the bottom of the image.

---

## 7. DynamicTexture and RenderTexture

In v3, `DynamicTexture` allowed you to define batches and perform intricate drawing operations directly. In v4, many of these complex methods have been removed in favor of using the standard rendering system, which handles batching automatically.

**Breaking change:** `DynamicTexture` and `RenderTexture` must now call `render()` to execute all buffered drawing commands. Previously, draw commands were executed immediately.

**New capabilities:**
- `DynamicTexture#preserve()` keeps the command buffer for reuse after rendering, allowing you to re-render commands that draw changing game objects.
- `DynamicTexture#callback()` inserts a callback to run during command buffer execution.
- `DynamicTexture#capture` renders game objects more accurately than `draw`, capturing the current camera view.
- `RenderTexture.renderMode` property: `"render"` (draw like an Image), `"redraw"` (update texture during render loop without drawing), or `"all"` (both). The `"redraw"` mode enables updating textures mid-render-loop for same-frame shader outputs.
- `TextureManager#addDynamicTexture` now has a `forceEven` parameter.

---

## 8. Shader API

The `Shader` game object has been significantly rewritten. Existing v3 shaders will need to be updated.

**What changed:**
- The construction signature now takes a config object (`ShaderQuadConfig`) instead of individual parameters.
- Shadertoy-style uniforms (resolution, time, etc.) are no longer set automatically. Encode them into your configuration if needed.
- Texture coordinates now use GL conventions (Y=0 at bottom).
- New `Shader#setUniform(name, value)` method for setting program uniforms individually.
- New `Shader#renderImmediate` method for rendering outside the regular render loop.

---

## 9. GLSL Loading

The way Phaser loads GLSL code has changed:

- GLSL code is no longer classified as "fragment" or "vertex" when loaded. Under the new system it could be either, or both. You load shaders separately and combine them when creating a Shader.
- Custom templates have been replaced with `#pragma` preprocessor directives, which are valid GLSL and compatible with automated syntax checkers. The pragmas are removed before compilation.

---

## 10. Lighting

Lighting has been simplified and enhanced.

**How to convert your code:**

```js
// v3 - Pipeline-based lighting
sprite.setPipeline('Light2D');

// v4 - Simple method call
sprite.setLighting(true);
```

**Other lighting changes:**
- Lighting is available on many game objects: BitmapText, Blitter, Graphics, Shape, Image, Sprite, Particles, SpriteGPULayer, Stamp, Text, TileSprite, Video, TilemapLayer, and TilemapGPULayer.
- Objects can now cast **self-shadows** using a shader that simulates shadows from surface features based on texture brightness. Configurable game-wide or per-object.
- Lights now have a `z` value to set height explicitly, replacing the implicit height based on game resolution from v3.
- Note: lighting changes the shader, which breaks render batches.
- You can also use the `ImageLight` filter for image-based lighting, but it is separate from the core lighting system.

---

## 11. TileSprite

TileSprite has been internally rewritten to use a new shader that manually controls texture coordinate wrapping instead of relying on WebGL texture wrapping parameters.

**What changed:**
- `TileSprite` no longer supports texture cropping.
- TileSprite now assigns default dimensions to each dimension separately.

**New capabilities:**
- TileSprite now supports **texture frames** within atlases and spritesheets (v3 could only repeat the entire texture file).
- New `tileRotation` property allows rotating the repeating texture.
- Works correctly with compressed textures, non-power-of-two textures, and DynamicTextures (all had issues in v3).

---

## 12. Graphics and Shape

- `Graphics` has a new `pathDetailThreshold` property (also available as a game config option) that skips vertices within a certain distance of one another, improving performance on complex curves in small areas.
- `Grid` shape has renamed properties: it now uses **stroke** instead of **outline**, matching the conventions of other Shape objects. Grid also has new controls for rendering gutters between cells and whether to draw outlines on the outside of the grid or just between cells.
- `Rectangle` now supports rounded corners.

---

## 13. Geometry: Point Replaced by Vector2

The `Geom.Point` class and all related functions have been removed. Use `Vector2` instead.

**Quick reference for method replacements:**

| v3 (`Point`) | v4 (`Vector2` / `Math`) |
|---|---|
| `Point.Ceil` | `Vector2.ceil` |
| `Point.Floor` | `Vector2.floor` |
| `Point.Clone` | `Vector2.clone` |
| `Point.CopyFrom(src, dest)` | `dest.copy(src)` |
| `Point.Equals` | `Vector2.equals` |
| `Point.GetCentroid` | `Math.GetCentroid` |
| `Point.GetMagnitude` | `Vector2.length` |
| `Point.GetMagnitudeSq` | `Vector2.lengthSq` |
| `Point.Invert` | `Vector2.invert` |
| `Point.Negative` | `Vector2.negate` |
| `Point.SetMagnitude` | `Vector2.setLength` |
| `Point.Project` | `Vector2.project` |
| `Point.ProjectUnit` | `Vector2.projectUnit` |
| `Point.Interpolate` | `Math.LinearXY` |
| `Point.GetRectangleFromPoints` | `Math.GetVec2Bounds` |

**All geometry classes now return Vector2 instead of Point:**

The following classes and their static helper functions (`getPoint`, `getPoints`, `getRandomPoint`, `CircumferencePoint`, `Random`, etc.) all return `Vector2` instances:

- `Geom.Circle`
- `Geom.Ellipse`
- `Geom.Line`
- `Geom.Polygon`
- `Geom.Rectangle`
- `Geom.Triangle`

If you have code that checks `instanceof Phaser.Geom.Point`, update it to check for `Phaser.Math.Vector2`.

---

## 14. Math Constants

| v3 | v4 | Notes |
|---|---|---|
| `Math.TAU` (was PI / 2) | `Math.TAU` (now PI * 2) | **Value changed!** This is now the correct mathematical tau. |
| `Math.PI2` | Removed | Use `Math.TAU` instead. |
| No equivalent | `Math.PI_OVER_2` | New constant for PI / 2 (what v3's `TAU` incorrectly was). |

**Action required:** If you used `Math.TAU` in v3 expecting PI / 2, replace it with `Math.PI_OVER_2`. If you used `Math.PI2`, replace it with `Math.TAU`.

---

## 15. Data Structures

**`Phaser.Struct.Set`** has been replaced with a native JavaScript `Set`. Methods like `iterateLocal` are gone. Use standard `Set` methods (`forEach`, `has`, `add`, `delete`, etc.).

**`Phaser.Struct.Map`** has been replaced with a native JavaScript `Map`. Methods like `contains` and `setAll` are gone. Use standard `Map` methods (`has`, `get`, `set`, `delete`, etc.).

---

## 16. Round Pixels

The `roundPixels` game config option now defaults to `false` (it was `true` in v3). The behavior has also been refined:

- `roundPixels` only operates when objects are axis-aligned and unscaled, preventing flicker on transforming objects.
- For per-object control, use the new `GameObject#vertexRoundMode` property:
  - `"off"` -- Never round.
  - `"safe"` -- Round only when the transform is position-only (no scale/rotation).
  - `"safeAuto"` (default) -- Like `"safe"`, but only when the camera has `roundPixels` enabled.
  - `"full"` -- Always round (can cause wobble on rotated sprites, PS1-style).
  - `"fullAuto"` -- Like `"full"`, but only when the camera has `roundPixels` enabled.
- The `TransformMatrix#setQuad` `roundPixels` parameter has been removed.

---

## 17. Removed Game Objects

- **`Mesh` and `Plane`** have been removed. These were limited 3D implementations; proper 3D support is planned for the future.

---

## 18. Removed Plugins and Entry Points

The following have been completely removed:

- **Camera3D Plugin**
- **Layer3D Plugin**
- **Facebook Plugin** detection constants
- **`phaser-ie9.js`** entry point (IE9 is no longer supported)

---

## 19. Removed Utilities and Polyfills

**`Create.GenerateTexture`** and all Create Palettes / the `create` folder have been removed. `TextureManager.generate` is also removed as a result.

**`Math.SinCosTableGenerator`** has been removed.

**All legacy polyfills removed:**
- `Array.forEach`
- `Array.isArray`
- `AudioContextMonkeyPatch`
- `console`
- `Math.trunc`
- `performance.now`
- `requestAnimationFrame`
- `Uint32Array`

Modern browsers provide all of these natively.

---

## 20. Spine Plugins

The Spine 3 and Spine 4 plugins bundled with Phaser are no longer updated. Use the official Phaser Spine plugin created by Esoteric Software instead.

---

## 21. Miscellaneous Breaking Changes

- **`Shader#setTextures()`** now replaces the texture array rather than adding to it. If you were calling it multiple times to build up textures, call it once with the full array.
- **`DOMElement`** now throws an error if it has no container. Ensure your DOM elements have a parent container.
- **`GameObject#enableLighting`** can now be set even if the scene light manager is not enabled. The manager must still be enabled for lights to render, but the flag itself is no longer gated.
- **Gamepad `Button` class** now accepts an `isPressed` parameter to initialize state correctly across scene transitions.
- **`BatchHandlerConfig#createOwnVertexBuffer`** type property has been removed.
- **`WebGLRenderer#genericVertexBuffer`** and **`#genericVertexData`** have been removed (freeing ~16MB RAM/VRAM).

---

## Migration Checklist

Use this checklist to track your migration progress:

- [ ] Update `npm install phaser@4` (or equivalent)
- [ ] Replace any custom WebGL pipelines with render nodes
- [ ] Replace `BitmapMask` usage with the `Mask` filter
- [ ] Replace removed FX (`Bloom`, `Shine`, `Circle`, `Gradient`) with their Action/GameObject equivalents
- [ ] Update `ColorMatrix` calls (methods moved to `.colorMatrix` property)
- [ ] Replace any `setTintFill()` calls with `setTint().setTintMode(Phaser.TintModes.FILL)`
- [ ] Replace `Geom.Point` usage with `Vector2`
- [ ] Update `Math.TAU` usage (now equals PI * 2, not PI / 2)
- [ ] Replace `Math.PI2` with `Math.TAU`
- [ ] Replace `Phaser.Struct.Set` with native `Set`
- [ ] Replace `Phaser.Struct.Map` with native `Map`
- [ ] Add `render()` calls to `DynamicTexture` / `RenderTexture` usage
- [ ] Re-compress any compressed textures for new Y-axis orientation
- [ ] Update any direct `Camera#matrix` access to use the new matrix system
- [ ] Update `Shader` game objects to use new `ShaderQuadConfig` constructor
- [ ] Update GLSL loading code (no fragment/vertex classification, `#pragma` directives)
- [ ] Replace `sprite.setPipeline('Light2D')` with `sprite.setLighting(true)`
- [ ] Update light height code to use new `z` property
- [ ] Remove any `TileSprite` texture cropping code
- [ ] Update `Grid` shape code (`outline` properties renamed to `stroke`)
- [ ] Remove any `Mesh` or `Plane` usage
- [ ] Replace any Phaser-bundled Spine plugin usage with the official Esoteric Software plugin
- [ ] Remove any reliance on `Create.GenerateTexture` or `TextureManager.generate`
- [ ] Test `roundPixels` behavior (now defaults to `false`)
- [ ] Remove any usage of removed polyfills, plugins, or entry points
- [ ] Verify custom shader texture coordinates (Y=0 is now at bottom)

© phaserjs · MIT · phaserjs/phaser

See also

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor