/pixijs-migration-v8
Use this skill when upgrading to PixiJS v8 from v7 or diagnosing broken v7 code after an upgrade. Covers async app.init, single pixi.js package (deprecated @pixi/* sub-packages), Graphics shape-then-fill, BaseTexture → TextureSource, shader/uniform rework,
$ npx -y skills add pixijs/pixijs-skills --skill pixijs-migration-v8 --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/pixijs-migration-v8
Context preview
The summary Claude sees to decide when to auto-load this skill.
Use this skill when upgrading to PixiJS v8 from v7 or diagnosing broken v7 code after an upgrade. Covers async app.init, single pixi.js package (deprecated @pixi/* sub-packages), Graphics shape-then-fill, BaseTexture → TextureSource, shader/uniform rework,
SKILL.md
pixijs-migration-v8.SKILL.mdname: pixijs-migration-v8
description: "Use this skill when upgrading to PixiJS v8 from v7 or diagnosing broken v7 code after an upgrade. Covers async app.init, single pixi.js package (deprecated @pixi/* sub-packages), Graphics shape-then-fill, BaseTexture → TextureSource, shader/uniform rework, ParticleContainer+Particle, constructor options objects, DisplayObject removal, settings/utils removal, Ticker signature, events rewrite. Triggers on: migrate v7, v8 breaking changes, @pixi/ import, DisplayObject, beginFill, endFill, cacheAsBitmap, BaseTexture, deprecated."
license: MIT
This skill is a breaking-change checklist for bringing a v7 codebase up to v8. Work top-down through the categories; the list maps each v7 pattern to its v8 replacement.
Quick Start
Install the single package, then port in this order: imports → Application init → Graphics → Text → events → shaders/filters → cleanup.
const app = new Application();
await app.init({ width: 800, height: 600 });
document.body.appendChild(app.canvas);
const g = new Graphics()
.rect(0, 0, 100, 100)
.fill({ color: 0xff0000 })
.stroke({ width: 2, color: 0x000000 });
app.stage.addChild(g);**Related skills:** `pixijs-application` (async init), `pixijs-scene-graphics` (new fill/stroke API), `pixijs-custom-rendering` (shader rework), `pixijs-scene-text` (Text constructor changes), `pixijs-performance` (destroy patterns).
Migration Checklist: v7 to v8
Work through each category. Each item shows the expected v8 pattern and the v7 pattern that must be replaced.
Initialization
**Async app.init()** -- Expected:
const app = new Application();
await app.init({ width: 800, height: 600 });
document.body.appendChild(app.canvas);Fail: passing options to `new Application({...})` and using synchronously.
**app.canvas replaces app.view** -- `app.view` emits a deprecation warning.
**Application type parameter** -- Expected: `new Application<Renderer<HTMLCanvasElement>>()`. Fail: `new Application<HTMLCanvasElement>()`.
Imports
**Single package** -- Expected:
import { Sprite, Application, Assets, Graphics } from "pixi.js";Fail: importing from any of the deprecated v7 core `@pixi/*` sub-packages (see list below). Supplemental packages like `@pixi/sound` are still valid and should continue to be used.
Deprecated `@pixi/*` packages (never use, any version): `@pixi/accessibility`, `@pixi/app`, `@pixi/assets`, `@pixi/compressed-textures`, `@pixi/core`, `@pixi/display`, `@pixi/events`, `@pixi/extensions`, `@pixi/extract`, `@pixi/filter-alpha`, `@pixi/filter-blur`, `@pixi/filter-color-matrix`, `@pixi/filter-displacement`, `@pixi/filter-fxaa`, `@pixi/filter-noise`, `@pixi/graphics`, `@pixi/mesh`, `@pixi/mesh-extras`, `@pixi/mixin-cache-as-bitmap`, `@pixi/mixin-get-child-by-name`, `@pixi/mixin-get-global-position`, `@pixi/particle-container`, `@pixi/prepare`, `@pixi/sprite`, `@pixi/sprite-animated`, `@pixi/sprite-tiling`, `@pixi/spritesheet`, `@pixi/text`, `@pixi/text-bitmap`, `@pixi/text-html`.
**Custom builds** -- Set `skipExtensionImports: true` and import only needed extensions:
import "pixi.js/graphics";
import "pixi.js/text";
import "pixi.js/events";
import { Application } from "pixi.js";
await app.init({ skipExtensionImports: true });Note: `manageImports: false` is still accepted but `@deprecated since 8.1.6`; prefer `skipExtensionImports: true`.
**Extensions not auto-imported** (require explicit import even with default auto-imports enabled): `pixi.js/advanced-blend-modes`, `pixi.js/unsafe-eval`, `pixi.js/prepare`, `pixi.js/math-extras`, `pixi.js/dds`, `pixi.js/ktx`, `pixi.js/ktx2`, `pixi.js/basis`.
**Community filters** -- Expected: `import { AdjustmentFilter } from 'pixi-filters/adjustment'`. Fail: `@pixi/filter-adjustment`.
Graphics API
**Shape-then-fill** -- Expected:
const g = new Graphics().rect(50, 50, 100, 100).fill(0xff0000);
Fail: `beginFill(0xff0000).drawRect(50, 50, 100, 100).endFill()`.
**Renamed shape methods:**
| v7 | v8 | | -------------------- | ------------- | | `drawRect` | `rect` | | `drawCircle` | `circle` | | `drawEllipse` | `ellipse` | | `drawPolygon` | `poly` | | `drawRoundedRect` | `roundRect` | | `drawStar` | `star` | | `drawRegularPolygon` | `regularPoly` | | `drawRoundedPolygon` | `roundPoly` | | `drawRoundedShape` | `roundShape` | | `drawChamferRect` | `chamferRect` | | `drawFilletRect` | `filletRect` |
**Fill replaces beginFill/beginTextureFill** -- Expected:
graphics
.rect(0, 0, 100, 100)
.fill({ texture: Texture.WHITE, alpha: 0.5, color: 0xff0000 });Fail: `beginFill(color, alpha)` or `beginTextureFill({ texture, alpha, color })`.
**Stroke replaces lineStyle** -- Expected:
graphics.rect(0, 0, 100, 100).fill("blue").stroke({ width: 2, color: "white" });Fail: `lineStyle(2, 'white')` or `lineTextureStyle({ texture, width, color })`.
**Holes use cut()** -- Expected:
graphics.rect(0, 0, 100, 100).fill(0x00ff00).circle(50, 50, 20).cut();
Fail: `beginHole()` / `endHole()`.
**GraphicsContext replaces GraphicsGeometry** -- Expected:
const context = new GraphicsContext().rect(0, 0, 100, 100).fill(0xff0000);
const g1 = new Graphics(context);
const g2 = new Graphics(context);
Fail: `new Graphics(graphics.geometry)`.
Text
**Options object constructor** -- Expected:
const text = new Text({ text: "Hello", style: { fontSize: 24 } });
const bmp = new BitmapText({ text: "Hello", style: { fontFamily: "MyFont" } });
const html = new HTMLText({ text: "<b>Hello</b>", style: { fontSize: 24 } });Fail: `new Text('Hello', { fontSize: 24 })` (positional args).
**Bitmap font loading** -- Must `import 'pixi.js/text-bitmap'` before `Assets.load('font.fnt')`.
Sprites / Mesh
**Texture.from no longer loads URLs** -- Must call `await Assets.load('imag
Read more
name: pixijs-migration-v8 description: "Use this skill when upgrading to PixiJS v8 from v7 or diagnosing broken v7 code after an upgrade. Covers async app.init, single pixi.js package (deprecated @pixi/* sub-packages), Graphics shape-then-fill, BaseTexture → TextureSource, shader/uniform rework, ParticleContainer+Particle, constructor options objects, DisplayObject removal, settings/utils removal, Ticker signature, events rewrite. Triggers on: migrate v7, v8 breaking changes, @pixi/ import, DisplayObject, beginFill, endFill, cacheAsBitmap, BaseTexture, deprecated." license: MIT
This skill is a breaking-change checklist for bringing a v7 codebase up to v8. Work top-down through the categories; the list maps each v7 pattern to its v8 replacement.
Quick Start
Install the single package, then port in this order: imports → Application init → Graphics → Text → events → shaders/filters → cleanup.
const app = new Application();
await app.init({ width: 800, height: 600 });
document.body.appendChild(app.canvas);
const g = new Graphics()
.rect(0, 0, 100, 100)
.fill({ color: 0xff0000 })
.stroke({ width: 2, color: 0x000000 });
app.stage.addChild(g);**Related skills:** `pixijs-application` (async init), `pixijs-scene-graphics` (new fill/stroke API), `pixijs-custom-rendering` (shader rework), `pixijs-scene-text` (Text constructor changes), `pixijs-performance` (destroy patterns).
Migration Checklist: v7 to v8
Work through each category. Each item shows the expected v8 pattern and the v7 pattern that must be replaced.
Initialization
**Async app.init()** -- Expected:
const app = new Application();
await app.init({ width: 800, height: 600 });
document.body.appendChild(app.canvas);Fail: passing options to `new Application({...})` and using synchronously.
**app.canvas replaces app.view** -- `app.view` emits a deprecation warning.
**Application type parameter** -- Expected: `new Application<Renderer<HTMLCanvasElement>>()`. Fail: `new Application<HTMLCanvasElement>()`.
Imports
**Single package** -- Expected:
import { Sprite, Application, Assets, Graphics } from "pixi.js";Fail: importing from any of the deprecated v7 core `@pixi/*` sub-packages (see list below). Supplemental packages like `@pixi/sound` are still valid and should continue to be used.
Deprecated `@pixi/*` packages (never use, any version): `@pixi/accessibility`, `@pixi/app`, `@pixi/assets`, `@pixi/compressed-textures`, `@pixi/core`, `@pixi/display`, `@pixi/events`, `@pixi/extensions`, `@pixi/extract`, `@pixi/filter-alpha`, `@pixi/filter-blur`, `@pixi/filter-color-matrix`, `@pixi/filter-displacement`, `@pixi/filter-fxaa`, `@pixi/filter-noise`, `@pixi/graphics`, `@pixi/mesh`, `@pixi/mesh-extras`, `@pixi/mixin-cache-as-bitmap`, `@pixi/mixin-get-child-by-name`, `@pixi/mixin-get-global-position`, `@pixi/particle-container`, `@pixi/prepare`, `@pixi/sprite`, `@pixi/sprite-animated`, `@pixi/sprite-tiling`, `@pixi/spritesheet`, `@pixi/text`, `@pixi/text-bitmap`, `@pixi/text-html`.
**Custom builds** -- Set `skipExtensionImports: true` and import only needed extensions:
import "pixi.js/graphics";
import "pixi.js/text";
import "pixi.js/events";
import { Application } from "pixi.js";
await app.init({ skipExtensionImports: true });Note: `manageImports: false` is still accepted but `@deprecated since 8.1.6`; prefer `skipExtensionImports: true`.
**Extensions not auto-imported** (require explicit import even with default auto-imports enabled): `pixi.js/advanced-blend-modes`, `pixi.js/unsafe-eval`, `pixi.js/prepare`, `pixi.js/math-extras`, `pixi.js/dds`, `pixi.js/ktx`, `pixi.js/ktx2`, `pixi.js/basis`.
**Community filters** -- Expected: `import { AdjustmentFilter } from 'pixi-filters/adjustment'`. Fail: `@pixi/filter-adjustment`.
Graphics API
**Shape-then-fill** -- Expected:
const g = new Graphics().rect(50, 50, 100, 100).fill(0xff0000);
Fail: `beginFill(0xff0000).drawRect(50, 50, 100, 100).endFill()`.
**Renamed shape methods:**
| v7 | v8 | | -------------------- | ------------- | | `drawRect` | `rect` | | `drawCircle` | `circle` | | `drawEllipse` | `ellipse` | | `drawPolygon` | `poly` | | `drawRoundedRect` | `roundRect` | | `drawStar` | `star` | | `drawRegularPolygon` | `regularPoly` | | `drawRoundedPolygon` | `roundPoly` | | `drawRoundedShape` | `roundShape` | | `drawChamferRect` | `chamferRect` | | `drawFilletRect` | `filletRect` |
**Fill replaces beginFill/beginTextureFill** -- Expected:
graphics
.rect(0, 0, 100, 100)
.fill({ texture: Texture.WHITE, alpha: 0.5, color: 0xff0000 });Fail: `beginFill(color, alpha)` or `beginTextureFill({ texture, alpha, color })`.
**Stroke replaces lineStyle** -- Expected:
graphics.rect(0, 0, 100, 100).fill("blue").stroke({ width: 2, color: "white" });Fail: `lineStyle(2, 'white')` or `lineTextureStyle({ texture, width, color })`.
**Holes use cut()** -- Expected:
graphics.rect(0, 0, 100, 100).fill(0x00ff00).circle(50, 50, 20).cut();
Fail: `beginHole()` / `endHole()`.
**GraphicsContext replaces GraphicsGeometry** -- Expected:
const context = new GraphicsContext().rect(0, 0, 100, 100).fill(0xff0000); const g1 = new Graphics(context); const g2 = new Graphics(context);
Fail: `new Graphics(graphics.geometry)`.
Text
**Options object constructor** -- Expected:
const text = new Text({ text: "Hello", style: { fontSize: 24 } });
const bmp = new BitmapText({ text: "Hello", style: { fontFamily: "MyFont" } });
const html = new HTMLText({ text: "<b>Hello</b>", style: { fontSize: 24 } });Fail: `new Text('Hello', { fontSize: 24 })` (positional args).
**Bitmap font loading** -- Must `import 'pixi.js/text-bitmap'` before `Assets.load('font.fnt')`.
Sprites / Mesh
**Texture.from no longer loads URLs** -- Must call `await Assets.load('imag
Official AI skills for PixiJS. These skills teach AI coding agents how to correctly use PixiJS
Repo: pixijs/pixijs-skills
Other skills on pixijs-skills.
- /pixijs-accessibility
Use this skill when adding screen reader and keyboard navigation to PixiJS v8 apps. Covers AccessibilitySystem options (enabledByDefault, debug, activateOnTab, deactivateOnMouseMove), per-container accessibility properties, shadow DOM overlay, mobile touch-hook activation.
Open skill - /pixijs-application
Use this skill when creating and configuring a PixiJS v8 Application. Covers new Application() + async app.init() options (width, height, background, antialias, resolution, autoDensity, preference, resizeTo, autoStart, sharedTicker, canvas, useBackBuffer, powerPreference,
Open skill - /pixijs-assets
Use this skill when loading and managing resources in PixiJS v8. Covers Assets.init, Assets.load/add/unload, bundles, manifests, background loading, onProgress, caching, spritesheets, video textures, web fonts, bitmap fonts, animated GIFs, compressed textures, SVG as texture or
Open skill - /pixijs-blend-modes
Use this skill when compositing display objects with blend modes in PixiJS v8. Covers standard modes (normal, add, multiply, screen, erase, min, max), advanced modes via pixi.js/advanced-blend-modes (color-burn, overlay, hard-light, etc.), batch-friendly ordering. Triggers on:
Open skill - /pixijs-color
Use this skill when creating, converting, or manipulating colors in PixiJS v8. Covers Color class input formats (hex, CSS names, RGB/HSL objects, arrays, Uint8Array), conversion methods (toHex, toNumber, toArray, toRgba), component access, setAlpha/multiply/premultiply,
Open skill - /pixijs-core-concepts
Use this skill when understanding how PixiJS v8 renders frames: the systems-and-pipes renderer, the render loop, and how the library adapts to different environments. Covers WebGLRenderer/WebGPURenderer/CanvasRenderer selection, renderer.render() pipeline, environment detection,
Open skill

