4 hours ago
rollup

v4.63.4

4.63.4

2026-09-19

Bug Fixes

  • Ensure meta information of the cached module is exposed in shouldTransformCachedModule (#6442)
  • Do not create invalid code if import attribute values contain special characters (#6502)

Pull Requests

  • #6429: ci: collect Rust coverage from JS tests in dedicated job (@lukastaegert)
  • #6442: fix: expose cached module meta during cache checks (@ychampion, @lukastaegert)
  • #6496: docs: name the parameter runHook actually takes (@darkdi, @lukastaegert)
  • #6502: Escape quotes and backslashes in import attribute values (@dylanpulver, @lukastaegert)
  • #6517: Improve agent instructions (@lukastaegert)
  • #6518: fix(deps): update minor/patch updates (@renovate[bot])
  • #6519: Request Copilot code review via workflow (@lukastaegert)
7 hours ago
scalar

Release 2026-09-19

Releases

@scalar/workspace-store@0.63.0

Minor Changes

  • #10261: Add getDocumentRevision(document), a counter the store bumps on every write to a document. A consumer caching a derivation of a schema node can validate the entry against it in constant time, instead of walking the subtree to see whether anything moved. It reads the same from any view of the document, including one with the reactive and detect-changes proxies stripped for reads, and returns 0 for a document no store tracks.
  • #10261: Type the result of resolve.schema as read-only. A resolved schema is the document's own node or a shallow merge over it, so writing to it writes into the document behind the store's back; every change belongs in a store mutation, and a caller that needs a modified shape copies what it needs first. No in-repo consumer had to change.

Patch Changes

  • #10261: Make rendering from the store cheaper: the detect-changes proxy no longer allocates a path on every property read, getResolvedRefDeep stops deep-unpacking every node it visits, resolve.schema builds its composed typebox schema once, and getExampleFromSchema builds its options cache key once per call instead of once per node.
  • #10261: Follow chains of references when resolving. A reference can point at a second reference — resolve() on a static or SSR workspace leaves the component behind as a { $ref: '#/x-ext/<hash>', $global: true } stub with the content under x-ext — so getResolvedRef and getResolvedRefDeep now hop through references that carry nothing but a $ref until they reach the node itself, instead of handing back the stub. A reference that carries keywords of its own stays its own hop, since it is a schema in its own right.

@scalar/fastify-api-reference@1.69.2

@scalar/nuxt@0.6.70

@scalar/agent-chat@0.12.33

@scalar/api-client@3.19.2

@scalar/api-client-react@2.0.47

@scalar/api-reference@1.69.2

@scalar/api-reference-react@0.9.70

@scalar/blocks@0.1.19

@scalar/mock-server@0.14.3

@scalar/oas-utils@0.20.2

@scalar/openapi-to-markdown@1.0.1

@scalar/pre-post-request-scripts@0.4.45

@scalar/server-side-rendering@0.1.49

@scalar/sidebar@0.11.4

@scalarapi/docker-api-reference@0.6.4

Bundled API Reference

  • @scalar/api-reference@1.69.2

@scalar/aspire@0.11.22

Bundled API Reference

  • @scalar/api-reference@1.69.2

@scalar/aspnetcore@2.17.6

Bundled API Reference

  • @scalar/api-reference@1.69.2

@scalar/aws-lambda@0.2.10

Bundled API Reference

  • @scalar/api-reference@1.69.2

@scalar/azure-functions@0.2.16

Bundled API Reference

  • @scalar/api-reference@1.69.2

@scalar/java-integration@0.6.70

Bundled API Reference

  • @scalar/api-reference@1.69.2

scalar_api_reference@0.2.4

Bundled API Reference

  • @scalar/api-reference@1.69.2

@scalar/mock-server-docker@0.2.60

scalar-app@1.1.30

11 hours ago
next.js

v16.4.0-canary.36

Misc Changes

  • Persist resurrected tasks as new tasks: #98729
  • Rspack: Remove bincode dependency from rspack by way of turbo-unix-path: #98855
  • Pin tasks across restore waiter handoff: #98728
  • test: honor skipStart for Vercel deployments: #98776
  • Use internal prefix for Turbopack shutdown env: #98747
  • test: retry waiting for ISR fallback in prefetch-static-shell: #98884
  • Fix generated Turbopack GC option docs: #98888
  • Add agent feedback behavior evals: #98887
  • Add experimental agent feedback workflow: #98582
  • Clean up unnecessary output asset creation: #98834
  • Properly disable laziness on next/dynamic: #98828
  • Set experimental.agenticAutoUpgrade after successful upgrade: #98871
  • example(cache-handler-redis): fix connection leak, hangs on a down Redis, and cross-page tag invalidation: #98716
  • Do not check Node version while agentic upgrade: #98852
  • test: run cargo unit tests with miri as well: #97535
  • test: unflake instant-validation: #98854

Credits

Huge thanks to @sokra, @bgw, @gnoff, @wbinnssmith, @lubieowoce, @jimmyhmiller, @aurorascharff, @devjiwonchoi, @leejpsd, and @mischnic for helping!

12 hours ago
remix

static-middleware v0.4.16

Patch Changes

12 hours ago
remix

route-pattern v0.24.1

Patch Changes

  • Reject backslashes in createHref() hostname variables and wildcards so generated URLs retain the intended hostname.

  • Count variable scans and capture comparisons toward maxMatchWork so matching stops when optional or wildcard patterns exceed the configured work limit.

12 hours ago
remix

tar-parser v0.8.0

Minor Changes

  • BREAKING CHANGE: parseTarHeader(), parseTar(), and TarParser now default to pathPolicy: 'relative', throwing TarParseError for empty entry names or link targets, absolute paths, Windows drive prefixes, backslashes, and embedded NULs. Entry names cannot contain .. path components. Symlink targets are checked relative to the link's parent directory, and hard-link targets relative to the archive root; .. components are allowed only when resolution stays within the archive. Valid paths retain their spelling, including nested paths, ./ prefixes, and trailing directory slashes. Applications that need to inspect or process unrestricted archive paths can opt into pathPolicy: 'preserve':

    -await parseTar(archive, handleEntry)
    +await parseTar(archive, { pathPolicy: 'preserve' }, handleEntry)

    The same option works with parseTarHeader() and new TarParser(). It does not disable archive limits or header structure validation. Path validation applies after ustar prefixes and GNU/PAX overrides, before an entry reaches the handler. GNU long names and link targets now omit their terminating NUL under either policy. Extractors must still enforce containment on their destination filesystem, including when existing or archived symlinks are present.

  • BREAKING CHANGE: parseTar() and TarParser now default to limits of 2 MiB per entry body, 20 MiB of total archive input, and 5,000 entries, where previously none were limited. Applications processing larger archives must configure maxEntrySize, maxTotalSize, and maxEntries to raise the applicable limits, or set any limit to Infinity to disable it:

    -await parseTar(archive, handleEntry)
    +await parseTar(
    +  archive,
    +  { maxEntrySize: Infinity, maxTotalSize: Infinity, maxEntries: Infinity },
    +  handleEntry,
    +)

    The entry size and count limits include PAX/GNU metadata entries and are checked before reading their bodies or invoking entry handlers. Padding and end markers do not count as entries. The total size limit counts all input bytes, including headers, padding, and metadata, after any upstream decompression. Exceeding a limit throws the exported MaxEntrySizeExceededError, MaxTotalSizeExceededError, or MaxEntriesExceededError, all extending TarParseError.

    Global PAX metadata now applies to subsequent entries even without a local PAX header, so global sizes are parsed and checked against the entry limit. Local PAX values continue to take precedence.

Patch Changes

  • Buffer TarEntry content using the bytes received, validate octal, base-256, and PAX entry sizes, and reject unfinished body readers when archive parsing fails.

  • Reduce allocation and copying when GNU or PAX metadata arrives in small chunks. Metadata buffering grows with the bytes received and continues to honor the configured archive limits.

12 hours ago
remix

session-middleware v0.5.0

Minor Changes

  • BREAKING CHANGE: Session middleware now checks configured cookie maxAge and expires before loading session data from any backend. Existing cookies without expiration metadata start a new session when a lifetime is configured. maxAge renews when an updated session emits a cookie; reads alone do not renew it. Sessions without a configured lifetime and backend TTL settings are unchanged. Backend record cleanup remains the storage provider's responsibility.

Patch Changes

  • Session cookies now default to Secure for HTTPS request URLs. HTTP development requests and explicit secure settings retain their configured behavior. When HTTPS terminates at a proxy, expose the original request URL or configure secure: true.

  • Bumped @remix-run/* dependencies:

12 hours ago
remix

test v0.6.1

Patch Changes

  • Server-only test runs no longer load the optional Playwright peer dependency, so remix test --type server works when Playwright is not installed.
12 hours ago
remix

spa v0.1.2

Patch Changes

12 hours ago
remix

ui v0.10.0

Minor Changes

  • BREAKING CHANGE: Navigations that specify a named frame that is not currently mounted now perform a document navigation instead of reloading the top frame. Fresh links, forms, and navigate() calls are left to the browser, preserving native form methods and bodies, while back and forward traversal reloads the destination document. Omit the target when the navigation should always reload the top frame:

    -<a href="/account" data-rmx-target="optional-account">
    +<a href="/account">
  • BREAKING CHANGE: The default resolveFrame now only fetches same-origin sources and follows same-origin redirects. Apps that load cross-origin frame content must provide a custom resolveFrame to run().

    Validate navigation source overrides regardless of the target, falling back to document navigation for invalid or cross-origin overrides.

  • BREAKING CHANGE: Raw HTML props now require an opaque value created by unsafeHTML(). This applies to innerHTML and both iframe srcDoc spellings (srcDoc and srcdoc). It prevents attacker-controlled prop spreads from activating HTML parsing with plain strings or JSON-shaped objects. outerHTML is not supported because it would replace a reconciler-owned element. unsafeHTML() is an explicit authorization boundary; it does not sanitize or otherwise modify its input.

    -import type { Handle } from 'remix/ui'
    +import { unsafeHTML } from 'remix/ui'
    +import type { Handle } from 'remix/ui'
    
     function Content(handle: Handle<{ html: string }>) {
    -  return () => <div innerHTML={handle.props.html} />
    +  return () => <div innerHTML={unsafeHTML(handle.props.html)} />
     }

Patch Changes

  • Ignore invalid host prop names and reserved DOM mutation properties during server rendering and client reconciliation. Block javascript: URLs in executable URL attributes while preserving other URL schemes and non-executable attributes. Use the on() mixin for events; the explicit innerHTML API and standard DOM, data-*, aria-*, SVG, and custom-element properties continue to work as before.

  • Fix duplicated text during hydration when a browser splits long server-rendered text into multiple DOM nodes, including chunks that span adjacent text children (see #11591).

  • Avoid attaching duplicate event handlers when a client entry imports and renders another client entry, including through fragments and wrapper components. Preserve deferred removal and exit animations when removing nested client entries (see #11844).

  • Restore the previous named frame from handle.frames.get(name) when a more recently mounted frame with the same name unmounts.