Skip to main content
FormEngine is a React library that renders forms from JSON schemas. The @react-form-builder/components-mantine package provides a free, MIT-licensed component set built on Mantine. It is the richest of the three FormEngine component sets — 45+ components including color pickers, ratings, range sliders, chip groups, a JSON editor, and 20+ date/time picker variants.
FormEngine ships three independent component sets — Mantine, Material UI, and React Suite. A single form uses one set at a time. See the Components Library overview for a side-by-side comparison.

Installation

npm install @react-form-builder/components-mantine
npm install @mantine/core @mantine/dates
# Optional:
# npm install @mantine/dropzone @mantine/tiptap
Mantine ships CSS as plain files that must be imported manually — unlike React Suite, there is no withCssLoader helper. Add the imports to your app entry:
Mantine CSS imports (app entry)
import '@mantine/core/styles.css'
import '@mantine/dates/styles.css'
// Optional:
// import '@mantine/dropzone/styles.css'
// import '@mantine/tiptap/styles.css'

Basic setup

Wrap your app with MantineProvider and pass the Mantine component set to FormViewer:
import {FormViewer} from '@react-form-builder/core'
import {MantineComponents} from '@react-form-builder/components-mantine'
import {MantineProvider} from '@mantine/core'

const view = FormViewer.view(MantineComponents).build()

export const App = () => (
  <MantineProvider>
    <FormViewer view={view} formJson={formJson} />
  </MantineProvider>
)
Use Mantine component types in your JSON — MtTextInput, MtSelect, MtCheckbox, and so on. See the full list below.

Theming

Mantine default color palettes (gray, grape, blue, and others) follow the Open Color scale in the default theme. Pass a theme object to MantineProvider to customize colors, fonts, and radii:
import {createTheme, MantineProvider} from '@mantine/core'

const theme = createTheme({
  fontFamily: 'Open Sans, sans-serif',
  primaryColor: 'cyan',
  defaultRadius: 'md'
})

export const App = () => (
  <MantineProvider theme={theme}>
    <FormViewer view={view} formJson={formJson} />
  </MantineProvider>
)
For theme and provider options, see:

Light and dark color scheme

MantineProvider is the central manager for color scheme. It handles light / dark / auto through defaultColorScheme, persists the selected value through a colorSchemeManager, and applies the resolved mode via the data-mantine-color-scheme attribute used by component styles.
Color scheme with system preference and persistence
import {MantineProvider, localStorageColorSchemeManager} from '@mantine/core'
import {useColorScheme} from '@mantine/hooks'

const colorSchemeManager = localStorageColorSchemeManager({
  key: 'app-color-scheme'
})

export const App = () => {
  const systemColorScheme = useColorScheme()

  return (
    <MantineProvider
      colorSchemeManager={colorSchemeManager}
      defaultColorScheme={systemColorScheme === 'dark' ? 'dark' : 'light'}
      // Uncomment to lock one mode:
      // forceColorScheme='dark'
    >
      <FormViewer view={view} formJson={formJson} />
    </MantineProvider>
  )
}
For client-side-only detection (non-SSR), pass getInitialValueInEffect: true to useColorScheme. For color scheme APIs, see:

BiDi and RTL support

Mantine supports right-to-left layouts in several ways. The simplest is to wrap the app with DirectionProvider:
DirectionProvider with MantineProvider
import {DirectionProvider, MantineProvider} from '@mantine/core'

export const App = () => (
  <DirectionProvider initialDirection="ltr">
    <MantineProvider>
      <FormViewer view={view} formJson={formJson} />
    </MantineProvider>
  </DirectionProvider>
)
You can also set dir="rtl" on the root <html> element, switch direction at runtime with the useDirection hook, or add RTL-specific CSS overrides using the rtl mixin from postcss-preset-mantine. See RTL direction for the full setup.

Available components

Each row links to the FormEngine component reference and to the corresponding Mantine documentation.

Input components

