DEV Community

Alex Spinov
Alex Spinov

Posted on

Mantine Has a Free API — 120+ React Components with Dark Mode Built-In

Mantine is a React component library with 120+ hooks and components, built-in dark mode, and a form library. Everything you need to build a polished app — out of the box.

Why Mantine?

  • 120+ components — buttons, modals, tables, charts, rich text editor
  • Hooks library — 60+ hooks for common patterns
  • Form library — validation, nested forms, list fields
  • Dark mode — built-in, zero config

Quick Start

npx mantine-app@latest
Enter fullscreen mode Exit fullscreen mode

Components

import { Button, TextInput, Select, Switch, Notification } from '@mantine/core';

function MyForm() {
  return (
    <div>
      <TextInput label="Email" placeholder="your@email.com" required />
      <Select label="Role" data={['Admin', 'User', 'Guest']} />
      <Switch label="Active" />
      <Button variant="filled" color="blue">Submit</Button>
    </div>
  );
}
Enter fullscreen mode Exit fullscreen mode

Forms

import { useForm } from '@mantine/form';

function LoginForm() {
  const form = useForm({
    initialValues: { email: '', password: '' },
    validate: {
      email: (v) => (/^\S+@\S+$/.test(v) ? null : 'Invalid email'),
      password: (v) => (v.length >= 6 ? null : 'Min 6 chars'),
    },
  });

  return (
    <form onSubmit={form.onSubmit((values) => console.log(values))}>
      <TextInput {...form.getInputProps('email')} label="Email" />
      <PasswordInput {...form.getInputProps('password')} label="Password" />
      <Button type="submit">Login</Button>
    </form>
  );
}
Enter fullscreen mode Exit fullscreen mode

Hooks

import { useDisclosure, useClipboard, useMediaQuery, useDebouncedValue } from '@mantine/hooks';

function App() {
  const [opened, { open, close }] = useDisclosure(false);
  const clipboard = useClipboard({ timeout: 2000 });
  const isMobile = useMediaQuery('(max-width: 768px)');
  const [debounced] = useDebouncedValue(searchTerm, 300);
}
Enter fullscreen mode Exit fullscreen mode

Notifications

import { notifications } from '@mantine/notifications';

notifications.show({
  title: 'Success',
  message: 'User created!',
  color: 'green',
  autoClose: 3000,
});
Enter fullscreen mode Exit fullscreen mode

Building React dashboards? Check out my Apify actors for web scraping data, or email spinov001@gmail.com for custom React solutions.

Mantine, shadcn/ui, or Chakra — which React UI library do you prefer? Share below!

Top comments (0)