diff --git a/.changeset/dialog-forward-props.md b/.changeset/dialog-forward-props.md
new file mode 100644
index 00000000000..666ca9c089c
--- /dev/null
+++ b/.changeset/dialog-forward-props.md
@@ -0,0 +1,5 @@
+---
+'@primer/react': patch
+---
+
+Dialog: forward `id`, `data-testid`, and other unrecognized DOM/`aria-*`/`data-*` attributes to the root `role="dialog"` element
diff --git a/packages/react/src/Dialog/Dialog.test.tsx b/packages/react/src/Dialog/Dialog.test.tsx
index 21f1fc2447c..2f27614c139 100644
--- a/packages/react/src/Dialog/Dialog.test.tsx
+++ b/packages/react/src/Dialog/Dialog.test.tsx
@@ -67,6 +67,19 @@ describe('Dialog', () => {
expect(getByRole('dialog')).toHaveAttribute('data-component', 'ConfirmationDialog')
})
+ it('forwards id, data-testid, and other unknown attributes to the root dialog element', () => {
+ const {getByRole, getByTestId} = render(
+ ,
+ )
+ const dialog = getByRole('dialog')
+ expect(dialog).toHaveAttribute('id', 'my-dialog')
+ expect(dialog).toHaveAttribute('data-custom', 'value')
+ expect(dialog).toHaveAttribute('aria-keyshortcuts', 'Escape')
+ expect(getByTestId('my-dialog')).toBe(dialog)
+ })
+
it('renders data-component hooks for Dialog subcomponents', () => {
const {getByRole} = render(