1 hours ago
slate

slate-react@0.133.6

Patch Changes

  • #6229 c486bad Thanks @dylans! - Move the caret to the empty last line of a block that ends with a newline when pressing ArrowUp from the block below in Chrome and Safari, which skipped that block natively.

  • #6226 a8329a2 Thanks @dylans! - Copy initialValue nodes that another editor is already using, so two Slate components given the same value render and edit independently instead of throwing "Unable to find the path for Slate node". Requires slate-dom 0.133.6 or newer.

  • #6225 cb788f8 Thanks @dylans! - Extend the selection from a selected void when Shift-clicking text, instead of leaving it collapsed in the void in Chromium.

1 hours ago
slate

slate-dom@0.133.6

Patch Changes

  • #6228 3a5e736 Thanks @dylans! - Return the correct path from findPath when it is called after an operation but before the editor re-renders, such as in onChange, instead of throwing or returning the old path.

  • #6226 a8329a2 Thanks @dylans! - Copy initialValue nodes that another editor is already using, so two Slate components given the same value render and edit independently instead of throwing "Unable to find the path for Slate node". Requires slate-dom 0.133.6 or newer.

3 hours ago
slate

slate-react@0.133.5

Patch Changes

  • #6224 84f047c Thanks @dylans! - Replace an expanded selection correctly when an IME composition starts right after selecting it. The selection is now synced before the composition starts, and Firefox no longer crashes or leaves the replaced text in the document.

  • #6222 c333eed Thanks @dylans! - Render an empty block right-to-left when the nearest sibling block with text is right-to-left, so a new line after Hebrew or Arabic text starts on the right.

  • #6220 3eed905 Thanks @dylans! - Keep input, selection and history events from native contenteditable regions nested inside non-editable containers out of the surrounding Slate editor. Preserve Slate text and event hosts inside custom editable islands.

  • #6223 8c929a8 Thanks @dylans! - Keep the Firefox caret on the new line after a trailing soft break without adding zero-width characters to the document. Preserve selection offsets and copied text around the extra rendering newline.

    Requires slate-dom 0.133.5 or newer for the matching DOM selection mapping.

  • #6219 8e8cf36 Thanks @dylans! - Stop re-rendering every text node in a block when only one of them changes. Text and leaf components now compare what they use from the parent (its properties, whether the text is its last child, and whether the block is empty) instead of the parent object itself.

  • #6221 270a4a0 Thanks @dylans! - Call deletion overrides in WebKit when Backspace at the start or Delete at the end of a document does not emit beforeinput.

3 hours ago
slate

slate-dom@0.133.5

Patch Changes

  • #6220 3eed905 Thanks @dylans! - Keep input, selection and history events from native contenteditable regions nested inside non-editable containers out of the surrounding Slate editor. Preserve Slate text and event hosts inside custom editable islands.

  • #6223 8c929a8 Thanks @dylans! - Keep the Firefox caret on the new line after a trailing soft break without adding zero-width characters to the document. Preserve selection offsets and copied text around the extra rendering newline.

    Requires slate-dom 0.133.5 or newer for the matching DOM selection mapping.

3 hours ago
scalar

Release 2026-10-12

Releases

@scalar/api-client@3.23.0

Minor Changes

  • #10555: Show empty optional fields of expanded object query parameters in a searchable Add parameter picker.

Patch Changes

  • #10551: Show Reset to default on authentication fields only when the field has a default that differs from its current value (the document or configured value, or the current page URL for the OAuth2 redirect URL). A cleared OAuth2 access token keeps the action so you can get back to the Authorize form. The show password toggle only appears once a field has a value, and an emptied field goes back to masked.
  • #10559: Clean up Biome warnings in package code and tests. Handle rejected debounced callbacks and await streaming writes.
  • #10555: Keep expanded query parameter checkboxes independent and preserve disabled field values while excluding them from requests.
  • #10506: Organize imports consistently with the checks enforced in CI.
  • #10534: Keep Authorize via OAuth2 rightmost in the bearer token's "Get a token" row, with the settings gear to its left and Refresh in between, so the button never moves when Refresh appears.
  • #10547: Respect Max-Age precedence over Expires when persisting response cookies.
  • #10508: Add built-in Traditional Chinese (Taiwan) translations for zh-TW, including case and underscore variants, across API Reference, API Client, and schema blocks.

@scalar/api-reference@1.74.0

Minor Changes

  • #10536: feat(api-reference): show an "Explore Scalar" call to action in the sidebar footer on localhost instead of the "Generate MCP" fan-out. The button expands on hover or focus into a card with the Scalar stickers and opens a dialog (morphing into it where the View Transitions API is available) with "Sign up for Scalar" and "Book a demo" actions. Public hosts, configured MCP servers and mcp.disabled keep their current footer. Adds exploreScalar translations to ApiReferenceTranslations and a startViewTransition helper to @scalar/helpers/dom.
  • #10567: Search AsyncAPI channels, operations, messages, channel parameters, and nested payload and header fields.
  • #10570: Make modern sidebar tag groups and nested parent tags collapsible by default, using the same controls as ordinary tags. Reveal ancestor tags when scrolling to a different operation.

