Install

Works with Drupal: ^10.3 || ^11

Using Composer to manage Drupal site dependencies

Alternative installation files

Download tar.gz 586.56 KB
MD5: a0d92e7d2ed3383df2860fce8601f607
SHA-1: c02e61dd52a6667bfc2f5c290c0998d8f41b39f9
SHA-256: bd762792b1f82f7e17d2a77eb3ce1b2a8482d9f04441373cf2bb0671f6b45e76
Download zip 1.05 MB
MD5: 3c152e1887916a843f6a6b9498625319
SHA-1: eaecf5dec6429396c4b997e8eaf2c16a83a301b2
SHA-256: 5bd005927e448de7cff57e68d8859079e866f609380ef9b703906c4e621703fe

Release notes

SDX 1.0.0-alpha3 introduces framework-agnostic hook cores under @sdx/core/*, a native dialog system replacing jQuery UI, preprocessor-agnostic SSR builds, and shared-chunk CSS auto-attachment. One breaking change: HtmlFragment now emits the marker class flatten instead of sdx-flatten.


Breaking changes

  • HtmlFragment (React + Vue) now emits className="flatten" (previously sdx-flatten). Themes that style this marker class must update the selector. No change is needed in template authors' code.

Highlights

Framework-agnostic core layer

  • @sdx/core/transport: apiCall, fetchDataProviderProps, SDX_HEADERS
  • @sdx/core/mount: shared mount pipeline for React / Vue / Svelte
  • @sdx/security: centralized CSRF handling
  • @sdx/base/types: shared TS types (BlockProps, DrupalAttributes, ContextualLink, MenuItem, LocalTaskTab, ActionLink)
  • Hook cores under sdx/js/core (drupal-settings, batch-polling, confirm-modal); useDeferredProps / useLazyProp ported to Vue and Svelte

Native dialog system

Replaces jQuery UI dialogs with an SDX-owned pipeline; async unsaved-changes guard.

SSR builds are now preprocessor-agnostic

  • vite.config.ssr.js short-circuits .css / .scss / .sass / .less / .styl imports to no-ops. SSR bundles output HTML, not CSS.
  • react-dom/client externalized in SSR. Prevents build failures when a client-only module (e.g. installDialogBridge) is statically imported from the component graph.
  • Uninstalling sdx_sass no longer breaks drush sdx:ssr:build. CSR still resolves styles via the feature plugin system.

AutoLibraryGenerator: shared-chunk CSS

Discovers and attaches assets/[chunk].css siblings of Vite-emitted chunks/[chunk]-[hash].js. Primitives whose styles land in a shared chunk (Card, IconButton, Prose, LinkList, and so on) now load correctly.

Admin dashboard

New overview + packages DataProvider pages with pnpm tree audit.

TypeScript-first runtime

  • runtime.ts converted to TypeScript (ESM compile path)
  • sdx-navigate rewritten in TypeScript; dead registry removed
  • sdx_typescript absorbed into sdx core; JSX ownership moved to sdx_react
  • sdx-devel-toolbar ported to TypeScript; sdx-setup-wizard.js modernized to ES2020
  • sdx_vue is now a thin hook-adapter layer over @sdx/core/* with HtmlFragment parity

Fixes

  • Preserve DataProvider props on same-URL re-navigation
  • Batch: redirect detection, null-safe state restoration, translated modal strings, innerHTML for server-rendered HTML labels
  • ConfirmModalStore: SSR-safe construction + getServerSnapshot
  • spreadAttributes: normalize style strings to React style objects
  • form_action tokens resolve to canonical path inside confirm forms
  • interpretStyleProcessor emits both loadPaths (modern-compiler) and includePaths (legacy) for sass-embedded API switching
  • Promoted Badge, EmptyState, ToggleSwitch to framework _shared/ui

Internal

  • sdx_router forwards ajax_page_state[libraries] to prevent window.Drupal wipe
  • sdx_react: server-only token contract; sdx_ssr owns its own page-render injection
  • SSR: framework-renderer.mjs now lives under private/sdx
  • Full PHPCS / PHPStan level 0 clean; PHPUnit 176/176 green
  • BuildOutputResolver: central vs distributed build output modes
  • Import map emitted server-side via ImportMapBuilder
  • AJAX interceptor consolidated across frameworks

Full changelog: CHANGELOG.md

Created by: vzsigmond
Created on: 17 Apr 2026 at 15:04 UTC
Last updated: 17 Apr 2026 at 15:04 UTC
Bug fixes
New features

Other releases