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.
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
- 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
}
}
- Query
getPageLayoutWidgetsfor the tab. - Confirm the widget is returned in metadata.
- 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_TEXTwidget through the metadata API usingcreatePageLayoutWidget/getPageLayoutWidgets. - Confirmed the widget was persisted and returned in metadata.
- Confirmed the same record page tab successfully rendered nearby
FIELD,IFRAME, andRECORD_TABLEwidgets. - Checked the authenticated browser DOM after refresh; neither the rich text widget title nor body appeared.
- Re-tested with a valid BlockNote
body.blocknotepayload, 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:
At the same time, WidgetContentRenderer does route WidgetType.STANDALONE_RICH_TEXT to this renderer:
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.
Metadata API accepts and persists STANDALONE_RICH_TEXT widgets that the frontend record page does not yet render.
- 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