Patch Changes

  • #10554: Render AsyncAPI boolean schemas with explanations in message payloads, headers, and reusable models.

  • #10570: Keep AsyncAPI messages searchable when their rendered anchors belong to operations, while deduplicating messages referenced by multiple operations.

  • #10527: Document every visible AsyncAPI channel message in a channel catalog while preserving operation-specific message subsets, links, and server/protocol filtering.

  • #10565: Inherit AsyncAPI operation metadata and replies from traits using recursive merge rules, and use inherited titles in navigation.

  • #10545: Convert flow-style YAML documents to valid JSON when downloading in JSON format.

  • #10509: Remove a redundant assignment in SDK installation tab keyboard navigation.

  • #10529: Display AsyncAPI server titles, summaries, and protocol versions while preserving server map keys for selection.

  • #10550: Display AsyncAPI message correlation ID descriptions and runtime expressions, with links to identifiable header and payload fields.

  • #10513: Document browser-loaded plugins with NestJS and add a custom extension example.

  • #10534: feat(api-reference): add Generate SDK buttons to the developer tools, client libraries and request examples that open the Explore Scalar dialog when running locally and the document does not list its own SDKs

  • #10506: Organize imports consistently with the checks enforced in CI.

  • #10558: Fix AsyncAPI example cards to use the full available width, keep only the code block copy button, and pad and align the example name and summary.

  • #10525: Display the AsyncAPI application identifier in the introduction when present.

  • #10566: Render inline AsyncAPI security schemes and scopes, keeping server authentication separate from operation security.

  • #10573: Hide the empty Operations card for parent tags that only contain nested tags. Tags with their own operations or webhooks still show their endpoint list.

  • #10528: Render AsyncAPI channels and their messages when no operations reference them, including server and protocol filtering.

  • #10561: Clarify AsyncAPI operation and message sections, align message card spacing, and keep schema controls inside lighter expanded cards.

    Show channel messages only when they are not used by an operation, and keep the sidebar in sync.

  • #10511: Expose an actions slot on Tag to add custom header controls in modern and classic layouts.

  • #10508: Add built-in Traditional Chinese (Taiwan) translations for zh-TW, including case and underscore variants, across API Reference, API Client, and schema blocks.

@scalar/sidebar@0.12.0

Minor Changes

  • #10570: Make modern sidebar tag groups and nested parent tags collapsible by default, using the same controls as ordinary tags. Reveal ancestor tags when scrolling to a different operation.

Patch Changes

  • #10559: Clean up Biome warnings in package code and tests. Handle rejected debounced callbacks and await streaming writes.

@scalar/docusaurus@0.8.50

Patch Changes

  • #10505: Apply formatting and lint compatibility changes for Biome 2.5.15.
  • #10549: Order theme overrides by specificity while preserving existing styles.

@scalar/hono-api-reference@0.12.12

Patch Changes

  • #10529: Align import and export ordering with the Biome checks.
  • #10520: Sort imports and exports to satisfy the Biome checks.
  • #10526: Align import and export ordering with the repository CI checks.

@scalar/nestjs-api-reference@1.2.29

Patch Changes

  • #10513: Document browser-loaded plugins with NestJS and add a custom extension example.

@scalar/starlight@0.2.14

Patch Changes

  • #10529: Align import and export ordering with the Biome checks.
  • #10520: Sort imports and exports to satisfy the Biome checks.
  • #10526: Align import and export ordering with the repository CI checks.

@scalar/agent-chat@0.12.43

Patch Changes

  • #10559: Clean up Biome warnings in package code and tests. Handle rejected debounced callbacks and await streaming writes.
  • #10506: Organize imports consistently with the checks enforced in CI.

@scalar/api-reference-react@0.9.80

Patch Changes

  • #10506: Organize imports consistently with the checks enforced in CI.

@scalar/blocks@0.5.2

Patch Changes

  • #10554: Render AsyncAPI boolean schemas with explanations in message payloads, headers, and reusable models.
  • #10559: Clean up Biome warnings in package code and tests. Handle rejected debounced callbacks and await streaming writes.
  • #10505: Apply formatting and lint compatibility changes for Biome 2.5.15.
  • #10550: Display AsyncAPI message correlation ID descriptions and runtime expressions, with links to identifiable header and payload fields.
  • #10534: feat(api-reference): add Generate SDK buttons to the developer tools, client libraries and request examples that open the Explore Scalar dialog when running locally and the document does not list its own SDKs
  • #10555: Keep expanded query parameter checkboxes independent and preserve disabled field values while excluding them from requests.
  • #10508: Add built-in Traditional Chinese (Taiwan) translations for zh-TW, including case and underscore variants, across API Reference, API Client, and schema blocks.

@scalar/client-side-rendering@0.4.11

Patch Changes

  • #10505: Apply formatting and lint compatibility changes for Biome 2.5.15.

@scalar/code-highlight@0.4.9

Patch Changes

  • #10559: Clean up Biome warnings in package code and tests. Handle rejected debounced callbacks and await streaming writes.
  • #10506: Organize imports consistently with the checks enforced in CI.

@scalar/components@0.31.1

