2 hours ago
react-three-fiber

v10.0.0-alpha.5

Alpha 5 is a types release. The WebGPU resource hooks now carry three's exact node generics, the stale TSL augmentations are gone, and the built declarations are compiled by a strict consumer fixture on every build. Alongside it: the reconciler oddities that strict-TypeScript consumers surfaced while working around the old types, and the single-canvas depth-attachment fix.

Types

  • useUniform and useUniforms keep three's exact UniformNode<TNodeType, TValue> generics and the input's exact keys. A number uniform is a Node<'float'>, so TSL math, mix() and bloom() accept it without a cast; .value is typed; an unknown key is an error (#3769, #3886, #3887).
  • ScopedStore distinguishes nested scopes from object-valued and callable (Fn()) leaves at runtime, and .scope(key) accepts an explicit schema generic for cross-call access.
  • The stale ShaderNodeObject and three/tsl Fn augmentations are gone. three's own Fn overloads, including the Fn(fn, 'void') statement-call form compute kernels use, are reachable again with R3F installed.
  • Matrix2 is an accepted uniform value (mat2), matching three's uniform() overloads.
  • StorageLike includes Storage3DTexture and StorageArrayTexture, so useGPUStorage accepts what compute.mdx documents.
  • once() is typed as the value the prop declares: translate={once(0, 0, 5)} and center={once()} typecheck without a cast.
  • On the /webgpu entry, Canvas's onCreated receives WebGPURootState, so WebGPU-only renderer members no longer need an instanceof narrow.
  • pnpm verify-types compiles a strict consumer fixture against the built declarations with skipLibCheck: false, for every entry.
  • Reader-mode useUniforms, useNodes, useBuffers and useGPUStorage accept an explicit schema: useUniforms<{ blurAmount: number }>() returns typed nodes for values registered elsewhere, instead of UniformNode<unknown>.
  • extend(THREE) accepts a whole module namespace without a cast; only its constructors are registered.
  • raycaster={{ params: { Points: { threshold: 0.2 } } }} typechecks: params is a partial, matching the runtime merge into the raycaster's defaults.
  • eventSource accepts any DOM Element, so an SVGRenderer's <svg> no longer needs a cast.
  • <primitive> keeps typed pointer events (onClick={(e) => ...} infers e) and accepts arbitrary props for the wrapped object.
  • The examples compile under strict TypeScript without a single as unknown as cast; the remaining as any sites are third-party gaps (three's Backend, @use-gesture) and are commented as such.

Bug Fixes

  • useTexture's onLoad receives the keyed record for record inputs, matching its declared type. It was handed useLoader's positional array, so textures.map.wrapT threw at runtime.
  • Prefixed elements (<threeLine>) no longer throw "ThreeLine is not part of the THREE namespace" on their first prop update.
  • A removed prop resets to the class default for every class. Any class whose constructor takes arguments (every material, geometry and camera) previously had the prop set to 0, turning a removed color black.
  • fromRef(ref, transform) maps the resolved sibling before assignment, so props that need the sibling wrapped are declarative: lightsNode={fromRef(lightRef, (l) => lights([l]))}.
  • Six-file .hdr cube sets load through HDRCubeTextureLoader in useEnvironment, <Environment> and the Canvas background prop, with linear color space.
  • A lone primary <Canvas id> owns the renderer's default canvas target, so its depth attachment follows the layout instead of the element's construction size (#3905).
  • Canvas honors the resize.debounce prop after the initial measurement (#3881).
  • useRenderPipeline callbacks receive a WebGPURenderer-typed state, may not return the hook-owned scenePass, and the hook's return narrows renderPipeline on isReady (#3901).
  • The Pointcloud example's fragment shader handles point colors correctly.

Examples

  • The demo registry is the one table of contents; the app derives its groups from it. Adds WebGPUFog and WebGPUPrimaryOnly, drops stale entries, and the examples cleanup from #3883.

eslint-plugin

  • no-clone-in-loop only flags .clone() calls. A loop variable named clone used as clone.position no longer trips it.
6 hours ago
zip.js

v2.12.0

What's Changed in v2.12.0

Breaking changes

  • The language encoding flag (general purpose bit 11) is now set only when the encoded filename or the encoded comment of an entry holds a byte outside printable ASCII, where it used to be set on every entry. Nearly every archive zip.js writes therefore differs from v2.11.4 byte for byte. Nothing is decoded differently, printable ASCII being spelled identically in UTF-8 and in Code Page 437, and it is how every other writer decides the flag. Control characters are excluded deliberately: the Code Page 437 table maps 0x01 to 0x1f and 0x7f to the IBM graphic characters rather than to the control characters themselves, so a name or a comment holding one of them keeps the flag and keeps round-tripping
  • EntryMetaData#filenameUTF8 and EntryMetaData#commentUTF8 returned by ZipWriter#add() now report the flag that was actually written, where they always reported true. They agree with the values read back from the archive, which the previous behaviour contradicted for every entry whose name is printable ASCII
  • HttpReader now throws an ERR_HTTP_STATUS error for any status outside 2xx, where it accepted everything below 400. A 304 answered by a caching proxy to a conditional request was read as a successful empty response, and the archive failed later with an unrelated end of central directory error
  • The checkPasswordOnly option combined with passThrough set to true now verifies the password. It reported every password as valid, wrong ones included, and streamed the whole entry instead of stopping after the first block: passing the encryption stage through left nothing able to raise the sentinel that means "the password is correct"
  • ZipDirectoryEntryImportOptions#passThrough and the passThrough option of ZipDirectoryEntryExportOptions#readerOptions are typed boolean instead of boolean | "compressed". The filesystem API has always refused "compressed" at runtime, the types now say so and code passing it stops compiling

New features

  • New passThrough value, "compressed", which passes the compression stage through and still runs the encryption stage. It is what re-encrypting an entry without recompressing it needs: reading with it decrypts and does not inflate, writing with it encrypts and does not deflate. passThrough is a depth rather than a pair of switches, and encryption is the outer stage
  • New entry option on ZipWriter#add(), which takes the entry read from another archive and derives the ten or so values a copy needs from it. Copying an entry by forwarding the obvious subset used to produce silent corruption, an encrypted entry landing marked encrypted=false over untouched ciphertext. The oracle the option is built on is byte identity: an archive copied entry by entry with { passThrough: true, entry } is the archive it was read from
  • New checkLocalFilename option, which selects whether the filename of the local header is compared, independently of whether a difference throws. The two axes were conflated: strictness: "strict" compared the filename and rejected, everything else did neither, so a mismatched filename could never be reported as a warning. { checkLocalFilename: true, checkLocalDirectory: false } now reports it on EntryMetaData#warnings
  • ZipDirectoryEntry#exportZip() accepts a ZipWriter instance, the symmetric counterpart of ZipDirectoryEntry#importZip() accepting a ZipReader. The entries are added to that writer and the archive is left open, so the caller closes it, can add entries of its own before or after, can export several trees into one archive, and can read ZipWriter#warnings
  • New ZipWriter#warnings channel, reporting the adjustments the writer makes silently: an entry stored because no deflate implementation is reachable, a date clamped to the MS-DOS range with no extra field left to carry the original value. Each reason is deposited once, with the filename of the first entry it applied to
  • ZipReader and ZipWriter implement Symbol.asyncDispose, so await using finalizes the archive on scope exit
  • New outputSize property on the errors thrown by the codecs, holding the number of bytes that reached the writer before the failure. It is what a caller salvaging an archive after a mid-entry failure needs to know
  • ZipWriter#add() accepts null as the reader of an entry with no content
  • Every user-visible error message is now exported as a constant, ERR_ABORTED included, and an audit in the test suite keeps it that way across the fourteen builds
  • configure() checks the type of baseURI, workerURI and wasmURI, which used to fail much later and quietly

Bug fixes

  • The codecs of a reader stream are now released on demand and on cancel, instead of being held until the whole archive was read
  • A failure raised on the main thread while a codec task runs over the worker message protocol now carries outputSize, so the writer advances by the bytes that really reached it. It did not, and the central directory of an archive salvaged after such a failure was written short of the real positions, by 655360 bytes in the measured case
  • Terminating the workers no longer leaves the WebAssembly module torn down while an operation that reloaded it believes it is loaded, which silently substituted the native gzip path for the rest of the process
  • preventClose no longer makes FileEntry#arrayBuffer() and ZipReaderStream hang forever. Both build their writable internally, exactly like the Writer instances the option is documented to ignore
  • A copy made with the entry option now derives the deflate level bits, the language encoding flag and the unix extra field type of the source entry. It dropped the level bits, cleared bit 11 on an ASCII-named source that carried it, and rewrote a 0x7855 record as a 0x7875 one
  • The refusal to change the last modification date of a ZipCrypto entry no longer fires under passThrough: "compressed", where the entry is encrypted again or not encrypted at all and the date is free to change
  • ZipDirectoryEntry#exportFileSystemHandle() now refuses the "compressed" value of passThrough spelled at the top level, as it already did through readerOptions. It wrote the raw deflated bytes into the extracted files instead
  • ZipDirectoryEntry#getExportedSize() is async, so its option validation errors reject instead of throwing synchronously out of a method declared to return a promise
  • The ERR_INVALID_UNCOMPRESSED_SIZE error now carries outputSize, which the most common corruption shape did not set
  • An entry written with passThrough and no crc32 to declare is refused instead of being written with a wrong one, and AE-2 is written when encrypting passthrough content
  • The local header and the central directory now agree on the extended timestamp record

Documentation

  • The extendedTimestamp remark no longer claims that EPUB allows an extra field on its mimetype entry. OCF states that there must not be one, which is what pins the byte offset of application/epub+zip so a reader can sniff the format without parsing the archive, and epubcheck reports it as an error. ODF and EPUB need the same pair of options
  • Twelve other claims corrected against what the code does, among them: the precedence of the values the entry option reads, which beat the options of the ZipWriter rather than being defaults against them; the condition under which WARNING_CLAMPED_LAST_MODIFICATION_DATE appears; the combinations under which LocalDirectory#rawFilename is defined; the status codes ERR_HTTP_STATUS covers; what ERR_INVALID_URI validates; and the determinability of getExportedSize() for names holding a slash, obsolete since implicit directories were exempted
  • The options of ZipWriter#close() are documented as belonging to the caller closing the archive when a ZipWriter is passed to exportZip(), globalComment and signCentralDirectory included
  • The entry option points at the branch it selects for an encrypted source: it supplies encrypted, so copying such an entry with passThrough set to true writes the ciphertext as-is and keeps the password it was encrypted with, while a password in scope encrypts the other entries only. Re-keying is what "compressed" is for

Tests and continuous integration

  • The whole lint script runs in CI, deno lint included, and the fidelity harness runs in test-ci
  • New fixture and test covering a Windows Explorer zip64 archive: a Deflate64 entry too large for 32 bits, in an archive carrying no zip64 end of central directory, with the two headers sentinelling different size fields
  • New tests for the passthrough stages, the copy entry option, the async dispose path, the reader stream release, the writer warnings and the filesystem export into a ZipWriter
  • The type tests are checked to be registered in a tsconfig, and the API export surface is audited across every build

Full Changelog: https://github.com/gildas-lormeau/zip.js/compare/v2.11.4...v2.12.0

6 hours ago
router

Release 2026-09-08 01:52

Release 2026-09-08 01:52

Changes

Fix

  • solid-router: respect server flag during development SSR (#8254) (a09b50cac1) by @brenelz

Packages

  • @tanstack/solid-router@2.0.0-rc.7
  • @tanstack/solid-start@2.0.0-rc.7
  • @tanstack/solid-start-client@2.0.0-rc.7
  • @tanstack/solid-start-server@2.0.0-rc.7
6 hours ago
router

@tanstack/solid-router@2.0.0-rc.7

Patch Changes

  • #8254 a09b50c - Fall back to the router instance's server flag during development SSR. This prevents router construction from entering client hydration on the server and restores provider-owned loading and match-state serialization.
6 hours ago
router

@tanstack/solid-start-client@2.0.0-rc.7

Patch Changes

  • Updated dependencies [a09b50c]:
    • @tanstack/solid-router@2.0.0-rc.7
6 hours ago
router

@tanstack/solid-start@2.0.0-rc.7

Patch Changes

  • Updated dependencies [a09b50c]:
    • @tanstack/solid-router@2.0.0-rc.7
    • @tanstack/solid-start-client@2.0.0-rc.7
    • @tanstack/solid-start-server@2.0.0-rc.7
6 hours ago
router

@tanstack/solid-start-server@2.0.0-rc.7

Patch Changes

  • Updated dependencies [a09b50c]:
    • @tanstack/solid-router@2.0.0-rc.7
9 hours ago
next.js

v16.4.0-canary.20

Misc Changes

  • test(turbopack): remove dead top-level task unmarks: #98246
  • Fix flaky successive HMR changes test: #97610
  • docs: Remove version label from Turbopack in Pages Router: #98316
  • turbo-tasks-backend: fix strongly consistent read hanging on a canceled task: #98312

Credits

Huge thanks to @lukesandberg, @sokra, and @icyJoseph for helping!

10 hours ago
konva

10.4.0

Features

  • destroy event; Transformer, Tween, pointer captures and stage timers release destroyed nodes (Anton Lavrevov)

Bug Fixes

  • size the buffer canvas of cache() and toCanvas() to the target, allocate it lazily and release it (Anton Lavrevov)
  • memoize isCSSFiltersSupported() and release its probe canvas (Anton Lavrevov)
  • stop the frame interval of a Sprite on destroy() (Anton Lavrevov)
  • keep descendant caches on clearCache() and release the previous canvases on re-cache (Anton Lavrevov)
  • setAbsolutePosition() under a zero-scale ancestor no longer writes NaN (Anton Lavrevov)
  • negative radius and cornerRadius no longer throw and blank the layer (Anton Lavrevov)
  • batchDraw() no longer freezes the layer after a throwing draw (Anton Lavrevov)
  • Blur keeps the colour of semi-transparent pixels and survives large radii (Anton Lavrevov)
  • Tween ownership bookkeeping (Anton Lavrevov)
  • clamp a negative cornerRadius in drawRoundedRectPath (Anton Lavrevov)
  • hasShadow() follows shadowOffsetX and shadowOffsetY changes (Anton Lavrevov)
  • cache() and transform batching clean up after a throw (Anton Lavrevov)
  • split text into graphemes with Intl.Segmenter (Anton Lavrevov)
  • toObject() copies attributes instead of mutating them, accepts frozen values and skips methods named like custom attributes (Anton Lavrevov)
  • drawHitFromCache() honours hitCanvasPixelRatio (Anton Lavrevov)
  • Path arc bounds, SVGO arc flags, empty data, and segment-relative getPointAtLength (Anton Lavrevov)
  • Transformer follows the grabbing pointer, guards zero-size boxes, and resolves its anchors directly (Anton Lavrevov)
  • Tween of component attributes, of array attributes the node lacks, and to() no longer mutates its params (Anton Lavrevov)
  • absolute getters and derived caches of nodes under a cached container, fire(type, null), non-finite child rects (Anton Lavrevov)
  • Canvas size equals the truncated bitmap at a fractional pixel ratio and keeps its logical size; setSizeIfChanged() with NaN (Anton Lavrevov)
  • drag with several pointers releases only the lifted pointer; startDrag() without an event ends on release (Anton Lavrevov)
  • Transformer suppresses the hit graph of its own layers only (gate moved to Layer.shouldDrawHit), forwards getClientRect(config), honours top in getAbsoluteTransform() (Anton Lavrevov)
  • RegularPolygon without sides, Sprite getSelfRect() and guards for a missing animation or frame (Anton Lavrevov)
  • report a non-finite number at the core aggregation points instead of silently drawing nothing (Anton Lavrevov)
  • Tag.getSelfRect() grows by exactly the pointer for a left or right pointer (Anton Lavrevov)
  • eleven one-line bugs (Anton Lavrevov)
  • layer.size() no longer resizes the layer canvas; getChildren() returns a copy (Anton Lavrevov)
  • review follow-ups for the polishing batch (Anton Lavrevov)
  • Transformer follows node changes made between pointer moves of a resize (Anton Lavrevov)

Documentation

  • JSDoc that contradicted the code, wrong names and types, examples that did not run (Anton Lavrevov)
  • rewrite the unreleased changelog in the usual short style (Anton Lavrevov)

Performance Improvements

  • keep a running grapheme index for charRenderFunc instead of recounting previous lines per character (Anton Lavrevov)
  • upload filter chain result once and stop reallocating the filter canvas (Anton Lavrevov)
  • release the per-layer canvases of a stage export and skip the client rect when the box is given (Anton Lavrevov)
  • resize a canvas in one pass (Anton Lavrevov)
  • drop the two Maps every node allocated (Anton Lavrevov)
  • wrap fixed-width text in linear time (Anton Lavrevov)
  • resolve edge pixels of the hit graph directly and bound the search (Anton Lavrevov)
  • relayout listeners of Text and TextPath on the prototype, listener cache keyed by class (Anton Lavrevov)
  • getClientRect() no longer scans the subtree at every nesting level (Anton Lavrevov)
  • drag reads pointer positions once per stage, skips the redraw on a plain click, and resets the drag position per drag (Anton Lavrevov)
  • hoisted component getter names, single-array Transform, direct drawImage, hoisted TypedArray (Anton Lavrevov)
  • Animation keeps its running animations in a Set; an animation stopping itself no longer skips the next one; setLayers() copies its argument (Anton Lavrevov)

Tests

Builds

  • keep JSDoc in the published .d.ts files (Anton Lavrevov)
  • size budget of 48 KB, CI runs size, import and type checks on Node 22 (Anton Lavrevov)
  • release script runs the tests, drops the empty cdn-link commit and the hard-coded directory (Anton Lavrevov)
  • named exports and prepublishOnly (Anton Lavrevov)
  • drop the named exports and the separate UMD entry (Anton Lavrevov)

Chores

  • remove dead Node internals and hoist the non-bubbling event list (Anton Lavrevov)
  • build the browser tests from a clean Parcel cache (Anton Lavrevov)
  • drop the unregistered fillLinearRadial* declarations, build ellipses with context.ellipse() (Anton Lavrevov)
  • remove dead code (hit fill/stroke duplicates, lineDash fallbacks, trace branch, unused globals, addDeprecatedGetterSetter) (Anton Lavrevov)
  • red/green/blue registered once with the shared component validator, alpha uses afterSetFilter (Anton Lavrevov)
  • remove dead code; cloneObject() copies nested arrays and typed arrays; shadow probe releases its canvas (Anton Lavrevov)
  • resolve every TODO comment in src and tests (Anton Lavrevov)
  • remove dead code, dead files and unused devDependencies (Anton Lavrevov)

Commits

  • ad94d9d: update CHANGELOG (Anton Lavrevov)
  • f142b6e: update CHANGELOG (Anton Lavrevov)
  • 7ee3232: update CHANGELOG (Anton Lavrevov)
  • c9f3830: update CHANGELOG (Anton Lavrevov)
  • 0f88c28: update CHANGELOG (Anton Lavrevov)
  • declarations that contradicted the runtime or the docs (Anton Lavrevov)
  • ac581a4: update CHANGELOG with new version (Anton Lavrevov)
  • e51c16d: build for 10.4.0 (Anton Lavrevov)
12 hours ago
electron

electron v45.0.0-alpha.5

Note: This is an alpha release. Please file new issues for any bugs you find in it.

This release is published to npm under the alpha tag and can be installed via npm install electron@alpha, or npm install electron@45.0.0-alpha.5.

Release Notes for v45.0.0-alpha.5

Fixes

  • File System Access permission requests and the file-system-access-restricted event are scoped to the requesting document, grants are reset when the origin's last page closes, and write access works in in-memory sessions. #53690 (Also in 43)
  • Fixed Tray icons not appearing when running inside Flatpak or Snap sandboxes on Linux. #53654 (Also in 44)
  • Fixed app.getGPUInfo('complete') stalling the GPU process for several seconds on some Windows systems. #53645 (Also in 44)
  • Fixed session.setPermissionCheckHandler receiving the top-level origin and a null webContents for hid and usb checks made from a subframe. #53679 (Also in 43, 44)
  • Fixed webContents.on(), removeListener() and removeAllListeners() throwing "Object has been destroyed" for console-message listeners after the WebContents was destroyed. #53495 (Also in 42, 43, 44)
  • Fixed a crash on Linux when process.env was written while another thread was reading the environment, and a memory leak when a worker thread exits. #53508 (Also in 42, 43, 44)
  • Fixed a possible crash on Windows when a file dialog was shown for a window that was being closed at the same time. #53586 (Also in 42, 43, 44)
  • Fixed a renderer crash when the main process sent IPC to, or a page navigated, a same-process window.open() child whose contextIsolation differed from its opener's. #53538 (Also in 42, 43, 44)
  • Fixed a spurious node_init error being logged when creating a ShadowRealm with Node.js integration enabled. #53578 (Also in 44)
  • Fixed crashes in setDisplayMediaRequestHandler when the granted frame had been destroyed or another tab was granted by id. #53673 (Also in 42, 43, 44)
  • Fixed several non-functional DevTools integrations: the Security panel's "View certificate" button, Ctrl+wheel zooming inside DevTools, and DevTools keyboard shortcuts (e.g. F8) while the inspected page has focus. #53471 (Also in 43, 44)
  • Fixed window state not being persisted when a window entered or left fullscreen, or was maximized or unmaximized, without also being moved or resized. #53577 (Also in 44)
  • openExternal permission requests started by a frame that has since gone away are attributed to that frame's origin rather than to the navigating page. #53696 (Also in 42, 43)
  • pointerLock and keyboardLock permission requests now report the requesting frame, and execCommand('paste') requires user activation in the frame that calls it. #53692 (Also in 44)

Other Changes

  • Electron's internal JavaScript bundles are no longer listed in require('module').builtinModules or loadable through process.getBuiltinModule(). #53624
  • Fixed the app becoming unresponsive when a page has a very large number of app-region draggable elements. #53596 (Also in 43, 44)
  • Improved throughput of responses that protocol.handle handlers return straight from net.fetch. #53379 (Also in 44)