npm / pixi.js
pixi.js
What changed in pixi.js 8, from its official release notes, upgrade guides and advisories. Sources checked 2026-10-18.
19 breaking5 deprecations50 new APIs and options1 performance6 behavior and defaults1 tooling96 fixes and other
See which of these apply to your code, ranked, in your agent:
npx @unstale/cli initpixi.js 8178 changes
Breaking changes 19
Mirrored matrices now decompose into a real rotation, zero skew and a negative scale.x; the same change applies to setFromMatrix() and child reparenting/replacement methods.
Replaces StructsAndGroups.isUniform and also describes storage buffers; the old property now reads undefined rather than throwing.
Particles now inherit tint and alpha from ancestor render groups, so remove any manual compensation for the previous behavior.
Hit testing now matches the drawn stroke, including its alignment and winding.
Identical rectangles and rectangles flush against the right or bottom edge now count as contained.
WebGPU now handles clockwiseFrontFace as a winding; WGSL front_facing branches may take the opposite branch, while culling is unchanged.
Zero values for scaleX and scaleY are now applied literally instead of being coerced to 1, matching scale.set(0, 0).
Adds a textureSpace option, defaulting to 'global'; patterns tile continuously across adjacent shapes, and local radial gradients scale to the gradient's outer radius.
The supplied matrix is now applied directly rather than inverted and rescaled by the texture size.
With word wrapping and non-left alignment, Text, HTMLText, and BitmapText now report the rendered string width instead of wordWrapWidth; use wordWrapWidth directly if you need the configured wrapping width.
BitmapFont character keys now use character strings instead of character codes.
xAdvance now uses true advance width from measureText() instead of bounding-box width.
BlurFilter now uses an optimized halving strength scheme by default, changing visual output; set legacy to true to restore the old behavior.
Drop shadow blur and distance now scale proportionally to font size.
breakWords: true now uses CSS word-break: break-word instead of break-all, matching other text renderers.
For align: 'justify', width calculation now uses wordWrapWidth instead of maxLineWidth, and the last line is no longer stretched.
Creating SplitText from an existing Text now transfers its anchor by mapping the anchor to pivot coordinates, changing layout and positioning.
SplitText more accurately splits Text across a wider range of TextStyle configurations, which may slightly change character positioning.
A unified garbage-collection system replaces the separate texture and renderable garbage-collection systems.
Deprecations 5
The getter is deprecated in favor of isFrontFaceInverted(), which accepts a target and flipY value.
Adds a method to determine winding for a target and flipY value before binding; the frontFaceInverted getter is deprecated.
getOptimalTexture() and createTexture() now accept a TexturePoolRequest object with per-request format and scaleMode; positional signatures still work but are deprecated.
Deprecated in favor of GCSystem.
Deprecated in favor of GCSystem.
New APIs and options 50
PixiJS adds 3D mipmaps.
PixiJS adds support for 3D textures, storage textures and 3D mipmaps.
Containers receive federated contextmenu events that PixiJS hit-tests and propagates like pointerdown; eventFeatures.click gates them.
Containers now receive contextmenucapture events, gated by eventFeatures.click.
The contextmenu event is also available through the oncontextmenu handler property.
PixiJS adds storage textures.
The new WebGPU renderer option, used with antialias, discards the canvas multisample depth/stencil buffer after each pass and also discards its color buffer on non-tile-based GPUs.
BufferImageSource supports partial uploads through update(start, end).
WebGLLoader, WebGPULoader and CanvasLoader extensions register async load() hooks that matching renderers await during init(), enabling lazy backend imports.
Geometry gains an indexCount property and constructor option so geometries can draw a prefix of a shared index buffer without re-uploading it.
Adds object-form bind/push and capturable bind state.
Adds copyDepthTexture for render targets on WebGPU and WebGL2.
Adds depth-only targets.
Adds depth-stencil formats.
Adds vertexCount to geometry.
Exports GPU shader layout helpers for advanced users.
Adds support for partial buffer updates.
Opt-in flipY reverses render Y orientation while also adjusting projection and winding/cull inversion; absent or false is a no-op.
Adds a Safari WGSL fallback.
Adds WGSL shader overrides.
Adds depth sampling through TextureView.
Adds WebGPU render bundles.
Adds an opt-in subpath for rendering live DOM elements or immutable snapshots into PixiJS textures; live elements remain interactive and must be direct children of the Pixi canvas.
Adds a WebGPU-only probe that reports transient attachment device support.
Texture sources gain an opt-in transient flag for WebGPU MSAA render targets, allowing the MSAA buffer to be discarded after a render pass and reducing memory bandwidth for single-pass use.
Application exposes a read-only getter for the HTMLDivElement wrapping DOMContainer elements, allowing apps to customize the DOM overlay root.
Adds a pure function that serializes a Graphics or GraphicsContext to a self-contained SVG string, supporting shapes, paths, strokes, holes, and gradients.
Adds an explicit width option for rope thickness, decoupling it from texture height; omitting it preserves the previous texture.height default.
The preference option on autoDetectRenderer and Application.init can now accept an array of renderer names to restrict the fallback chain; RendererPreference is also exported.
Adds a defaultAnchor option forwarded to the generated Texture.
Adds a textureOptions parameter for passing fields such as defaultAnchor to the underlying Texture.
Adds a channel option to choose whether the red or alpha texture channel drives sprite-mask visibility; the default remains red.
Bitmap text supports normal, pre, nowrap, pre-line, and pre-wrap whiteSpace modes with space and newline collapsing.
Containers emit visibleChanged when visibility changes, providing the new visibility value to listeners.
A function was added for removing aliases from the resolver.
SplitText supports tagStyles so styled runs are split into per-character Text objects while preserving individual styles.
Cube texture support was added.
External texture support was added.
The rendering system gained mip level rendering support.
Spritesheets gained parseSync.
Application initialization can select the experimental Canvas renderer with preference set to 'canvas'.
Rendering to an array layer was added.
Text and HTMLText support tagged text using tagStyles to define styles for markup tags.
View containers can disable automatic garbage collection for a node with autoGarbageCollect.
The new unified garbage-collection configuration uses gcActive to control whether garbage collection is active.
The new unified garbage-collection configuration uses gcFrequency to set the collection frequency.
The new unified garbage-collection configuration uses gcMaxUnusedTime to set the maximum unused time.
Multiple Render Targets support was added.
RenderTexture.create now accepts the dynamic option.
Nodes can manually release associated GPU resources with unload and are recreated automatically when needed.
Performance 1
Uses indexed loops instead of for...in on every draw.
Behavior and default changes 6
When left at its default of true, Tab now activates the accessibility layer on a fresh page; set it to false to prevent activation.
Render bundles are now stamped with baked pipeline state.
Importing pixi.js/html-source registers a lowest-priority fallback for generic HTML elements.
Bitmap text word wrapping supports break-after characters including hyphens, en-dash, em-dash, and soft hyphen.
SplitBitmapText now defaults to a white fill, matching BitmapText.
SplitText mirrors Text behavior and regenerates automatically when its TextStyle changes via text.styleChanged().
Tooling 1
The typing for pool.get() was improved.
Fixes and other changes 96
Declares accessibilityOptions on the public renderer options so it is available in the public options type.
accessibleText now applies to the default button type and to accessible elements recycled from the pool.
Fixes array uniform synchronization over-reads and overlapping matrix elements.
Fixes blend filter backdrop behavior when every parent filter is skipped.
Integer texture formats are fixed on WebGL and WebGPU.
Fixes a crash involving nested filters after renderer resize.
Stops warnings about unread attributes that already have a format.
Blur samples are clamped to the input frame.
Untinted canvas tiling sprites preserve translucent colors.
Handles strokes wider than the shape.
The resource sweep is safe when unload listeners re-enter it.
VAOs and buffer listeners are released when a Geometry is destroyed.
Destroying a WebGPU renderer no longer destroys the shared GpuProgram.
Inactive graphics batches are ignored when creating bind groups.
The center of a nine-slice renders in canvas when borders cover the texture.
Fixes a BatcherPipe leak when a RenderGroup is destroyed.
Cached GPU render targets are released when a RenderTarget is destroyed.
Text, HTMLText and Graphics render correctly with a second renderer.
Per-target stencil state is kept on the backend render target.
Text and HTMLText textures are regenerated after WebGL context loss.
PixiJS types now compile with TypeScript 6 and 7 as well as 5; TypeScript 6 and 7 users should remove @webgpu/types from compilerOptions.types and use @types/web instead of the dom lib.
Idle WebGPU bind groups are swept by the renderer GC.
The WebGPU front face is updated when a reused pass changes flipY.
WebGPU MSAA textures no longer inherit autoGenerateMipmaps.
The WebGPU renderer is restored after a device loss.
SVG radial gradients no longer render as linear gradients.
Text detaches from a shared TextStyle when destroyed.
UBO offsets are preserved in the unsafe-eval polyfill.
Handles a missing base in bitmap font parsers.
Adds persistentDeviceId to FederatedPointerEvent.
Accounts for frame origin and rotation when filling graphics with textures.
Fixes upload signatures for Chrome 150 and later.
Copies the radius when copying from another RoundedRectangle.
Fixes selection of the vertex used for the first edge.
Fixes a trailing glyph after a glyph-less word-break character.
Handles null results from getShaderInfoLog when the context is lost.
Handles null results from getShaderSource when the context is lost.
The renderer's maxBatchableTextures value is now passed to non-default batchers.
ParticleContainer now respects the blend mode inherited from its ancestors; a blendMode set directly on the container is unchanged.
The canvas renderer now rounds the anchor offset when roundPixels is enabled.
Fixes a crash when text begins with whitespace.
Fixes pattern shearing when tileRotation is used on non-square sprites.
Prevents an error when using Application.domContainerRoot in Node.js.
Stroke-only Graphics masks now render correctly on the Canvas renderer.
Handles previously unhandled actions in the GraphicsPath.transform switch statement.
Handles literal < characters in tagged text.
Skips _applyMipRange for single-mip textures on iOS 18.0–18.1.
Fixes a baseline mismatch when tagStyles is used with lineHeight.
Fixes stale TextureMatrix state when pooled textures reuse the same reference.
Fixes tilePosition being divided by resolution when using the Canvas renderer.
Avoids play/mediaReady recursion before video dimensions are available.
Compressed textures now respect resolution specified in the URL, such as @0.75x.
Center-aligned text is now positioned correctly when words exceed wordWrapWidth.
Using addChildAt now emits the removed event.
Fixes a crash when a resource is destroyed in a batched group and removes listeners from old resources when setResource is used.
Bitmap text now guards against missing characters and kerning data.
Canvas text renders align: 'justify' by distributing extra word spacing.
Invalidates the cached source to prevent stale alpha reuse.
Offsets are now handled correctly.
Kerning values are now scaled correctly by fontScale.
Bounds now account for miter joins at sharp angles.
Empty Graphics now return valid empty bounds.
getLocalBounds no longer returns stale data between operations in the same frame.
NineSliceSprite now respects texture trim offset.
ParticleContainer rendering now applies the global filter offset.
Renderer.destroy() now removes all listeners.
Split text renders align: 'justify' by distributing extra word spacing.
Prevents filter corruption caused by mipmap separation in TexturePool.
Corrects mutual clamping of minFPS and maxFPS.
Modifier keys are now copied from TouchEvent to normalized touch objects.
Moving DOMPipe registration to init.ts fixes Web Worker support.
cullArea is interpreted in the container's local coordinate space and transformed to global coordinates before culling checks.
Passing a black tint now correctly applies the tint.
HTMLText now respects breakWords and no longer cuts off words that exceed wordWrapWidth.
HTMLText now respects the alpha value of its fill.
HTMLText now respects the alpha value of its stroke.
Custom parsers can now override src in Resolver.
Text now aligns correctly with right or center alignment, with a small positional adjustment.
The Video Loader now catches load errors.
Fixed garbage collection for bitmap text.
Message processing in the KTX worker now has error handling.
ParticleContainer types were improved.
Fixed RenderTexture ignoring the format setting in WebGL.
Corrected viewport Y calculation for root render targets.
SVG parsing now allows negative values for polygons and polylines.
The stage Container is created on initialization only if it does not already exist.
Application reinitialization now works properly.
Recognizes XML bitmap fonts that include versions.
Resolves a TypeScript annoyance with Container.filters.
Fixes a graphics memory leak and cleanup issue.
The assets resolver now correctly parses resolution and format from URLs in object sources.
Destroying a Texture no longer leaves the automatically added resize event listener on its TextureSource.
Corrects uBackTexture binding for filters that have blendRequired.
Fixes the bytesPerRow calculation for BufferImageSource in WebGPU.
Guards mask reset from a null reference.
Prevents errors during worker manager reset.