Patch Changes

  • #10559: Clean up Biome warnings in package code and tests. Handle rejected debounced callbacks and await streaming writes.
  • #10537: fix(components): stop host page pre styles from adding borders and padding to code blocks
  • #10529: Align import and export ordering with the Biome checks.
  • #10520: Sort imports and exports to satisfy the Biome checks.
  • #10526: Align import and export ordering with the repository CI checks.
  • #10536: fix(components): keep the tooltip open when the pointer moves from it onto a child of its target, and draw its border with the theme hairline instead of the text colour

@scalar/core@0.5.43

Patch Changes

  • #10505: Apply formatting and lint compatibility changes for Biome 2.5.15.

@scalar/draggable@0.4.6

Patch Changes

  • #10559: Clean up Biome warnings in package code and tests. Handle rejected debounced callbacks and await streaming writes.

@scalar/helpers@0.16.3

Patch Changes

  • #10559: Clean up Biome warnings in package code and tests. Handle rejected debounced callbacks and await streaming writes.
  • #10536: feat(api-reference): show an "Explore Scalar" call to action in the sidebar footer on localhost instead of the "Generate MCP" fan-out. The button expands on hover or focus into a card with the Scalar stickers and opens a dialog (morphing into it where the View Transitions API is available) with "Sign up for Scalar" and "Book a demo" actions. Public hosts, configured MCP servers and mcp.disabled keep their current footer. Adds exploreScalar translations to ApiReferenceTranslations and a startViewTransition helper to @scalar/helpers/dom.
  • #10505: Apply formatting and lint compatibility changes for Biome 2.5.15.
  • #10506: Organize imports consistently with the checks enforced in CI.

@scalar/highlight@0.3.1

Patch Changes

  • #10559: Clean up Biome warnings in package code and tests. Handle rejected debounced callbacks and await streaming writes.

@scalar/json-magic@0.15.7

Patch Changes

  • #10505: Apply formatting and lint compatibility changes for Biome 2.5.15.
  • #10529: Align import and export ordering with the Biome checks.
  • #10520: Sort imports and exports to satisfy the Biome checks.
  • #10526: Align import and export ordering with the repository CI checks.

@scalar/localization@0.2.7

Patch Changes

  • #10508: Add built-in Traditional Chinese (Taiwan) translations for zh-TW, including case and underscore variants, across API Reference, API Client, and schema blocks.

@scalar/mock-server@0.17.6

Patch Changes

  • #10559: Clean up Biome warnings in package code and tests. Handle rejected debounced callbacks and await streaming writes.

@scalar/oas-utils@0.20.12

Patch Changes

  • #10559: Clean up Biome warnings in package code and tests. Handle rejected debounced callbacks and await streaming writes.

@scalar/object-utils@1.3.31

Patch Changes

  • #10505: Apply formatting and lint compatibility changes for Biome 2.5.15.
  • #10506: Organize imports consistently with the checks enforced in CI.

@scalar/openapi-parser@0.29.13

Patch Changes

  • #10559: Clean up Biome warnings in package code and tests. Handle rejected debounced callbacks and await streaming writes.
  • #10506: Organize imports consistently with the checks enforced in CI.

@scalar/openapi-to-markdown@1.5.4

Patch Changes

  • #10559: Clean up Biome warnings in package code and tests. Handle rejected debounced callbacks and await streaming writes.
  • #10505: Apply formatting and lint compatibility changes for Biome 2.5.15.

@scalar/openapi-types@0.9.8

Patch Changes

  • #10529: Align import and export ordering with the Biome checks.
  • #10520: Sort imports and exports to satisfy the Biome checks.
  • #10526: Align import and export ordering with the repository CI checks.

@scalar/openapi-upgrader@0.4.4

Patch Changes

  • #10559: Clean up Biome warnings in package code and tests. Handle rejected debounced callbacks and await streaming writes.

@scalar/postman-to-openapi@0.7.27

Patch Changes

  • #10559: Clean up Biome warnings in package code and tests. Handle rejected debounced callbacks and await streaming writes.
  • #10506: Organize imports consistently with the checks enforced in CI.

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

Patch Changes

  • #10559: Clean up Biome warnings in package code and tests. Handle rejected debounced callbacks and await streaming writes.

@scalar/release-notes@0.2.7

Patch Changes

  • #10559: Clean up Biome warnings in package code and tests. Handle rejected debounced callbacks and await streaming writes.

@scalar/schemas@0.13.2

Patch Changes

  • #10554: Render AsyncAPI boolean schemas with explanations in message payloads, headers, and reusable models.
  • #10565: Inherit AsyncAPI operation metadata and replies from traits using recursive merge rules, and use inherited titles in navigation.

@scalar/snippetz@0.10.8

Patch Changes

  • #10559: Clean up Biome warnings in package code and tests. Handle rejected debounced callbacks and await streaming writes.

@scalar/themes@0.19.1

Patch Changes

  • #10505: Apply formatting and lint compatibility changes for Biome 2.5.15.
  • #10529: Align import and export ordering with the Biome checks.
  • #10520: Sort imports and exports to satisfy the Biome checks.
  • #10526: Align import and export ordering with the repository CI checks.

@scalar/types@0.23.2

