diff --git a/packages/ra-ui-materialui/src/input/ArrayInput/ArrayInputContext.ts b/packages/ra-core/src/controller/input/ArrayInputContext.ts
similarity index 100%
rename from packages/ra-ui-materialui/src/input/ArrayInput/ArrayInputContext.ts
rename to packages/ra-core/src/controller/input/ArrayInputContext.ts
diff --git a/packages/ra-core/src/controller/input/index.ts b/packages/ra-core/src/controller/input/index.ts
index d699b0bf3c6..2452dbdf748 100644
--- a/packages/ra-core/src/controller/input/index.ts
+++ b/packages/ra-core/src/controller/input/index.ts
@@ -8,6 +8,8 @@ export * from './useReferenceArrayInputController';
export * from './useReferenceInputController';
export * from './ReferenceInputBase';
export * from './ReferenceArrayInputBase';
+export * from './ArrayInputContext';
+export * from './useArrayInput';
export {
getStatusForInput,
diff --git a/packages/ra-ui-materialui/src/input/ArrayInput/useArrayInput.ts b/packages/ra-core/src/controller/input/useArrayInput.ts
similarity index 100%
rename from packages/ra-ui-materialui/src/input/ArrayInput/useArrayInput.ts
rename to packages/ra-core/src/controller/input/useArrayInput.ts
diff --git a/packages/ra-ui-materialui/src/input/ArrayInput/ArrayInput.spec.tsx b/packages/ra-ui-materialui/src/input/ArrayInput/ArrayInput.spec.tsx
index 1da18ab454b..600599d0688 100644
--- a/packages/ra-ui-materialui/src/input/ArrayInput/ArrayInput.spec.tsx
+++ b/packages/ra-ui-materialui/src/input/ArrayInput/ArrayInput.spec.tsx
@@ -5,6 +5,7 @@ import {
RecordContextProvider,
ResourceContextProvider,
testDataProvider,
+ useArrayInput,
} from 'ra-core';
import { AdminContext } from '../../AdminContext';
@@ -25,7 +26,6 @@ import {
Focus,
Reset,
} from './ArrayInput.stories';
-import { useArrayInput } from './useArrayInput';
describe('', () => {
it('should pass array functions to child', async () => {
diff --git a/packages/ra-ui-materialui/src/input/ArrayInput/ArrayInput.tsx b/packages/ra-ui-materialui/src/input/ArrayInput/ArrayInput.tsx
index 0d68e22d554..cd3ee89b7d6 100644
--- a/packages/ra-ui-materialui/src/input/ArrayInput/ArrayInput.tsx
+++ b/packages/ra-ui-materialui/src/input/ArrayInput/ArrayInput.tsx
@@ -30,7 +30,7 @@ import type { CommonInputProps } from '../CommonInputProps';
import { InputHelperText } from '../InputHelperText';
import { sanitizeInputRestProps } from '../sanitizeInputRestProps';
import { Labeled } from '../../Labeled';
-import { ArrayInputContext } from './ArrayInputContext';
+import { ArrayInputContext } from 'ra-core';
/**
* To edit arrays of data embedded inside a record, creates a list of sub-forms.
diff --git a/packages/ra-ui-materialui/src/input/ArrayInput/SimpleFormIterator.tsx b/packages/ra-ui-materialui/src/input/ArrayInput/SimpleFormIterator.tsx
index d0c9d01973b..af004ac60e5 100644
--- a/packages/ra-ui-materialui/src/input/ArrayInput/SimpleFormIterator.tsx
+++ b/packages/ra-ui-materialui/src/input/ArrayInput/SimpleFormIterator.tsx
@@ -21,12 +21,12 @@ import {
FormDataConsumer,
type RaRecord,
useRecordContext,
+ useArrayInput,
useTranslate,
useWrappedSource,
} from 'ra-core';
import { type UseFieldArrayReturn, useFormContext } from 'react-hook-form';
-import { useArrayInput } from './useArrayInput';
import {
SimpleFormIteratorClasses,
SimpleFormIteratorPrefix as PREFIX,
diff --git a/packages/ra-ui-materialui/src/input/ArrayInput/SimpleFormIteratorItem.tsx b/packages/ra-ui-materialui/src/input/ArrayInput/SimpleFormIteratorItem.tsx
index bd8b3c5e235..2f8a87df90b 100644
--- a/packages/ra-ui-materialui/src/input/ArrayInput/SimpleFormIteratorItem.tsx
+++ b/packages/ra-ui-materialui/src/input/ArrayInput/SimpleFormIteratorItem.tsx
@@ -3,6 +3,7 @@ import { ReactElement, ReactNode, useMemo } from 'react';
import { Typography, Stack } from '@mui/material';
import clsx from 'clsx';
import {
+ ArrayInputContextValue,
RaRecord,
RecordContextProvider,
SourceContextProvider,
@@ -12,7 +13,6 @@ import {
import { SimpleFormIteratorClasses } from './useSimpleFormIteratorStyles';
import { useSimpleFormIterator } from './useSimpleFormIterator';
-import { ArrayInputContextValue } from './ArrayInputContext';
import {
SimpleFormIteratorItemContext,
SimpleFormIteratorItemContextValue,
diff --git a/packages/ra-ui-materialui/src/input/ArrayInput/index.ts b/packages/ra-ui-materialui/src/input/ArrayInput/index.ts
index f3c70513aeb..036b9dc6185 100644
--- a/packages/ra-ui-materialui/src/input/ArrayInput/index.ts
+++ b/packages/ra-ui-materialui/src/input/ArrayInput/index.ts
@@ -1,13 +1,16 @@
export * from './ArrayInput';
-export * from './ArrayInputContext';
export * from './SimpleFormIterator';
export * from './SimpleFormIteratorContext';
export * from './SimpleFormIteratorItem';
export * from './SimpleFormIteratorItemContext';
-export * from './useArrayInput';
export * from './useSimpleFormIterator';
export * from './useSimpleFormIteratorItem';
export * from './useSimpleFormIteratorStyles';
export * from './AddItemButton';
export * from './RemoveItemButton';
export * from './ReOrderButtons';
+
+/**
+ * @deprecated Import from `ra-core` or `react-admin` instead
+ */
+export { ArrayInputContext, useArrayInput } from 'ra-core';