6 hours ago
pixijs

v8.18.0

💾 Download

Installation:

npm install pixi.js@8.18.0

Development Build:

Production Build:

Documentation:

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.
    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.
    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'.
    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.
    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.
    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 rope thickness, decoupling it from the texture's height. Omitting width preserves the previous texture.height default.
    import { MeshRope, Point, Texture } from 'pixi.js';
    
    const points = [new Point(0, 0), new Point(100, 50), new Point(200, 0)];
    
    const rope = new MeshRope({
        texture: Texture.from('snake.png'),
        points,
        width: 40,
    });
  • feat: add a default anchor to texture generation by @ksv90 in https://github.com/pixijs/pixijs/pull/12011
    • renderer.generateTexture() accepts a defaultAnchor option that's forwarded onto the produced Texture. RenderTexture.create() also gains a textureOptions parameter to pass through fields like defaultAnchor to the underlying Texture.
    import { Graphics, Sprite } from 'pixi.js';
    
    const shape = new Graphics().circle(0, 0, 50).fill(0xff3366);
    
    const texture = app.renderer.generateTexture({
        target: shape,
        defaultAnchor: { x: 0.5, y: 0.5 },
    });
    
    const sprite = new Sprite(texture);
    sprite.position.set(200, 200); // centered by default

🐛 Fixed

🧹 Chores

New Contributors

9 hours ago
rspack

v2.0.0-rc.2

What's Changed

Performance Improvements ⚡

New Features 🎉

Bug Fixes 🐞

Refactor 🔨

Document Updates 📖

Other Changes

New Contributors

Full Changelog: https://github.com/web-infra-dev/rspack/compare/v2.0.0-rc.1...v2.0.0-rc.2

10 hours ago
tdesign-vue-next

tdesign-vue-next@1.19.1

🌈 1.19.1 2026-04-14

🐞 Bug Fixes

  • Dropdown @RSS1102 (#6600)
    • 修复 panelTopContentpanelBottomContent 默认不跟随面板内容滚动的问题
    • 修复多层下拉菜单配置 panelTopContent 后渲染位置错误的问题
  • Menu: 修复 1.19.0 版本更新导致部分菜单使用场景渲染异常的问题 @uyarn (#6602)
  • Slider: 修复 label 值为 function 类型时控制台警告 @liweijie0812 (#6601)

🐞 Bug Fixes

  • Dropdown @RSS1102 (#6600)
    • Fixed an issue where panelTopContentand panelBottomContentdo not scroll with panel content by default.
    • Fixed incorrect rendering position of multi-level dropdown menus when panelTopContentis configured.
  • Menu: Fixed an issue where rendering of certain menu elements was incorrect after the 1.19.0 update @uyarn (#6602)
  • Slider: Fixed a console warning that occurred when the label value was of function type @liweijie0812 (#6601)
21 hours ago
router

Release 2026-04-13 23:31

Release 2026-04-13 23:31

Changes

Fix

  • router-core: avoid intermediate success state for async notFound (#7184) (16f6892d6b) by @schiller-manuel

Packages

  • @tanstack/react-router@1.168.21
  • @tanstack/react-start@1.167.39
  • @tanstack/react-start-client@1.166.38
  • @tanstack/react-start-rsc@0.0.18
  • @tanstack/react-start-server@1.166.39
  • @tanstack/router-cli@1.166.33
  • @tanstack/router-core@1.168.15
  • @tanstack/router-generator@1.166.32
  • @tanstack/router-plugin@1.167.22
  • @tanstack/router-vite-plugin@1.166.37
  • @tanstack/solid-router@1.168.19
  • @tanstack/solid-start@1.167.35
  • @tanstack/solid-start-client@1.166.35
  • @tanstack/solid-start-server@1.166.36
  • @tanstack/start-client-core@1.167.17
  • @tanstack/start-plugin-core@1.167.34
  • @tanstack/start-server-core@1.167.19
  • @tanstack/start-static-server-functions@1.166.33
  • @tanstack/start-storage-context@1.166.29
  • @tanstack/vue-router@1.168.19
  • @tanstack/vue-start@1.167.35
  • @tanstack/vue-start-client@1.166.35
  • @tanstack/vue-start-server@1.166.36
21 hours ago
next.js

v16.2.1-canary.38

Core Changes

  • Ensure x-nextjs-data header is only set during resolve: #92752

Credits

Huge thanks to @ijjk for helping!

21 hours ago
next.js

v16.2.1-canary.37

Core Changes

  • Exclude trace files from directory deletion in builds: #92486
  • Switch segment prefetch cache miss response from 204 to 404: #92751

Misc Changes

  • Re-enable sccache: #92746

Credits

Huge thanks to @lukesandberg, @mmastrac, and @acdlite for helping!

21 hours ago
router

Release 2026-04-13 23:10

Release 2026-04-13 23:10

Changes

Fix

  • docs: correct server function name in example (#7173) (f1a4973d41) by @MoonBrillante

Chore

  • stabilize tests (#7185) (c3d525924d) by @schiller-manuel

Packages

  • @tanstack/react-router@1.168.20
  • @tanstack/react-start@1.167.38
  • @tanstack/react-start-client@1.166.37
  • @tanstack/react-start-rsc@0.0.17
  • @tanstack/react-start-server@1.166.38
23 hours ago
router

Release 2026-04-13 21:11

Release 2026-04-13 21:11

Changes

Fix

  • add react-server server export for react-start (#7180) (7324b98d11) by @schiller-manuel

Packages

  • @tanstack/react-start@1.167.37
23 hours ago
react-router