Patch Changes

  • #10554: Render AsyncAPI boolean schemas with explanations in message payloads, headers, and reusable models.
  • #10565: Inherit AsyncAPI operation metadata and replies from traits using recursive merge rules, and use inherited titles in navigation.
  • #10536: feat(api-reference): show an "Explore Scalar" call to action in the sidebar footer on localhost instead of the "Generate MCP" fan-out. The button expands on hover or focus into a card with the Scalar stickers and opens a dialog (morphing into it where the View Transitions API is available) with "Sign up for Scalar" and "Book a demo" actions. Public hosts, configured MCP servers and mcp.disabled keep their current footer. Adds exploreScalar translations to ApiReferenceTranslations and a startViewTransition helper to @scalar/helpers/dom.
  • #10567: Search AsyncAPI channels, operations, messages, channel parameters, and nested payload and header fields.
  • #10534: feat(api-reference): add Generate SDK buttons to the developer tools, client libraries and request examples that open the Explore Scalar dialog when running locally and the document does not list its own SDKs
  • #10525: Display the AsyncAPI application identifier in the introduction when present.
  • #10555: Show empty optional fields of expanded object query parameters in a searchable Add parameter picker.
  • #10508: Add built-in Traditional Chinese (Taiwan) translations for zh-TW, including case and underscore variants, across API Reference, API Client, and schema blocks.

@scalar/use-hooks@0.4.20

Patch Changes

  • #10559: Clean up Biome warnings in package code and tests. Handle rejected debounced callbacks and await streaming writes.
  • #10529: Align import and export ordering with the Biome checks.
  • #10520: Sort imports and exports to satisfy the Biome checks.
  • #10526: Align import and export ordering with the repository CI checks.

@scalar/validation@0.6.7

Patch Changes

  • #10559: Clean up Biome warnings in package code and tests. Handle rejected debounced callbacks and await streaming writes.
  • #10529: Align import and export ordering with the Biome checks.
  • #10520: Sort imports and exports to satisfy the Biome checks.
  • #10526: Align import and export ordering with the repository CI checks.

@scalar/void-server@2.5.17

Patch Changes

  • #10559: Clean up Biome warnings in package code and tests. Handle rejected debounced callbacks and await streaming writes.

@scalar/workspace-store@0.68.3

Patch Changes

  • #10554: Render AsyncAPI boolean schemas with explanations in message payloads, headers, and reusable models.

  • #10551: Show Reset to default on authentication fields only when the field has a default that differs from its current value (the document or configured value, or the current page URL for the OAuth2 redirect URL). A cleared OAuth2 access token keeps the action so you can get back to the Authorize form. The show password toggle only appears once a field has a value, and an emptied field goes back to masked.

  • #10527: Document every visible AsyncAPI channel message in a channel catalog while preserving operation-specific message subsets, links, and server/protocol filtering.

  • #10565: Inherit AsyncAPI operation metadata and replies from traits using recursive merge rules, and use inherited titles in navigation.

  • #10559: Clean up Biome warnings in package code and tests. Handle rejected debounced callbacks and await streaming writes.

  • #10544: Match cookie paths with the RFC 6265 path-match algorithm so a cookie restricted to /api is not sent with requests to /apiv2.

  • #10505: Apply formatting and lint compatibility changes for Biome 2.5.15.

  • #10555: Keep expanded query parameter checkboxes independent and preserve disabled field values while excluding them from requests.

  • #10529: Align import and export ordering with the Biome checks.

  • #10524: Keep optional enum parameters disabled until explicitly enabled when no default or example is declared. Prefer declared schema examples over enum suggestions.

  • #10562: Resolve escaped channel and message identifiers in AsyncAPI navigation.

  • #10520: Sort imports and exports to satisfy the Biome checks.

  • #10566: Render inline AsyncAPI security schemes and scopes, keeping server authentication separate from operation security.

  • #10528: Render AsyncAPI channels and their messages when no operations reference them, including server and protocol filtering.

  • #10561: Clarify AsyncAPI operation and message sections, align message card spacing, and keep schema controls inside lighter expanded cards.

    Show channel messages only when they are not used by an operation, and keep the sidebar in sync.

  • #10526: Align import and export ordering with the repository CI checks.

@scalar/astro@0.4.29

@scalar/express-api-reference@0.10.29

@scalar/fastify-api-reference@1.74.0

@scalar/nextjs-api-reference@0.12.10

@scalar/nuxt@0.6.80

@scalar/sveltekit@0.3.29

@scalar/api-client-react@2.0.57

@scalar/asyncapi-upgrader@0.1.17

@scalar/asyncapi-validator@0.1.12

@scalar/import@0.5.32

@scalar/json-schema-validator@0.1.12

@scalar/nextjs-openapi@0.3.50

@scalar/openapi-validator@0.1.12

@scalar/server-side-rendering@0.1.59

@scalar/aspire@0.12.0

Bundled API Reference

  • @scalar/api-reference@1.74.0

Minor Changes

  • #10521: Add native configuration and fluent helpers for OAuth2 device authorization flows.
  • #10519: Add ShowExtensions and WithShowExtensions to display selected specification extensions from .NET integrations.
  • #10517: Add FeaturedClients and WithFeaturedClients to configure which HTTP clients appear as tabs in the Client Libraries block, in order.
  • #10520: Add native .NET localization options for locale, text direction, and nested translation overrides in the API Reference and embedded API Client.
  • #10518: Expose schema display controls in the shared .NET options: model names, visible request body properties, parameter expansion, and nested schema expansion.

