← All demos

iris-core dual-CSS POC

Evaluation

How iris-core loads and themes today, and how it should additively adopt dual-output CSS, SUIT naming, a component-token tier, and iX status colors.

Type
Evaluation
Status
Exploration
Tickets
DESYS-1286, DESYS-1146, DESYS-434, DESYS-1287, DESYS-1140
Stack
Markdown, HTML, CSS, SCSS, Cytoscape.js
Owner
Bill Dingwall
Created
2026-08-19
Updated
2026-09-16
Tokens
--iris-ui-interactive-1

Context

Evaluation of the @siemens-iris/iris-core package (0.10.0–0.11.0) as consumed by this sandbox: can consumers load *specific parts* of iris-core rather than the full bundle, can they *extend or override* themes, and what CSS-architecture patterns should iris-core adopt from the dual-architecture POC and Siemens iX? This is the sandbox-side validation for the CSS organization & component-token refactor (DESYS-434), tracked as DESYS-1286 / DESYS-1287 / DESYS-1140.

The direction is **additive adoption into iris-core, using the iris namespace** — dual (shadow-DOM + light-DOM) output from a single SCSS source, SUIT class naming, a color-only component-token tier, token cleanup, and iX-sourced status colors — **without merging the POC, dropping Stencil/Shadow DOM, or introducing a separate dual namespace.**

Findings