ComponentDescriptionMantine docs
MtTextInputSingle-line text inputTextInput
MtTextareaMulti-line text inputTextarea
MtNumberInputNumeric input with stepperNumberInput
MtPasswordInputPassword input with visibility togglePasswordInput
MtCheckboxSingle checkboxCheckbox
MtCheckboxGroupGroup of checkboxesCheckbox.Group
MtRadioSingle radio optionRadio
MtRadioGroupRadio button groupRadio.Group
MtSwitchToggle switchSwitch
MtSwitchGroupGroup of switchesSwitch.Group
MtFileInputFile inputFileInput
MtJsonInputJSON editor inputJsonInput
MtLabelLabel for form controlsInput label

Specialized inputs

Components unique to the Mantine set, not available in RSuite or Material UI:
ComponentDescriptionMantine docs
MtColorInputColor picker inputColorInput
MtColorPickerColor picker with swatchesColorPicker
MtRatingStar or custom-symbol ratingRating
MtSliderSlider for a single valueSlider
MtRangeSliderSlider for a value rangeRangeSlider
MtSegmentedControlSegmented control for exclusive optionsSegmentedControl
MtChipChip for tags or filtersChip
MtChipCheckboxGroupChip-based checkbox groupChip
MtChipRadioGroupChip-based radio groupChip

Select and combobox

ComponentDescriptionMantine docs
MtSelectSingle-value dropdownSelect
MtMultiSelectMulti-value dropdownMultiSelect
MtNativeSelectNative HTML <select> styled with MantineNativeSelect
MtAutocompleteAutocomplete with suggestionsAutocomplete
MtTagsInputFree-form tag entryTagsInput

Date and time

Require @mantine/dates:
ComponentDescriptionMantine docs
MtDatePickerSingle-date pickerDatePicker
MtDatePickerInputSingle-date picker with inputDatePickerInput
MtDateRangePickerDate range pickerDatePicker
MtDateRangePickerInputDate range picker with inputDatePickerInput
MtDateMultiplePickerMultiple-dates pickerDatePicker
MtDateMultiplePickerInputMultiple-dates picker with inputDatePickerInput
MtDateTimePickerDate + time pickerDateTimePicker
MtMonthPickerSingle-month pickerMonthPicker
MtMonthPickerInputSingle-month picker with inputMonthPickerInput
MtMonthRangePickerMonth range pickerMonthPicker
MtMonthRangePickerInputMonth range picker with inputMonthPickerInput
MtMonthMultiplePickerMultiple-months pickerMonthPicker
MtMonthMultiplePickerInputMultiple-months picker with inputMonthPickerInput
MtYearPickerSingle-year pickerYearPicker
MtYearPickerInputSingle-year picker with inputYearPickerInput
MtYearRangePickerYear range pickerYearPicker
MtYearRangePickerInputYear range picker with inputYearPickerInput
MtYearMultiplePickerMultiple-years pickerYearPicker
MtYearMultiplePickerInputMultiple-years picker with inputYearPickerInput
MtTimePickerTime pickerTimePicker
MtTimeInputTime input fieldTimeInput
MtTimeGridTime slot grid for schedulingTimeGrid

Layout and typography

ComponentDescriptionMantine docs
MtContainerContainer for centering and constraining contentContainer
MtDividerVisual dividerDivider
MtTextText component for body contentText
MtTitleHeading componentTitle
MtTypographyTypography with preset text stylesTypographyStylesProvider

Overlays and feedback

ComponentDescriptionMantine docs
MtTooltipTooltip for additional informationTooltip
MtDialogModal dialog containerModal
MtErrorWrapperError display wrapperCustom FormEngine component

Buttons

ComponentDescriptionMantine docs
MtButtonButton for user actionsButton

Optional extensions

Require additional Mantine packages:
ComponentDescriptionMantine docs
MtDropzoneFile upload dropzoneDropzone (requires @mantine/dropzone)
MtTiptapRich text editorTiptap (requires @mantine/tiptap)

Additional resources

Support

For issues with the Mantine integration, contact support@optimajet.com or open a ticket on the FormEngine GitHub issues page.

Next steps

Last modified on April 16, 2026