@scalar/aspnetcore@2.18.0

Bundled API Reference

  • @scalar/api-reference@1.74.0

Minor Changes

  • #10521: Add native configuration and fluent helpers for OAuth2 device authorization flows.
  • #10519: Add ShowExtensions and WithShowExtensions to display selected specification extensions from .NET integrations.
  • #10517: Add FeaturedClients and WithFeaturedClients to configure which HTTP clients appear as tabs in the Client Libraries block, in order.
  • #10520: Add native .NET localization options for locale, text direction, and nested translation overrides in the API Reference and embedded API Client.
  • #10518: Expose schema display controls in the shared .NET options: model names, visible request body properties, parameter expansion, and nested schema expansion.

@scalar/aws-lambda@0.3.0

Bundled API Reference

  • @scalar/api-reference@1.74.0

Minor Changes

  • #10521: Add native configuration and fluent helpers for OAuth2 device authorization flows.
  • #10519: Add ShowExtensions and WithShowExtensions to display selected specification extensions from .NET integrations.
  • #10517: Add FeaturedClients and WithFeaturedClients to configure which HTTP clients appear as tabs in the Client Libraries block, in order.
  • #10520: Add native .NET localization options for locale, text direction, and nested translation overrides in the API Reference and embedded API Client.
  • #10518: Expose schema display controls in the shared .NET options: model names, visible request body properties, parameter expansion, and nested schema expansion.

@scalar/azure-functions@0.3.0

Bundled API Reference

  • @scalar/api-reference@1.74.0

Minor Changes

  • #10521: Add native configuration and fluent helpers for OAuth2 device authorization flows.
  • #10519: Add ShowExtensions and WithShowExtensions to display selected specification extensions from .NET integrations.
  • #10517: Add FeaturedClients and WithFeaturedClients to configure which HTTP clients appear as tabs in the Client Libraries block, in order.
  • #10520: Add native .NET localization options for locale, text direction, and nested translation overrides in the API Reference and embedded API Client.
  • #10518: Expose schema display controls in the shared .NET options: model names, visible request body properties, parameter expansion, and nested schema expansion.

@scalar/dotnet-shared@0.3.0

Minor Changes

  • #10521: Add native configuration and fluent helpers for OAuth2 device authorization flows.
  • #10519: Add ShowExtensions and WithShowExtensions to display selected specification extensions from .NET integrations.
  • #10517: Add FeaturedClients and WithFeaturedClients to configure which HTTP clients appear as tabs in the Client Libraries block, in order.
  • #10520: Add native .NET localization options for locale, text direction, and nested translation overrides in the API Reference and embedded API Client.
  • #10518: Expose schema display controls in the shared .NET options: model names, visible request body properties, parameter expansion, and nested schema expansion.

scalar-app@1.1.40

Patch Changes

  • #10526: Make document watcher tests independent of HTTP socket timers and cover polling backoff and cleanup.
  • #10521: Wait for initial operation focusing before replacing the document in Monaco validation tests.
  • #10506: Organize imports consistently with the checks enforced in CI.
  • #10555: Make the document watcher unmount regression test independent of response-stream scheduling.

@scalarapi/docker-api-reference@0.6.14

Bundled API Reference

  • @scalar/api-reference@1.74.0

@scalar/java-integration@0.6.80

Bundled API Reference

  • @scalar/api-reference@1.74.0

scalar_api_reference@0.2.14

Bundled API Reference

  • @scalar/api-reference@1.74.0

@scalar/mock-server-docker@0.2.70

7 hours ago
opensheetmusicdisplay

2.2.1

OSMD 2.2.1 brings many small improvements, including 66 bug fixes.

Some highlights:

  • The new EngravingRules.VexFlowTextFontFamily sets the font family for the texts VexFlow renders in its own fonts (e.g. rehearsal marks, metronome marks, D.C., tab numbers).
  • Slurs no longer run into the staccatos, accents, fermatas, fingerings or ornaments at their ends: accents and fermatas there now go outside the slur, with the slur at the note.
  • Dynamics written in a note's <notations> are now read (they were missing, e.g. 71 of the 97 dynamics in a Haydn sample), dynamics, wedges and words are placed at their exact offsets, and neighboring dynamics and wedges line up at one height.
  • Notes of two or three voices a second apart are staggered correctly; where voices share a staff, articulations and ties go on the stem side, and fingerings are centered on their own notes.
  • Re-rendering, e.g. after a resize or zoom change, no longer drifts from the first render, and renderNext() now works for sheets with several pages.

Two changes you may notice, each with an option to switch back: percussion parts keep the staff lines given in the MusicXML (EngravingRules.PercussionKeepXMLStafflineCount), and a verse number now stands left of the first lyric of its verse (EngravingRules.LyricsVerseNumberLeftOfLyric).

We also improved the visual regression tests:

  • they now write crops of the exact regions of the sheets that changed
  • diff/diffs.txt lists the changed samples and names the branch, commit and subject of the blessed (e.g. develop) and current (your changes) renders being compared

We hope these will be used in future PRs and by OSMD developers in general! We find them very useful to see what visual changes your code changes produce (in our test sample set).