The full research corpus and the executable build plans live in research/ — start with research/README.md (the folder guide) and research/BUILD-PLANS.md (the consolidated roadmap). Summary of the evaluation:

  • **Selective loading — partial today.** Per-component JS (./components/*.js + the Stencil lazy
  • loader) and granular SCSS layers (./scss/*) are selectively loadable; compiled CSS is monolithic (./iris.css only), and its bytes are dominated by token duplication (663 semantic custom properties emitted 5×).

  • **Theme extension — supported, no first-class API.** Override --iris-* custom properties (they
  • inherit through the shadow boundary) or compose the SCSS theme-* mixins; there is no public "register a named theme" surface.

  • **Biggest gap — the near-absent component-token tier.** iris-core ships ~0 component tokens vs
  • Siemens iX's ~1,529; restyling a single component means reverse-engineering ~40 semantic dependencies. The verdict is **GO** on adopting the POC's $namespace dual-output model and a color-only component-token tier, sequenced first, phased.

Entry

interactive/iris-css-overview.html is the iris-core CSS-delivery overview (monolithic-vs-per-file delivery). The interactive comparisons sit beside it in interactive/:

  • interactive/ix-css-overview.html — how Siemens iX delivers CSS/theme/component files separately.
  • interactive/iris-ix-comparison.html — side-by-side iris vs iX token architecture, with the
  • alignment-path roadmap (DESYS-1287).

  • interactive/dual-iris-ix-comparison.html, interactive/dual-output-architecture.html,
  • interactive/dual-token-architecture.html, interactive/dual-suitcss-conventions.html — the dual-architecture POC demos (the $namespace dual-output mechanism, three-tier tokens, and SUIT conventions the research recommends iris-core adopt under the iris namespace).

Keep-in-sync rule — build-plan files ↔ interactive overview

The demo entry [interactive/build-plan-overview.html](interactive/build-plan-overview.html) walks the iris-core plan (research/build-plan-iris-core/ P0–P7) and mirrors each phase's file tables and pipeline. It therefore drifts if a plan file changes without it.

**Rule:** when any research/build-plan-iris-core/pN-build-plan.md (or the overview page itself) changes, update interactive/build-plan-overview.html in the **same change**, then re-run npm run generate:demos from the repo root so the demo index reflects it. This is the interactive analogue of the research-corpus link-integrity rule — the page is a rendering of the plan, not a second source of truth.

1. interactive/
  • build-plan-overview.html ▶
  • dual-consumer-theming.html ▶
  • dual-css-overview.html ▶
  • dual-iris-ix-comparison.html ▶
  • dual-layout-primitives.html ▶
  • dual-output-architecture.html ▶
  • dual-scss-structure.html ▶
  • dual-suitcss-conventions.html ▶
  • dual-token-architecture.html ▶
  • iris-css-overview.html ▶
  • iris-ix-comparison.html ▶
  • ix-css-overview.html ▶
2. code/
  • dual-architecture-poc/
    • .gitignore
    • README.md
    • package.json
    • schema/
      • suit-class-naming-schema.json
      • variable-naming-schema.json
      • web-component-naming-schema.json
    • scripts/
      • build-css.mjs
      • build-wc.mjs
      • compile-tokens-scss.mjs
      • extract-reference-tokens.mjs
      • read-config.mjs
      • regenerate-split-tokens.mjs
    • src/
      • assets/
        • .gitkeep
        • fonts/
          • SiemensSansProVF_Italics_W_Wght.woff2
          • SiemensSansProVF_W_Wght.woff2
          • SiemensSansPro_W_Bd.woff2
          • SiemensSansPro_W_BdIt.woff2
          • SiemensSansPro_W_It.woff2
          • SiemensSansPro_W_Rm.woff2
          • SiemensSansPro_W_SBd.woff2
          • SiemensSansPro_W_SBdIt.woff2
          • SiemensSlabProVF_Italics_W_Wght.woff2
          • SiemensSlabProVF_W_Wght.woff2
      • components/
        • _index.scss
        • alert/
          • alert.index.scss
          • alert.styles.scss
          • alert.template.html
          • alert.variables.scss
        • attribution/
          • attribution.index.scss
          • attribution.styles.scss
          • attribution.template.html
          • attribution.variables.scss
        • blockquote/
          • blockquote.index.scss
          • blockquote.styles.scss
          • blockquote.template.html
          • blockquote.variables.scss
        • button/
          • button.index.scss
          • button.styles.scss
          • button.template.html
          • button.variables.scss
        • card/
          • card.index.scss
          • card.styles.scss
          • card.template.html
          • card.variables.scss
        • checkbox/
          • checkbox.index.scss
          • checkbox.styles.scss
          • checkbox.template.html
          • checkbox.variables.scss
        • checkbox-group/
          • checkbox-group.index.scss
          • checkbox-group.styles.scss
          • checkbox-group.template.html
          • checkbox-group.variables.scss
        • dropdown/
          • dropdown.index.scss
          • dropdown.styles.scss
          • dropdown.template.html
          • dropdown.variables.scss
        • radio/
          • radio.index.scss
          • radio.styles.scss
          • radio.template.html
          • radio.variables.scss
        • radio-group/
          • radio-group.index.scss
          • radio-group.styles.scss
          • radio-group.template.html
          • radio-group.variables.scss
        • stage/
          • stage.index.scss
          • stage.styles.scss
          • stage.template.html
          • stage.variables.scss
        • text-field/
          • text-field.index.scss
          • text-field.styles.scss
          • text-field.template.html
          • text-field.variables.scss
        • tooltip/
          • tooltip.index.scss
          • tooltip.styles.scss
          • tooltip.template.html
          • tooltip.variables.scss
        • typography/
          • typography.index.scss
          • typography.styles.scss
          • typography.template.html
          • typography.variables.scss
      • config.yaml
      • global/
        • _asset-config.scss
        • base/
          • _fonts.scss
          • _index.scss
          • _reset.scss
          • _typography.scss
        • functions/
          • _functions.scss
          • _index.scss
        • grid/
          • _css-grid.scss
          • _flex-grid.scss
          • _index.scss
          • _primitives.scss
        • mixins/
          • _color.scss
          • _index.scss
          • _media.scss
          • _spacing.scss
          • _typography.scss
        • utilities/
          • _color.scss
          • _display.scss
          • _flexbox.scss
          • _index.scss
          • _sizing.scss
          • _spacing.scss
          • _text.scss
          • _typography.scss
        • variables/
          • _color.scss
          • _index.scss
          • _reference.scss
          • _spacing.scss
          • _styles.scss
          • _typography.scss
          • _viewport-regular.scss
          • generated/
            • _effects.generated.scss
            • _reference.generated.scss
    • tokens/
      • reference/
        • iris-reference-tokens.json
      • semantic/
        • Breakpoints.vpLG-1024.json
        • Breakpoints.vpMD-768.json
        • Breakpoints.vpSM-544.json
        • Breakpoints.vpXL-1440.json
        • Breakpoints.vpXS-360.json
        • Breakpoints.vpXXL-1920-BETA.json
        • Color-Theme.Dark-BRAND.json
        • Color-Theme.Dark.json
        • Color-Theme.Light.json
        • Color-Theme.Sand.json
        • Color-Theme.Wireframe.json
        • Component-Layout.Mode-1.json
      • styles/
        • box-shadow.json
        • rest/
          • styles.json
      • token-sources.config.yaml
      • variable.config.yml
      • variable.overrides.yml
3. research/
  • PLANS.md
  • README.md
  • REQUIREMENTS.md
  • build-plan-iris-core/
    • Epic-relationships.md
    • build-plan-overview.md
    • p1-build-plan.md
    • p2-build-plan.md
    • p3-build-plan.md
    • p4-build-plan.md
    • p5-build-plan.md
    • p6-build-plan.md
    • p7-build-plan.md
    • references/
      • consumer-config-proposal.md
      • iris-core-consumer-surface-inventory.md
      • iris-core-quality-layers-fixes-and-preflight.md
      • p1-build-plan-audit-iris-core.md
      • p1-build-plan-revised-quality-layers.md
      • quality-architecture-repo-audit.md
      • quality-architecture.md
  • dual-poc-parity-plan.md
  • iris-core-analysis/
    • _overview.md
    • iris-core-docs-update-proposal.md
    • research/
      • consumer-surface-and-registration.md
      • iris-design-tokens-analysis.md
      • iris-design-tokens-diagram-and-trace.md
      • naming-schemas-and-proposals.md
      • packages-core-analysis.md
      • packages-core-build-fanout-diagram.md
      • packages-core-component-to-react-trace.md
      • packages-react-analysis.md
      • repo-folder-map-diagram.md
      • root-folders-analysis.md
      • scripts-sync-iris-design-tokens-analysis.md
  • research-campaigns/
    • DECISIONS.md
    • FINDINGS.md
    • dual-poc-notes/
      • _overview.md
      • p1-build-plan.md
      • p2-build-plan.md
      • p3-build-plan.md
      • p4-build-plan.md
      • p5-build-plan.md
      • poc-code-review-prompt.md
      • poc-code-review.md
    • round1/
      • 01-evaluation-and-loading.md
      • 02-iris-css-anatomy.md
      • 03-ix-comparison.md
      • 04-component-token-tier.md
      • 05-naming-conventions.md
      • 06-performance.md
      • 07-scss-direct-use.md
      • 08-pattern-survey.md
      • 09-architecture-proposal.md
      • 10-variable-design.md
      • 11-build-feasibility.md
      • 12-recommendation.md
      • 13-grid-layout-proposal.md
      • _overview.md
    • round2/
      • 00-research-plan.md
      • 01-architecture-current.md
      • 02-architecture-proposed.md
      • 03-component-refactoring.md
      • 04-token-audit.md
      • 05-schemas-and-naming.md
      • 06-consumer-experience.md
      • 07-mcp-integration.md
      • 08-risk-assessment.md
      • 09-benchmarks.md
      • 10-ix-token-integration.md
      • 13-token-parity-plan.md
      • _overview.md
      • appendix-tokens.md
      • appendix-tooling.md
    • round3/
      • 00-research-plan.md
      • A-token-pipeline.md
      • B-component-pipeline.md
      • C-npm-packaging.md
      • D-dual-architecture-transfer.md
      • _overview.md
      • q01-figma-token-sync.md
      • q02-sync-update-chain.md
      • q03-design-tokens-file-creation.md
      • q04-tokens-in-component-creation.md
      • q05-token-registry-manifest.md
      • q06-component-storage-packaging.md
      • q07-scss-compilation-for-publish.md
      • q08-expose-scss-to-consumers.md
      • q09-consumer-config-file.md
      • q10-poc-updates-to-inform-core.md
      • q11-buildplan-gaps.md
      • q17-dual-implementation-review.md
      • q18-dual-updates-parity.md
    • round4/
      • 00-direction.md
      • 01-architecture-target.md
      • 02-path-forward.md
      • 03-open-items.md
      • 04-theme-subtheme-architecture.md
      • _overview.md
    • round5/
      • CSS research/
        • 01-tailwind-css-v4.md
        • 02-bootstrap-5.md
        • 03-open-props.md
        • 04-every-layout.md
        • 05-bulma-and-foundation.md
        • 06-poc-update-proposal.md
        • 07-comparison-matrix-and-synthesis.md
        • README.md
      • _overview.md
      • dual-POC-reviews/
        • dual-poc-tokens-scss-inversion-fidelity-blocker.md
        • reference-token-mismatch-analysis.md
      • dual-poc-vs-iris-core-css-pipeline-diff.md
      • figma-json-to-scss-POC/
        • build-config-poc/
          • README.md
          • build-config.schema.json
          • build-from-config.mjs
          • read-build-config.mjs
          • src/
            • build.config.yaml
        • poc-figma-to-scss.mjs
        • proposal-custom-figma-to-scss.md
        • scss-map.config.json
        • scss-map.schema.json
      • iris-core-package-kpis.md
    • round6/
      • _overview.md
      • iris-core-quality-layers-ci-local-kiro.md
      • iris-core-quality-layers-with-docs.md
      • iris-core-quality-performance-machinery.md
      • iris-repository-architecture-standard.md
      • p1-build-plan-qa-example.md
      • suit-vs-bem-css-naming-conventions.md