# pixijs changelog
> pixijs release notes.
- Vendor: pixijs
- Category: Games
- Official site: http://pixijs.com/
- Tracked by: What's New (https://whatsnew.fyi/product/pixijs)
- Harvested from: GitHub (pixijs/pixijs)
- Entries below: 10 (newest first)
What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog.
## Releases
### v8.19.0
- Date: 2026-06-04
- Version: v8.19.0
- Original notes: https://github.com/pixijs/pixijs/releases/tag/v8.19.0
- Permalink: https://whatsnew.fyi/product/pixijs/releases/v8.19.0
- **changed** — Container.updateTransform now applies zero scale literally instead of coercing it to 1, so passing scaleX: 0 or scaleY: 0 will hide the container matching scale.set(0, 0)
- **changed** — ParticleContainer now respects blend mode inherited from ancestors instead of only reading its local blendMode
- **changed** — FillPattern gains a textureSpace option ('global' | 'local') to control pattern tiling behavior, with global as default, and setTransform(matrix) now applies the matrix directly without inversion
- **added** — Add HTML-in-Canvas texture support via pixi.js/html-source subpath with HTMLSource and ElementImageSource for rendering live DOM elements into PixiJS textures while keeping them interactive
- **added** — Implement transientAttachment opt-in flag for MSAA RenderTextures in WebGPU to discard MSAA buffer instead of writing to memory on supported devices
- **fixed** — Fix BitmapText trailing glyph after glyph-less word-break character
- **fixed** — Fix SplitText crash when text begins with whitespace
- **fixed** — Fix TilingSprite tileRotation shearing pattern on non-square sprites
- **fixed** — Fix canvas renderer not rounding anchor offset when roundPixels is enabled
- **fixed** — Fix renderer's maxBatchableTextures not being passed to non-default batchers
- **fixed** — Handle null from getShaderSource/getShaderInfoLog on lost context
##### 💾 Download
Installation:
```bash
npm install pixi.js@8.19.0
```
Development Build:
- https://cdn.jsdelivr.net/npm/pixi.js@8.19.0/dist/pixi.js
- https://cdn.jsdelivr.net/npm/pixi.js@8.19.0/dist/pixi.mjs
Production Build:
- https://cdn.jsdelivr.net/npm/pixi.js@8.19.0/dist/pixi.min.js
- https://cdn.jsdelivr.net/npm/pixi.js@8.19.0/dist/pixi.min.mjs
Documentation:
- https://pixijs.download/v8.19.0/docs/index.html
##### Changed
https://github.com/pixijs/pixijs/compare/v8.18.1...v8.19.0
###### 🚨 Behavior Change
* fix: Container.updateTransform honors zero scale (#12044) by @Zyie in https://github.com/pixijs/pixijs/pull/12046
* `Container.updateTransform({ scaleX: 0, scaleY: 0 })` previously coerced a zero scale to `1` (the code used `opts.scaleX || 1`), so passing `0` left the container at full size. It now applies zero scale literally, matching `scale.set(0, 0)`. If you relied on `updateTransform` ignoring a zero scale, stop passing `0` when you mean full scale.
```ts
const container = new Container();
container.updateTransform({ scaleX: 0, scaleY: 0 });
// before: scale coerced to (1, 1) — container stayed full-size
// after: scale applied as (0, 0) — container hidden, matching scale.set(0, 0)
```
* fix: particle container inherit blend mode by @DmitriyGolub in https://github.com/pixijs/pixijs/pull/11978
* `ParticleContainer` now respects the blend mode inherited from its ancestors. Previously the render pipe read the container's own local `blendMode` instead of the resolved `groupBlendMode`, so setting e.g. `stage.blendMode = 'add'` had no effect on particles. Particles nested under a parent with a non-default blend mode will now render differently (e.g. additive brightening) where they were silently ignored before. A `blendMode` set directly on the `ParticleContainer` is unchanged.
* fix: FillPattern tiling and radial gradient sizing by @Zyie in https://github.com/pixijs/pixijs/pull/12037
* `FillPattern` gains a `textureSpace` option (`'global' | 'local'`), while fixing several long-standing pattern/gradient sizing bugs. `textureSpace` defaults to `'global'`, so patterns now tile continuously across adjacent shapes instead of remapping per shape; `setTransform(matrix)` now applies the matrix you pass directly (it previously inverted and rescaled it by the texture size); and `textureSpace: 'local'` radial gradients now scale to the gradient's outer radius. Existing pattern fills and local radial gradients can render differently.
If you hand-compensated for the old `setTransform` behavior (pre-inverting or scaling by texture size), remove that compensation. The legacy positional `new FillPattern(texture, repetition)` form still works.
```ts
import { Assets, FillPattern, Graphics } from 'pixi.js';
const texture = await Assets.load('pattern.png');
// new options-object constructor with explicit textureSpace
const pattern = new FillPattern({ texture, repetition: 'repeat', textureSpace: 'local' });
const g = new Graphics().rect(0, 0, 200, 100).fill({ fill: pattern });
```
###### 🎁 Added
* feat: add HTML-in-Canvas texture support by @Zyie in https://github.com/pixijs/pixijs/pull/12053
* A new opt-in `pixi.js/html-source` subpath renders live DOM elements into PixiJS textures while the element stays fully interactive in the browser (inputs editable, links clickable, CSS animations running). Use `HTMLSource` for a live element or `ElementImageSource` for an immutable snapshot. The element must be a direct child of the Pixi canvas. Importing the subpath also registers a lowest-priority `Texture.from` fallback for generic HTML elements, so it cannot affect apps that don't import it.
```ts
import { Application, Sprite } from 'pixi.js';
import { HTMLSource } from 'pixi.js/html-source';
const app = new Application();
await app.init({ resizeTo: window });
document.body.appendChild(app.canvas);
const form = docu
_[Truncated at 4000 characters — full notes: https://github.com/pixijs/pixijs/releases/tag/v8.19.0]_
### v8.18.1
- Date: 2026-04-14
- Version: v8.18.1
- Original notes: https://github.com/pixijs/pixijs/releases/tag/v8.18.1
- Permalink: https://whatsnew.fyi/product/pixijs/releases/v8.18.1
- **fixed** — Prevent error when using Application.domContainerRoot in Node.js
##### 💾 Download
Installation:
```bash
npm install pixi.js@8.18.1
```
Development Build:
- https://cdn.jsdelivr.net/npm/pixi.js@8.18.1/dist/pixi.js
- https://cdn.jsdelivr.net/npm/pixi.js@8.18.1/dist/pixi.mjs
Production Build:
- https://cdn.jsdelivr.net/npm/pixi.js@8.18.1/dist/pixi.min.js
- https://cdn.jsdelivr.net/npm/pixi.js@8.18.1/dist/pixi.min.mjs
Documentation:
- https://pixijs.download/v8.18.1/docs/index.html
##### Changed
https://github.com/pixijs/pixijs/compare/v8.18.0...v8.18.1
###### 🐛 Fixed
* fix: prevent error when using `Application.domContainerRoot` in Node.js by @UlyssesZh in https://github.com/pixijs/pixijs/pull/12017
### v8.18.0
- Date: 2026-04-14
- Version: v8.18.0
- Original notes: https://github.com/pixijs/pixijs/releases/tag/v8.18.0
- Permalink: https://whatsnew.fyi/product/pixijs/releases/v8.18.0
- **fixed** — Text.width and word wrap returning incorrect values
- **changed** — Text/HTMLText/BitmapText with wordWrap: true and non-left align now return the true rendered width from text.width instead of reporting wordWrapWidth
- **added** — Add graphicsContextToSvg() function to export Graphics or GraphicsContext to a self-contained SVG string
- **added** — Add mask channel selection option to setMask() to pick which texture channel (red or alpha) drives visibility
- **added** — Allow preference parameter to accept an array of renderer types in autoDetectRenderer and Application.init
- **added** — Add domContainerRoot getter to Application to access the HTMLDivElement wrapping DOMContainer elements
- **added** — Add width option to MeshRope to allow explicit rope thickness decoupled from texture height
- **added** — Add defaultAnchor option to renderer.generateTexture() and textureOptions parameter to RenderTexture.create()
- **fixed** — Stroke-only Graphics masks now render correctly on Canvas renderer
- **fixed** — Skip _applyMipRange for single-mip textures on iOS 18.0–18.1
- **fixed** — Stale TextureMatrix when pooled textures reuse the same reference
- **fixed** — Unhandled actions in GraphicsPath.transform() switch statement
- **fixed** — VideoSource play/mediaReady recursion before video dimensions are known
##### 💾 Download
Installation:
```bash
npm install pixi.js@8.18.0
```
Development Build:
- https://cdn.jsdelivr.net/npm/pixi.js@8.18.0/dist/pixi.js
- https://cdn.jsdelivr.net/npm/pixi.js@8.18.0/dist/pixi.mjs
Production Build:
- https://cdn.jsdelivr.net/npm/pixi.js@8.18.0/dist/pixi.min.js
- https://cdn.jsdelivr.net/npm/pixi.js@8.18.0/dist/pixi.min.mjs
Documentation:
- https://pixijs.download/v8.18.0/docs/index.html
##### Changed
https://github.com/pixijs/pixijs/compare/v8.17.1...v8.18.0
###### 🚨 Behavior Change
* fix: `text.width` and word wrap returning incorrect values by @Zyie in https://github.com/pixijs/pixijs/pull/12007
* `Text`/`HTMLText`/`BitmapText` with `wordWrap: true` and non-left `align` (`center`/`right`/`justify`) now return the true rendered width from `text.width` instead of reporting `wordWrapWidth`. If you relied on `text.width === wordWrapWidth` for layout, use `wordWrapWidth` directly or wrap the text in a sized container.
```ts
const text = new Text({
text: 'hello',
style: { wordWrap: true, wordWrapWidth: 800, align: 'center' },
});
// before: text.width === 800
// after: text.width reflects the rendered string width
```
###### 🎁 Added
* feat: add `graphicsContextToSvg()` for Graphics → SVG export by @GoodBoyDigital in https://github.com/pixijs/pixijs/pull/11989
* Adds `graphicsContextToSvg(source, precision?)`, a pure function that serializes a `Graphics` or `GraphicsContext` to a self-contained SVG string. Supports rects, circles, ellipses, rounded rects, polygons, bezier/quadratic/arc paths, strokes, holes (via `fill-rule="evenodd"`), and linear/radial gradients.
```ts
import { Graphics, graphicsContextToSvg } from 'pixi.js';
const g = new Graphics()
.rect(0, 0, 100, 50)
.fill({ color: 0xff0000 })
.circle(150, 25, 25)
.stroke({ color: 0x0000ff, width: 4 });
const svgString = graphicsContextToSvg(g, 2);
await navigator.clipboard.writeText(svgString);
```
* feat: add mask channel selection for sprite masks by @Zyie in https://github.com/pixijs/pixijs/pull/11987
* `setMask()` gains a `channel` option (`'red' | 'alpha'`) to pick which texture channel drives visibility, matching how design tools like Figma apply PNG masks. Default remains `'red'`.
```ts
import { Assets, Sprite } from 'pixi.js';
const photo = new Sprite(await Assets.load('photo.png'));
const maskSprite = new Sprite(await Assets.load('mask-alpha.png'));
photo.setMask({
mask: maskSprite,
channel: 'alpha',
});
```
* feat: allow `preference` to accept an array of renderer types by @Zyie in https://github.com/pixijs/pixijs/pull/11963
* `autoDetectRenderer` and `Application.init` now accept an array of renderer names for `preference`, letting you restrict the fallback chain (e.g. disable WebGPU entirely) rather than only reorder it. A new `RendererPreference` type is exported.
```ts
import { Application, autoDetectRenderer } from 'pixi.js';
const renderer = await autoDetectRenderer({
preference: ['webgl', 'canvas'],
});
const app = new Application();
await app.init({ preference: ['webgl', 'canvas'] });
```
* feat: provide a getter to the domElement via `app.domContainerRoot` by @carlos22 in https://github.com/pixijs/pixijs/pull/11974
* `Application` exposes a read-only `domContainerRoot` getter returning the `HTMLDivElement` that wraps all `DOMContainer` elements, so apps can add CSS classes, inline styles, or customize the DOM overlay root.
```ts
import { Application } from 'pixi.js';
const app = new Application();
await app.init({ resizeTo: window });
app.domContainerRoot.classList.add('pixi-dom-layer');
app.domContainerRoot.style.pointerEvents = 'auto';
```
* feat: add `width` option to `MeshRope` by @mehmetcanakbay in https://github.com/pixijs/pixijs/pull/11990
* `MeshRope` now accepts an explicit `width` for rop
_[Truncated at 4000 characters — full notes: https://github.com/pixijs/pixijs/releases/tag/v8.18.0]_
### v8.17.1
- Date: 2026-03-16
- Version: v8.17.1
- Original notes: https://github.com/pixijs/pixijs/releases/tag/v8.17.1
- Permalink: https://whatsnew.fyi/product/pixijs/releases/v8.17.1
- **fixed** — compressed textures ignoring resolution from URL (e.g. `@0.75x`)
- **fixed** — center-align text correctly when words exceed wordWrapWidth
- **fixed** — BitmapFont char keys from char codes to character strings
##### 💾 Download
Installation:
```bash
npm install pixi.js@8.17.1
```
Development Build:
- https://cdn.jsdelivr.net/npm/pixi.js@8.17.1/dist/pixi.js
- https://cdn.jsdelivr.net/npm/pixi.js@8.17.1/dist/pixi.mjs
Production Build:
- https://cdn.jsdelivr.net/npm/pixi.js@8.17.1/dist/pixi.min.js
- https://cdn.jsdelivr.net/npm/pixi.js@8.17.1/dist/pixi.min.mjs
Documentation:
- https://pixijs.download/v8.17.1/docs/index.html
##### Changed
https://github.com/pixijs/pixijs/compare/v8.17.0...v8.17.1
###### 🐛 Fixed
* fix: compressed textures ignoring resolution from URL (e.g. `@0.75x`) by @Zyie in https://github.com/pixijs/pixijs/pull/11960
* fix: center-align text correctly when words exceed wordWrapWidth by @Zyie in https://github.com/pixijs/pixijs/pull/11966
###### 🧹 Chores
* chore: fix BitmapFont char keys from char codes to character strings by @Zyie in https://github.com/pixijs/pixijs/pull/11967
* fix: add secrets: inherit to publish-switch workflow for S3 docs upload by @Zyie in https://github.com/pixijs/pixijs/pull/11962
### v8.17.0
- Date: 2026-03-09
- Version: v8.17.0
- Original notes: https://github.com/pixijs/pixijs/releases/tag/v8.17.0
- Permalink: https://whatsnew.fyi/product/pixijs/releases/v8.17.0
- **changed** — BlurFilter now uses an optimized halving strength scheme by default, which changes visual output compared to previous versions
- **changed** — Text with align: 'justify' now uses wordWrapWidth for width calculation instead of maxLineWidth, matching CSS behavior, and the last line is no longer stretched
- **changed** — breakWords: true in HTMLText now correctly uses CSS word-break: break-word instead of break-all to match behavior of other text renderers
- **added** — SplitText now supports tagStyles, so styled runs are correctly split into per-character Text objects with individual styles preserved
- **added** — Bitmap text now supports whiteSpace modes (normal, pre, nowrap, pre-line, pre-wrap) with proper space and newline collapsing
- **added** — Bitmap text word wrap now supports break-after characters including hyphens, en-dash, em-dash, and soft hyphen
- **added** — Canvas text and split text now render align: 'justify' by distributing extra word spacing
- **added** — Dynamic bitmap fonts scale drop shadow blur and distance proportionally to font size
- **added** — Bitmap font xAdvance now uses true advance width from measureText() instead of bounding-box width
- **added** — Kerning values are correctly scaled by fontScale in dynamic bitmap fonts
- **added** — Add visibleChanged event to container that fires when visibility changes
- **added** — Add function for removing aliases from resolver
- **fixed** — Prevent filter corruption with TexturePool mipmap separation
- **fixed** — Correctly handle offset in ColorMatrixFilter
- **fixed** — Apply global filter offset to ParticleContainer rendering
- **fixed** — Respect texture trim offset in NineSliceSprite
- **fixed** — Return valid empty bounds from empty Graphics
- **fixed** — Graphics getLocalBounds no longer returns stale data between operations in same frame
- **fixed** — Graphics bounds now account for miter joins at sharp angles
- **fixed** — Remove listener from old resource in BindGroup.setResource
##### 💾 Download
Installation:
```bash
npm install pixi.js@8.17.0
```
Development Build:
- https://cdn.jsdelivr.net/npm/pixi.js@8.17.0/dist/pixi.js
- https://cdn.jsdelivr.net/npm/pixi.js@8.17.0/dist/pixi.mjs
Production Build:
- https://cdn.jsdelivr.net/npm/pixi.js@8.17.0/dist/pixi.min.js
- https://cdn.jsdelivr.net/npm/pixi.js@8.17.0/dist/pixi.min.mjs
Documentation:
- https://pixijs.download/v8.17.0/docs/index.html
##### Changed
https://github.com/pixijs/pixijs/compare/v8.16.0...v8.17.0
###### 🚨 Behavior Change
- `BlurFilter` now uses an optimized halving strength scheme by default, which changes visual output compared to previous versions. Set `legacy: true` to restore the old behavior.
```ts
new BlurFilter({ legacy: true });
// or globally:
BlurFilter.defaultOptions.legacy = true;
```
- Text with `align: 'justify'` now uses `wordWrapWidth` for width calculation instead of `maxLineWidth`, matching CSS behavior. The last line is no longer stretched.
- `breakWords: true` in `HTMLText` now correctly uses CSS `word-break: break-word` instead of `break-all` to match behavior of other text renderers.
###### 🎁 Added
* feat: add tagged text support to canvasTextSplit by @Zyie in https://github.com/pixijs/pixijs/pull/11949
* `SplitText` now supports `tagStyles`, so styled runs (e.g. `Hello World`) are correctly split into per-character `Text` objects with individual styles preserved.
* feat: Improves text rendering and layout handling by @Zyie in https://github.com/pixijs/pixijs/pull/11947
* Bitmap text now supports `whiteSpace` modes (`normal`, `pre`, `nowrap`, `pre-line`, `pre-wrap`) with proper space/newline collapsing
* Bitmap text word wrap supports break-after characters (hyphens, en-dash, em-dash, soft hyphen)
* Canvas text and split text now render `align: 'justify'` by distributing extra word spacing
* Dynamic bitmap fonts scale drop shadow `blur` and `distance` proportionally to font size
* Bitmap font `xAdvance` now uses true advance width from `measureText()` instead of bounding-box width
* Kerning values correctly scaled by `fontScale` in dynamic bitmap fonts
* feat: add visibleChanged event to container by @ikigai-bjorn-s in https://github.com/pixijs/pixijs/pull/11940
```ts
container.on('visibleChanged', (visible) => {
console.log('Visibility changed to:', visible);
});
```
* feat: Add function for removing aliases from resolver by @Sertion in https://github.com/pixijs/pixijs/pull/11921
###### 🐛 Fixed
* fix: prevent filter corruption with TexturePool mipmap separation by @vkarponen in https://github.com/pixijs/pixijs/pull/11865
* fix: blur by reducing strength on each pass by @Zyie in https://github.com/pixijs/pixijs/pull/11909
* fix: Reduce work done by the blur shader by @Sertion in https://github.com/pixijs/pixijs/pull/11917
* fix: Correctly handle offset in ColorMatrixFilter by @Sertion in https://github.com/pixijs/pixijs/pull/11925
* fix: Apply global filter offset to ParticleContainer rendering by @GoodBoyDigital in https://github.com/pixijs/pixijs/pull/11882
* fix: respect texture trim offset in NineSliceSprite by @shtse8 in https://github.com/pixijs/pixijs/pull/11919
* fix: return valid empty bounds from empty Graphics by @GoodBoyDigital in https://github.com/pixijs/pixijs/pull/11908
* fix: Graphics getLocalBounds returns stale data between operations in same frame by @GoodBoyDigital in https://github.com/pixijs/pixijs/pull/11886
* fix: Graphics bounds account for miter joins at sharp angles by @GoodBoyDigital in https://github.com/pixijs/pixijs/pull/11884
* fix: BindGroup crash when resource destroyed in batched group by @GoodBoyDigital in https://github.com/pixijs/pixijs/pull/11876
* fix: remove listener from old resource in BindGroup.setResource by @GoodBoyDigital in https://github.com/pixijs/pixijs/pull/11901
* fix: removeAllListeners() on Renderer.destroy() by @taye in https:/
_[Truncated at 4000 characters — full notes: https://github.com/pixijs/pixijs/releases/tag/v8.17.0]_
### v8.16.0
- Date: 2026-02-03
- Version: v8.16.0
- Original notes: https://github.com/pixijs/pixijs/releases/tag/v8.16.0
- Permalink: https://whatsnew.fyi/product/pixijs/releases/v8.16.0
- **added** — Canvas renderer support with experimental status
- **added** — Tagged text feature for Text and HTMLText allowing custom tag styles
- **added** — SplitText now automatically regenerates when TextStyle changes via styleChanged()
- **added** — External texture support
- **added** — parseSync method for spritesheet
- **added** — Improved Pool typing for pool.get() method
- **added** — Cube texture support
- **added** — Mip level rendering support in the rendering system
- **added** — Render to array layer capability
- **changed** — SplitText now more accurately splits Text across a wider range of TextStyle configurations, which may result in slight changes to character positioning
- **changed** — SplitText.from now correctly transfers the source anchor to the new instance by mapping the anchor to pivot coordinates
- **changed** — SplitBitmapText now correctly defaults to white fill, matching BitmapText behavior
- **changed** — HTMLText now correctly respects breakWords and no longer cuts off words that exceed wordWrapWidth
- **changed** — HTMLText now respects the alpha value of its fill and stroke
- **changed** — Text now correctly aligns when using align: 'right' or align: 'center'
- **changed** — Container.cullArea is now correctly interpreted in the container's local coordinate space and transformed to global coordinates before culling checks
- **changed** — graphics.texture() will now correctly apply a black tint
- **fixed** — Improve HTML text measurement accuracy
- **fixed** — GlGeometrySystem VAO cache is now preserved
- **fixed** — GC system now ensures render groups are marked as dirty
##### 💾 Download
Installation:
```bash
npm install pixi.js@8.16.0
```
Development Build:
- https://cdn.jsdelivr.net/npm/pixi.js@8.16.0/dist/pixi.js
- https://cdn.jsdelivr.net/npm/pixi.js@8.16.0/dist/pixi.mjs
Production Build:
- https://cdn.jsdelivr.net/npm/pixi.js@8.16.0/dist/pixi.min.js
- https://cdn.jsdelivr.net/npm/pixi.js@8.16.0/dist/pixi.min.mjs
Documentation:
- https://pixijs.download/v8.16.0/docs/index.html
##### Changed
https://github.com/pixijs/pixijs/compare/v8.15.0...v8.16.0
###### 🚨 Behavior Change
- `SplitText` now more accurately splits `Text` across a wider range of `TextStyle` configurations. This may result in slight changes to character positioning.
- Using `SplitText.from` from an existing `Text` now correctly transfers the source anchor to the new instance by mapping the anchor to pivot coordinates. This changes layout and positioning compared to previous behavior.
- `SplitBitmapText` now correctly defaults to a `white` fill, matching the behavior of `BitmapText`.
- `HTMLText` now correctly respects `breakWords` and no longer cuts off words that exceed `wordWrapWidth`.
- `HTMLText` now respects the alpha value of its fill and stroke.
- `Text` now correctly aligns when using `align: 'right'` or `align: 'center'`, resulting in a small positional adjustment.
- `Container.cullArea` is now correctly interpreted in the container’s local coordinate space and transformed to global coordinates before culling checks.
```ts
// cullArea is defined in local space and transformed during culling
container.cullArea = new Rectangle(0, 0, 100, 100);
```
* `graphics.texture(texture, 0x000000)` will now correctly apply a black tint
###### 🎁 Added
* feat: Canvas renderer by @krzys @Zyie in https://github.com/pixijs/pixijs/pull/11815
* Note: This feature is experimental, please let us know if you run into any issues.
```ts
await app.init({
preference: 'canvas'
});
```
* feat: tagged text by @Zyie in https://github.com/pixijs/pixijs/pull/11827
* Note: Currently only works for `Text`/`HTMLText`, `BitmapText` support coming soon
```ts
const text = new Text({
text: 'Important: This is highlighted text',
style: {
fontFamily: 'Arial',
fontSize: 28,
fill: 'white',
tagStyles: {
bold: { fontWeight: 'bold', fill: 'yellow' },
highlight: { fill: 'cyan', fontSize: 32 }
}
}
});
```
* feat: improve stability of SplitText by @Zyie in https://github.com/pixijs/pixijs/pull/11858
* SplitText now fully mirrors Text behavior and regenerates automatically when its TextStyle changes via `text.styleChanged()`
```ts
splitText.style.fontSize = 32
splitText.styleChanged()
```
* feat: external texture support by @astralarya @GoodBoyDigital in https://github.com/pixijs/pixijs/pull/11846 https://github.com/pixijs/pixijs/pull/11861
* feat: add parseSync to spritesheet by @jimhigson in https://github.com/pixijs/pixijs/pull/11794
* feat: improved Pool typing for pool.get() method by @unstoppablecarl in https://github.com/pixijs/pixijs/pull/11799
* feat: add cube texture by @GoodBoyDigital in https://github.com/pixijs/pixijs/pull/11800
* by @GoodBoyDigital in
* feat: Implement mip level rendering support in the rendering system by @GoodBoyDigital in https://github.com/pixijs/pixijs/pull/11801
* feat: render to array layer by @GoodBoyDigital in https://github.com/pixijs/pixijs/pull/11803
###### 🐛 Fixed
* fix: Improve HTML text measurement accuracy and add comprehensive test scenes by @Zyie in https://github.com/pixijs/pixijs/pull/11862
* fix: project container.cullArea from local to global coordinate space before doing cull check by @jujurocket in https://github.com/pixijs/pixijs/pull/11598
* fix: use vColor instead of localUniforms.uColor in WebGPU MSDF shader by @Riphal in https://github.com/pixijs/pixijs
_[Truncated at 4000 characters — full notes: https://github.com/pixijs/pixijs/releases/tag/v8.16.0]_
### v8.15.0
- Date: 2026-01-05
- Version: v8.15.0
- Original notes: https://github.com/pixijs/pixijs/releases/tag/v8.15.0
- Permalink: https://whatsnew.fyi/product/pixijs/releases/v8.15.0
- **added** — Add unified GC system (GCSystem) with gcActive, gcMaxUnusedTime, and gcFrequency options
- **deprecated** — Deprecate TextureGCSystem and RenderableGCSystem in favor of GCSystem
- **added** — Add autoGarbageCollect option to view containers to disable automatic garbage collection for a node
- **added** — Add unload method to manually release GPU resources associated with nodes
- **added** — Move GPU context storage to GraphicsContext._gpuData
- **added** — Move GPU data to Geometry._gpuData
- **added** — Move GPUData to TextureSource
- **added** — Move GL/GPU buffer storage to Buffer._gpuData and manage buffers list
- **added** — Add descriptive names GCManagedHash
- **added** — Update text GPU lifecycle and resolution updates
- **added** — Improve ParticleContainer type definitions
- **added** — Allow RenderTexture.create to accept dynamic option
- **fixed** — Allow negative values for Polygon and polyline in SVGParser
- **fixed** — Prevent double returning of batches to pool
- **fixed** — Add error handling for message processing in KTX worker
- **fixed** — Fix RenderTexture ignoring format setting in WebGL
- **fixed** — Add Multiple Render Targets (MRT) support
- **fixed** — Correct viewport Y calculation for root render targets
- **fixed** — Fix garbage collection for bitmap text
##### 💾 Download
Installation:
```bash
npm install pixi.js@8.15.0
```
Development Build:
- https://cdn.jsdelivr.net/npm/pixi.js@8.15.0/dist/pixi.js
- https://cdn.jsdelivr.net/npm/pixi.js@8.15.0/dist/pixi.mjs
Production Build:
- https://cdn.jsdelivr.net/npm/pixi.js@8.15.0/dist/pixi.min.js
- https://cdn.jsdelivr.net/npm/pixi.js@8.15.0/dist/pixi.min.mjs
Documentation:
- https://pixijs.download/v8.15.0/docs/index.html
##### Changed
https://github.com/pixijs/pixijs/compare/v8.14.3...v8.15.0
###### 🎁 Added
* feat: add unified GC by @Zyie in https://github.com/pixijs/pixijs/pull/11786
* Deprecated `TextureGCSystem`/`RenderableGCSystem` in favor of `GCSystem`.
```ts
// old
app.init({
textureGCActive: true,
textureGCMaxIdle: 60000,
textureGCCheckCountMax: 30000,
renderableGCActive: true,
renderableGCMaxUnusedTime: 60000,
renderableGCFrequency: 30000,
});
// new
app.init({
gcActive: true,
gcMaxUnusedTime: 60000,
gcFrequency: 30000,
});
```
* feat: Adds auto-GC option to view containers by @Zyie in https://github.com/pixijs/pixijs/pull/11810
* Disable automatic garbage collection for a node.
```ts
new Sprite({
autoGarbageCollect: false,
});
```
* feat: add unload method to reset GPU data by @Zyie in https://github.com/pixijs/pixijs/pull/11762
* You can now manually unload a node by calling its `unload` method. This releases any GPU resources associated with the node. The node can still be used afterward—it will be re-created automatically when needed.
```ts
sprite.unload();
text.unload();
mesh.unload();
```
* feat: move GPU context storage to GraphicsContext._gpuData by @Zyie in https://github.com/pixijs/pixijs/pull/11763
* feat: move GPU data to Geometry._gpuData by @Zyie in https://github.com/pixijs/pixijs/pull/11772
* feat: move GPUData to TextureSource by @Zyie in https://github.com/pixijs/pixijs/pull/11774
* feat: move GL/GPU buffer storage to Buffer._gpuData and manage buffers list by @Zyie in https://github.com/pixijs/pixijs/pull/11775
* feat: add descriptive names GCManagedHash by @Zyie in https://github.com/pixijs/pixijs/pull/11811
* feat: update text GPU lifecycle and resolution updates by @Zyie in https://github.com/pixijs/pixijs/pull/11781
* feat: ParticleContainer type improvements by @unstoppablecarl in https://github.com/pixijs/pixijs/pull/11708
* feat: allow RenderTexture.create to accept dynamic option by @seanzhaoxiaoxiao in https://github.com/pixijs/pixijs/pull/11767
###### 🐛 Fixed
* fix: SVGParser.ts Allow negative values for Polygon(s)/polyline(s) by @Raukie in https://github.com/pixijs/pixijs/pull/11771
* fix: prevent double returning of batches to pool by @GoodBoyDigital in https://github.com/pixijs/pixijs/pull/11780
* fix: Add error handling for message processing in KTX worker by @zardoy in https://github.com/pixijs/pixijs/pull/11768
* fix: RenderTexture ignoring format setting (WebGL) by @laino in https://github.com/pixijs/pixijs/pull/11777
* fix: Add Multiple Render Targets (MRT) support by @GoodBoyDigital in https://github.com/pixijs/pixijs/pull/11792
* fix: correct viewport Y calculation for root render targets by @GoodBoyDigital in https://github.com/pixijs/pixijs/pull/11797
* fix: garbage collection for bitmap text by @Zyie in https://github.com/pixijs/pixijs/pull/11809
###### 🧹 Chores
* chore: Improve JSDoc documentation across modules by @Zyie in https://github.com/pixijs/pixijs/pull/11812
* chore: refactors CI workflows for trusted publishing by @Zyie in https://github.com/pixijs/pixijs/pull/11820
##### New Contributors
* @Raukie made their first contribution in https://github.com/pixijs/pixijs/pull/11771
* @seanzhaoxiaoxiao made their first contribution in https://github.com/pixijs/pixijs/pull/11767
* @zardoy made their first contribution in https://github.com/pixijs/pixijs/pull/11768
### v8.15.0-rc
- Date: 2025-12-08
- Version: v8.15.0-rc
- Original notes: https://github.com/pixijs/pixijs/releases/tag/v8.15.0-rc
- Permalink: https://whatsnew.fyi/product/pixijs/releases/v8.15.0-rc
- Labels: Pre-release
- **added** — Allow RenderTexture.create to accept dynamic option
- **added** — Add unload method to reset GPU data
- **added** — Add unified GC
- **added** — Move GPU context storage to GraphicsContext._gpuData
- **added** — Move GPU data to Geometry._gpuData
- **added** — Move GPUData to TextureSource
- **added** — Move GL/GPU buffer storage to Buffer._gpuData and manage buffers list
- **changed** — Update text GPU lifecycle and resolution updates
- **added** — ParticleContainer type improvements
- **fixed** — SVGParser.ts allow negative values for Polygon(s)/polyline(s)
- **fixed** — Prevent double returning of batches to pool
- **fixed** — Add error handling for message processing in KTX worker
- **fixed** — RenderTexture ignoring format setting (WebGL)
- **fixed** — Add Multiple Render Targets (MRT) support
##### 💾 Download
Installation:
```bash
npm install pixi.js@8.15.0-rc
```
Development Build:
- https://cdn.jsdelivr.net/npm/pixi.js@8.15.0-rc/dist/pixi.js
- https://cdn.jsdelivr.net/npm/pixi.js@8.15.0-rc/dist/pixi.mjs
Production Build:
- https://cdn.jsdelivr.net/npm/pixi.js@8.15.0-rc/dist/pixi.min.js
- https://cdn.jsdelivr.net/npm/pixi.js@8.15.0-rc/dist/pixi.min.mjs
Documentation:
- https://pixijs.download/v8.15.0-rc/docs/index.html
##### Changed
https://github.com/pixijs/pixijs/compare/v8.14.3...v8.15.0-rc
###### 🎁 Added
* feat: allow RenderTexture.create to accept dynamic option by @seanzhaoxiaoxiao in https://github.com/pixijs/pixijs/pull/11767
* feat: add unload method to reset GPU data by @Zyie in https://github.com/pixijs/pixijs/pull/11762
* feat: add unified GC by @Zyie in https://github.com/pixijs/pixijs/pull/11786
* feat: move GPU context storage to GraphicsContext._gpuData by @Zyie in https://github.com/pixijs/pixijs/pull/11763
* feat: move GPU data to Geometry._gpuData by @Zyie in https://github.com/pixijs/pixijs/pull/11772
* feat: move GPUData to TextureSource by @Zyie in https://github.com/pixijs/pixijs/pull/11774
* feat: move GL/GPU buffer storage to Buffer._gpuData and manage buffers list by @Zyie in https://github.com/pixijs/pixijs/pull/11775
* feat: update text GPU lifecycle and resolution updates by @Zyie in https://github.com/pixijs/pixijs/pull/11781
* feat: ParticleContainer type improvements by @unstoppablecarl in https://github.com/pixijs/pixijs/pull/11708
###### 🐛 Fixed
* fix: SVGParser.ts Allow negative values for Polygon(s)/polyline(s) by @Raukie in https://github.com/pixijs/pixijs/pull/11771
* fix: prevent double returning of batches to pool by @GoodBoyDigital in https://github.com/pixijs/pixijs/pull/11780
* fix: Add error handling for message processing in KTX worker by @zardoy in https://github.com/pixijs/pixijs/pull/11768
* fix: RenderTexture ignoring format setting (WebGL) by @laino in https://github.com/pixijs/pixijs/pull/11777
* fix: Add Multiple Render Targets (MRT) support by @GoodBoyDigital in https://github.com/pixijs/pixijs/pull/11792
##### New Contributors
* @Raukie made their first contribution in https://github.com/pixijs/pixijs/pull/11771
* @seanzhaoxiaoxiao made their first contribution in https://github.com/pixijs/pixijs/pull/11767
* @zardoy made their first contribution in https://github.com/pixijs/pixijs/pull/11768
### v8.14.3
- Date: 2025-11-20
- Version: v8.14.3
- Original notes: https://github.com/pixijs/pixijs/releases/tag/v8.14.3
- Permalink: https://whatsnew.fyi/product/pixijs/releases/v8.14.3
- **fixed** — Only create stage Container on init if it doesn't exist
##### 💾 Download
Installation:
```bash
npm install pixi.js@8.14.3
```
Development Build:
- https://cdn.jsdelivr.net/npm/pixi.js@8.14.3/dist/pixi.js
- https://cdn.jsdelivr.net/npm/pixi.js@8.14.3/dist/pixi.mjs
Production Build:
- https://cdn.jsdelivr.net/npm/pixi.js@8.14.3/dist/pixi.min.js
- https://cdn.jsdelivr.net/npm/pixi.js@8.14.3/dist/pixi.min.mjs
Documentation:
- https://pixijs.download/v8.14.3/docs/index.html
##### Changed
https://github.com/pixijs/pixijs/compare/v8.14.2...v8.14.3
###### 🐛 Fixed
* fix: Only create stage Container on init if it doesn't exist by @lunarraid in https://github.com/pixijs/pixijs/pull/11766
### v8.14.2
- Date: 2025-11-18
- Version: v8.14.2
- Original notes: https://github.com/pixijs/pixijs/releases/tag/v8.14.2
- Permalink: https://whatsnew.fyi/product/pixijs/releases/v8.14.2
- **fixed** — Fix graphics memory leak and cleanup
- **fixed** — Parse resolution and format from URLs in object sources in assets resolver
- **fixed** — Track item count in Pool class
- **fixed** — BitmanFontXMLParser should recognize xml fonts with versions
- **fixed** — Remove automatically added 'resize' event listener from TextureSource on Texture destroy()
- **fixed** — Resolve a typescript annoyance with Container.filters
- **fixed** — Enable proper application reinitialization
- **fixed** — Correct uBackTexture binding for filters with blendRequired
##### 💾 Download
Installation:
```bash
npm install pixi.js@8.14.2
```
Development Build:
- https://cdn.jsdelivr.net/npm/pixi.js@8.14.2/dist/pixi.js
- https://cdn.jsdelivr.net/npm/pixi.js@8.14.2/dist/pixi.mjs
Production Build:
- https://cdn.jsdelivr.net/npm/pixi.js@8.14.2/dist/pixi.min.js
- https://cdn.jsdelivr.net/npm/pixi.js@8.14.2/dist/pixi.min.mjs
Documentation:
- https://pixijs.download/v8.14.2/docs/index.html
##### Changed
https://github.com/pixijs/pixijs/compare/v8.14.1...v8.14.2
###### 🐛 Fixed
* fix: graphics memory leak and cleanup by @Zyie in https://github.com/pixijs/pixijs/pull/11753
* fix: typo in Application example: replace '-' with '=' in asset loading by @Aryaman1792 in https://github.com/pixijs/pixijs/pull/11750
* fix: parse resolution and format from URLs in object sources in assets resolver by @stereopasa in https://github.com/pixijs/pixijs/pull/11747
* fix: track item count in Pool class and add related tests by @Zyie in https://github.com/pixijs/pixijs/pull/11760
* fix: bitmanFontXMLParser should recognize xml fonts with versions by @rafalaidlaw in https://github.com/pixijs/pixijs/pull/11761
* fix: Remove automatically added 'resize' event listener from TextureSource on Texture destroy() by @Romans-I-XVI in https://github.com/pixijs/pixijs/pull/11764
* fix: resolve a typescript annoyance with Container.filters by @jimhigson in https://github.com/pixijs/pixijs/pull/11757
* fix: enable proper application reinitialization by @Zyie in https://github.com/pixijs/pixijs/pull/11759
* fix: correct uBackTexture binding for filters with blendRequired by @GoodBoyDigital in https://github.com/pixijs/pixijs/pull/11754
###### 🧹 Chores
* chore: add mention of uBackTexture to Filter docs (otherwise undocumented) by @jimhigson in https://github.com/pixijs/pixijs/pull/11756
##### New Contributors
* @Aryaman1792 made their first contribution in https://github.com/pixijs/pixijs/pull/11750
* @stereopasa made their first contribution in https://github.com/pixijs/pixijs/pull/11747
* @rafalaidlaw made their first contribution in https://github.com/pixijs/pixijs/pull/11761
* @Romans-I-XVI made their first contribution in https://github.com/pixijs/pixijs/pull/11764