Thanks to @kawato3, @isc, @gifflet, @dotkebi and @mitchi-0719 (first contribution!) for their contributions via pull requests!

See the Changelog:

2.2.1 (2026-10-12)

Bug Fixes

  • Accidentals: Draw every natural when sharps or flats alternate with naturals of a pitch in a measure, e.g. the second natural of F# F F# F was missing in transposed scores (#1564, PR #1791) (b154871)
  • Articulations: Draw the articulations, ornaments and tremolos of staggered notes (moved aside from another voice's note) at that note instead of the other, and stack the marks of voices on one side vertically instead of drawing them over each other (PR #1814) (7df1c7b)
  • Articulations: Place the articulations of voices sharing a staff at the stem end, not at the note head where the other voice's note is (PR #1823) (429ee5e)
  • ChordSymbols: Align the chord symbols of a staffline to what is under them where they are drawn: a chord symbol not over a note no longer lifts them above the clef, and with ChordSymbolYAlignmentScope "measure" they no longer climb from measure to measure (#1798, PR #1087, PR #1446) (b39c1df)
  • ChordSymbols: Reserve the space above (below) the staff up to the chord symbols where they are drawn with a larger ChordSymbolYOffset or ChordSymbolYPadding: the staff moves down, instead of words, rehearsal marks or voltas being placed on the chord symbols (#1798) (226dea5)
  • Directions: Keep the tempo marks and expressions that follow a repetition mark in the same <direction>, e.g. Tempo I after a segno: only the repetition mark was read (PR #1816) (a422ebb)
  • Directions: Place cresc., dim., tempo and mood words at their <offset> in divisions, which was scaled by the length of the preceding note, e.g. Gounod's cresc. in measure 20 almost a quarter too late (PR #1825) (e2195a5)
  • Directions: Show the notes of <symbol> elements between words as Unicode characters, e.g. Fast (Straight ♪) instead of Fast (Straight): only the <words> were read (PR #1824) (b1d7306)
  • Dynamics: Place dynamics and wedge starts at their offset in divisions, which was scaled by the length of the preceding note, e.g. 0.66 quarters too late for a crescendo after a dotted half note, and start a wedge with a default-x at its direction, not at the preceding note (PR #1806) (c3e95ff)
  • Dynamics: Read the dynamics written in a note's <notations>, drawn at the note with their own placement: they were never read, e.g. 71 of the 97 dynamics in JosephHaydn_ConcertanteCello (PR #1818) (a1e0a83)
  • Expressions: Align close dynamics at exactly one height, and wedges with the middle of their letters: a p next to an mf ended up to half a unit lower (it moved only 80 % of the way), and a wedge pointed at the top of the letters of the dynamic next to it (PR #1813) (ddefa93)
  • Expressions: Place dynamics, wedges and words without placement or default-y below a single staff without lyrics, not above: Instrument.HasLyrics was set by every note, as if every part had lyrics (PR #1820) (40617c3)
  • Fingerings: Center fingerings above or below the staff on the heads of their notes, not at the staff entry's x, which could be at another voice's note moved aside, and place them clear of the stems beside the heads (PR #1808) (7f0356a)
  • Glissando: Draw a glissando into the next system when the system ends in a courtesy key or time signature, up to the barline before it, instead of stopping the rendering with an error (PR #1833, fixes #1831) (04259d1)
  • Glyph: Draw each glyph's SVG path without a lone move to the glyph's origin before its outline, which Firefox 132 counted in getBBox(), e.g. a tenuto's box reached almost a staff space below its line (see PR #1833) (051e9bf)
  • IncrementalRendering: Draw each lyric extender once with renderNext() and RenderSingleHorizontalStaffline, not again with every batch (#1795) (20d4fe7)
  • IncrementalRendering: Draw glissandi and the debug sky and bottom lines and bounding boxes once with renderNext() and RenderSingleHorizontalStaffline, and labels reaching into the next measure (#1796) (827bca9)
  • IncrementalRendering: Draw measure repeats (RenderMeasureRepeats) with renderNext() like render(), instead of the notes (#1802, PR #1750) (0029f28)
  • IncrementalRendering: Draw the bounding boxes of the debug drawing once with renderNext(), with the final batch (#1802) (ebaaf13)
  • IncrementalRendering: Draw the stems and beams with renderNext() exactly where render() does, a few trillionths of a pixel off before (#1802) (f6bb96c)
  • IncrementalRendering: Draw wedges and octave shifts continued in later systems with renderNext() in batches of measures, which drew the systems before their end without them (#1802) (aa0e277)
  • IncrementalRendering: Finish renderNext() with RenderSingleHorizontalStaffline for a single staff and across system breaks, and draw the measures where render() does (#1796) (c8b02a7)
  • IncrementalRendering: Lay out all batches of renderNext() at the width the first one read, instead of the later systems narrower once the page got a vertical scrollbar (#1802) (67f1946)
  • IncrementalRendering: Render a sheet with several pages with renderNext(), each page into an SVG or canvas of its own like render(), instead of failing when the layout reaches a further page (#1802) (8756a07)
  • Layout: Render a sheet after a resize or zoom change like a first render at the new size: delayed turns, and the page height and composer position with lyrics or chord symbols (#1797) (667ffd8)
  • Layout: Render a sheet again like the first time, e.g. after a resize or zoom change: the dots of dotted rests below dotted notes, which moved up a staff space with every render (#1801) (32cb51b)
  • Layout: Render a sheet again like the first time: the stems and beams of unison notes in two voices, and the height of chord symbols when one is not over a note (#1797) (6cf3cdf)
  • Lyrics: Draw lyric extenders at the same position when the laid-out sheet is drawn again: each draw moved them by their staff line's position (#1795) (927808c)
  • Lyrics: Draw the dashes of words whose syllables alternate between voices of a staff, e.g. in closed-score SATB, where one voice holds a note while the other sings the next syllable (add EngravingRules.RelinkLyricWordsAcrossVoices, default true, set before loading) (PR #1708, fixes #1707) (27cbb4f)
  • Lyrics: Keep lyrics clear of what is under the start of a word, e.g. an accidental or the stem of a stem-down note: read the bottom line under the word, not 1 unit right of it (PR #1810) (32a94dc)
  • Lyrics: Start a lyric with line breaks on the line of its verse, with its further lines below, not one line higher per line break, over the verse above, and ignore a line break at its end (PR #1811) (52b16c2)
  • Lyrics: Start the first lyric of a verse at its note, verse number left of it (add EngravingRules.LyricsVerseNumberLeftOfLyric, default true), e.g. "1." in "1. Wenn" or "1.2." in a lyric of two verses, instead of the number at the note and the lyric right of it (PR #1812) (690f4f0)
  • Multiple Rest Measures: Begin a new multiple rest measure at a key or time change between whole-measure rests, which were combined into one that hid the change, so the music after it seemed to be in the old key (PR #1804) (c17c8d6)
  • Notes: Make room in the spacing for a staggered note, so the next note doesn't run into it and a tie from it keeps its length (PR #1821) (8bafe96)
  • Notes: Stagger a dotted upper note instead of the lower note a second below, which covered its dot (PR #1817) (f9e61cb)
  • Notes: Stagger the lower note when only the middle and the lower note of three voices are a second apart, as for two voices, instead of the middle note, whose stem then ran past the lower note like a chord with a second (PR #1809) (c991873)
  • Notes: Stagger the middle note of three voices by pitch, not by voice number, which drew a note over its neighbor a second away when the voices weren't numbered from top to bottom (PR #1788) (840da47)
  • Notes: Stagger three voices where the middle note's stem doesn't show its collision with the lower note: a stem-up or stemless middle note a second above it, and crossed stems (PR #1819) (53d15c6)
  • Notes: Stagger two voices a second apart when one is a chord, e.g. E4+G4 under an A4, whose A4 and G4 heads overlapped (PR #1822) (b28285c)
  • NoteType: Set Note.NoteTypeXml of eighth notes to NoteType.EIGHTH instead of UNDEFINED ("eighth" was misspelled "eigth"), e.g. Braille wrote dotted eighths as dotted quarters and triplet eighths as 16ths (PR #1792) (22e7291)
  • OctaveShift: Calculate octave shifts before chord symbols, dynamics and words, so that those are placed outside the octave shift bracket (#1775, PR #1779) (c63c9e8)
  • Percussion: Keep the staff lines given in MusicXML instead of drawing a staff with few note positions on one line (add EngravingRules.PercussionKeepXMLStafflineCount, default true). Also: notes on 2-4 line staves were a line too low (PR #1749, see #1254) (d7b2fe4)
  • Rehearsal Marks: Draw the second+ rehearsal mark element in a <direction>, not only the first one, e.g. A′ as A and a smaller ′ (PR #1815) (6260a9a)
  • Rehearsal Marks: Size the box by the font size (preventing overlap with its letters), the same on every platform: it followed the measured text height, so its top line touched the letters on macOS and was taller on Linux (c448b22)
  • Repetition: Draw texts like D.C. or To Coda at the same position when the laid-out sheet is drawn again, not every second time further right (#1795) (4b1c858)
  • Repetition: Place repetition marks above a tempo text at the same position instead of over it, e.g. a segno above Tempo I: the tempo text was placed after the mark, which reserves no space in its default position (PR #1826) (8e01bf9)
  • Repetition: Play and draw a D.C., D.S., To Coda or Fine whose sound element is at the start of a measure at the barline before it, as Dorico writes them, not a measure late (PR #1807, fixes #1766) (a2cb478)
  • Repetition: Read all the words of a repetition instruction, not only the first, when an exporter splits them where the formatting changes, e.g. "Da " + italic "Capo", which wasn't drawn or played since #1768 (PR #1778) (0b01b05)
  • Rests: Keep a rest in its staff next to a note of the other staff's voice crossing into it, e.g. the rest of voice 5 on the lower staff is no longer drawn between the staves, above the notes of voice 1 crossing down (#1800, #621, PR #1076) (68f0d7d)
  • Slurs: Keep a slur clear of the fingerings of its first and last notes, and of what it passes over near its ends, e.g. a fingering or a beam next to its start (PR #1803) (1dd3512)
  • Slurs: Keep a slur started or ended beside fingerings clear of the accidentals and the key signature at its ends, and place an ornament at a slur's start or end outside it, like an accent (PR #1832) (9825255)
  • Slurs: Place accents, marcatos, bowings and fermatas at the start or end of a slur outside it, the slur at the note, and start or end a slur beside a fingering on a staccato or tenuto, not over it. EngravingRules.SlurStartArticulationYOffsetOfArticulation is no longer used (deprecated) (PR #1830) (0845d45)
  • Slurs: Start and end a slur clear of the staccatos, tenutos, accents and fermatas of its notes on its side, not on or through them, e.g. on the dot of a note on a line. EngravingRules.SlurEndArticulationYOffset is no longer used (deprecated) (PR #1828) (f57f9a1)
  • Slurs: Start and end a slur on the stem side of beamed notes beyond the beam, not on the stem under it (PR #1789) (abe2bdd)
  • SVG: Set the fill-opacity of a rectangle (e.g. a debug bounding box) only on the rectangle, not also on every element drawn after it (PR #1799) (a975f0c)
  • Tabs: Draw a hammer-on, pull-off or tie across a system break in a TAB staff like within a system: curved upwards, and labeled H or P (0965a3c)
  • Tabs: setVisible(false) and setColor() with applyToTies hide and color the label H or P of a hammer-on or pull-off too, not only its curve (3bb34d6)
  • Ties: Curve a tie on its stem side where two parts share a staff, e.g. upwards in the upper part instead of down into the lower part (PR #1829, #1141) (dec7dc3)
  • Ties: Draw a tie across a system break in its given direction, and each tie of tied notes in the direction given for it (#1794) (4a8937a)
  • Ties: Draw each tie between tied notes once, instead of several times when four or more notes are tied (#1794) (cd0155a)
  • Ties: GraphicalTie keeps both parts of a tie across a system break (vfTies, SVGElements), not only the part in the next system (692bedc)
  • Ties: setVisible(false) hides both parts of a tie across a system break, not only the part in the first system (859806d)
  • Transposing: Spell E# in F# major and D# minor like the key signature instead of F with a natural sign, and keep the note spelling when transposing by octaves (e.g. C# in D minor became Db) (PR #1790) (34d1698)
  • Tuplet: Show or hide each tuplet number as decided for its tuplet, also after a cross-staff tuplet or one with invisible rests (fbf3cba)
  • Visual Regression Tests: Compare images whose paths are longer than 260 characters on Windows, instead of warning that they could not be compared (409f805)
  • WavyLine: Attach a trill's wavy line to its note, not to a grace note before it, which drew it before or through the trill mark, and draw a wavy line over a single note up to the next note, which wasn't drawn. Also: a wavy line ends at its stop note instead of further right by the width of the note's accidentals and grace notes (extended 112, PR #1805) (2ba4203)

Features

  • Fonts: New EngravingRules.VexFlowTextFontFamily: Replaces the font for the texts VexFlow renders in fonts of its own (e.g. rehearsal marks, metronome marks, D.C., tab numbers), if set (PR #1780) (b47602c)
  • Glissando: setColor() colors the slides and glissandi starting at a note with ColoringOptions.applyToGlissandi (PR #1793) (a1ba829)
  • Glissando: setVisible() hides the slides and glissandi starting at a note too, like its ties and slurs (VisibilityOptions.applyToGlissandi) (8e884ae)
  • Transposing: New IntervalTransposeCalculator.SimpleChordSymbolSpelling (default true): Spells transposed chord symbols far from the key like the default calculator, e.g. Emaj7 instead of Fbmaj7, and AvoidDoubleAccidentals (default false): Spells notes without double sharps/flats, e.g. A instead of Bbb (PR #1787) (24a60b8)
  • Visual Regression Tests: List the changed samples and the warnings (e.g. a sample missing in blessed or current) in visual_regression/diff/diffs.txt, not only in the console (39cd9a7)
  • Visual Regression Tests: Warn when images are generated with a build older than the files in src/, as they may then not show the checked out commit, e.g. after switching branches without building (ea3ff98)
  • Visual Regression Tests: Write before/after crops of the changed regions into diff/crops in npm run test:visual, e.g. for a pull request (npm run test:visual:nocrops skips them) (bcb5e67)
  • Visual Regression Tests: Write the git branch and commit the images were generated from into source_commit.txt in the image folder, and list them for blessed and current at the end of the console summary and in diffs.txt (1034d32)
7 hours ago
virtual

@tanstack/svelte-virtual@3.13.43

Patch Changes

  • Updated dependencies [3800fb3, cb510cb]:
    • @tanstack/virtual-core@3.19.2
7 hours ago
virtual

@tanstack/vue-virtual@3.13.43

Patch Changes

  • Updated dependencies [3800fb3, cb510cb]:
    • @tanstack/virtual-core@3.19.2
7 hours ago
virtual

@tanstack/react-virtual@3.14.17

Patch Changes

  • Updated dependencies [3800fb3, cb510cb]:
    • @tanstack/virtual-core@3.19.2
7 hours ago
virtual

@tanstack/virtual-core@3.19.2

Patch Changes

  • #1314 3800fb3 - fix(virtual-core): treat iOS touchcancel like touchend so interrupted gestures cannot leave touch state stuck and keep scroll anchoring suppressed

  • #1311 cb510cb - refactor(virtual-core): track an in-flight scroll command's lifecycle as one phase instead of several flags (no behaviour change)