Bug / feature gap
In an application front component (twenty-sdk), an <input type="file"> renders and the native file picker opens on click — but after the user selects a file, nothing reaches the component: the onChange handler never fires (or fires without target.files), so the File object is unreachable from app code.
Environment
- Self-hosted,
twentycrm/twenty:latest (pulled 2026-08-05, image c98904f79a2d) — also reproduced on the June 2026 image
- twenty-sdk 2.27.0
- Front component mounted as a
FRONT_COMPONENT widget in a RECORD_PAGE page-layout tab
Repro
const Picker = () => (
<input
type="file"
onChange={(e: any) => {
// never reached after choosing a file
console.log(e.target?.files?.[0]);
}}
/>
);
- Mount in a record-page tab, click the input → OS file dialog opens ✅
- Choose any file → no change event, no files, no error ❌
Tried: visible input, label-wrapped hidden input, transparent overlay input — picker always opens, the file never crosses the sandbox boundary. File is structured-cloneable, so marshaling target.files through the Remote DOM event bridge (or exposing a host API to read picked files) seems feasible.
Use case
A WhatsApp-conversation tab on a CRM record: users want to pick a file inside the chat and have it uploaded/attached/sent. Everything else works (uploads via MetadataApiClient/server-side work fine once bytes are available) — only the in-component file pick is impossible, forcing a detour through the native Files tab.
Ask
Marshal FileList/File objects through the sandbox for file inputs (change event and/or drag-drop dataTransfer.files), or provide a host command like pickFile() returning the bytes.
Bug / feature gap
In an application front component (twenty-sdk), an
<input type="file">renders and the native file picker opens on click — but after the user selects a file, nothing reaches the component: theonChangehandler never fires (or fires withouttarget.files), so theFileobject is unreachable from app code.Environment
twentycrm/twenty:latest(pulled 2026-08-05, imagec98904f79a2d) — also reproduced on the June 2026 imageFRONT_COMPONENTwidget in aRECORD_PAGEpage-layout tabRepro
Tried: visible input, label-wrapped hidden input, transparent overlay input — picker always opens, the file never crosses the sandbox boundary.
Fileis structured-cloneable, so marshalingtarget.filesthrough the Remote DOM event bridge (or exposing a host API to read picked files) seems feasible.Use case
A WhatsApp-conversation tab on a CRM record: users want to pick a file inside the chat and have it uploaded/attached/sent. Everything else works (uploads via
MetadataApiClient/server-side work fine once bytes are available) — only the in-component file pick is impossible, forcing a detour through the native Files tab.Ask
Marshal
FileList/Fileobjects through the sandbox for file inputs (change event and/or drag-dropdataTransfer.files), or provide a host command likepickFile()returning the bytes.