import { Meta } from '@storybook/addon-docs/blocks';

<Meta title="Guides/Custom Components/Introduction" />

# Developing custom components with DS primitives

The DS provides lower level primitives for building custom components that you can use
if existing DS components are not enough to implement complex or unique designs.
Using these primitives ensures that your new custom components will still be
compatible with our visual design language and continue receiving updates as the
Design System evolves.

However, you should always prefer using the existing components to just using
these lower level primitives.

Furthermore, if you believe your component can be a good addition for the Design System:

- Read the [contribution guide](/story/contributing--page)
- Reach out to [#design-system-public](https://preply.slack.com/archives/C024EAEHP6V)
- Use Less.js instead of StyledComponents.
- Become familiar with the DS [internal guidelines and conventions](https://preply.atlassian.net/wiki/spaces/DS/pages/2778300873/Guidelines) and the step by step [runbooks](https://preply.atlassian.net/wiki/spaces/DS/pages/3250815332/Runbooks).

Check the guidelines below for some generic strategies to minimize the need for custom CSS.

The following guides provide further information on how to use the lower level primitives according to your stack:

- [Less.js](/story/guides-custom-components-less-js-intro--page)
- [StyledComponents](/story/guides-custom-components-styledcomponents-intro--page)
