# 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