github →

New request

#21093: STANDALONE_RICH_TEXT widget is accepted on record page layouts but renders nothing

We'll provision a sandbox, run an agent against the issue, and open a draft PR. You can pull the branch and iterate from there.

Issue
sonarly:high

Summary

STANDALONE_RICH_TEXT widgets can be created on record page layout tabs through the metadata API, and getPageLayoutWidgets returns them successfully, but the record page UI appears to render nothing for the widget.

This is a little confusing for layout automation because the mutation succeeds and the widget is persisted, but the visible result is empty.

Steps to reproduce

  1. On a record page layout tab, create a widget through createPageLayoutWidget:
type: STANDALONE_RICH_TEXT
configuration: {
  configurationType: "STANDALONE_RICH_TEXT",
  body: {
    markdown: "Test note",
    blocknote: null
  }
}
  1. Query getPageLayoutWidgets for the tab.
  2. Confirm the widget is returned in metadata.
  3. Open the record page in the UI.

Expected behavior

Either:

  • the standalone rich text widget renders read-only on record page layouts, or
  • the metadata API rejects this widget type for record page layouts with a clear validation error.

Actual behavior

The widget is stored and returned by metadata queries, but no rich text widget content is visible on the record page. Other widgets on the same tab, such as FIELD, IFRAME, and RECORD_TABLE, render as expected.

No browser console error was observed.

Due diligence

I tested this both through the metadata API and in the browser:

  • Created and read back the STANDALONE_RICH_TEXT widget through the metadata API using createPageLayoutWidget / getPageLayoutWidgets.
  • Confirmed the widget was persisted and returned in metadata.
  • Confirmed the same record page tab successfully rendered nearby FIELD, IFRAME, and RECORD_TABLE widgets.
  • Checked the authenticated browser DOM after refresh; neither the rich text widget title nor body appeared.
  • Re-tested with a valid BlockNote body.blocknote payload, not just markdown. The API accepted and normalized it, but the record page still did not render the widget title or body.
  • Checked browser console output; no relevant error was emitted.

I did not test this on a clean vanilla workspace or with every layout mode, so this may still be context-sensitive. The behavior was reproducible in a self-hosted v2.8.3 workspace.

Environment

  • Twenty version: v2.8.3
  • Deployment: self-hosted
  • Layout type: record page layout

Technical note

This looks like it may be intentional dashboard-only rendering rather than a data issue. In StandaloneRichTextWidget, the component derives a dashboardId only when layoutType === PageLayoutType.DASHBOARD, then returns null when no dashboard id is present:

https://github.com/twentyhq/twenty/blob/v2.8.3/packages/twenty-front/src/modules/page-layout/widgets/standalone-rich-text/components/StandaloneRichTextWidget.tsx

At the same time, WidgetContentRenderer does route WidgetType.STANDALONE_RICH_TEXT to this renderer:

https://github.com/twentyhq/twenty/blob/v2.8.3/packages/twenty-front/src/modules/page-layout/widgets/components/WidgetContentRenderer.tsx

So the mismatch seems to be: record page metadata accepts the widget, but the frontend renderer is dashboard-gated and silently returns null outside dashboard context.

Assessmentadvisory
bug●● medium85% confidence

Metadata API accepts and persists STANDALONE_RICH_TEXT widgets that the frontend record page does not yet render.

Likely files
  • packages/twenty-front/src/modules/object-record/record-page/components/RecordPageWidget.tsx
  • packages/twenty-front/src/modules/ui/layout/page/components/PageLayout.tsx
  • packages/twenty-server/src/engine/metadata-modules/page-layout-widget/page-layout-widget.service.ts
  • packages/twenty-server/src/engine/metadata-modules/page-layout-widget/page-layout-widget.resolver.ts
Create the request

This opens a fresh agent run and a draft PR for issue #21093.

Cancel