--- title: React WYSIWYG tableOfContents: true --- # React ## Introduction The following guide describes how to integrate Tiptap with your [React](https://reactjs.org/) project. We’re using [Create React App](https://reactjs.org/docs/getting-started.html) here, but the workflow should be similar with other setups. ## Create React App ### Quickstart If you just want to get up and running with Tiptap you can use the [Tiptap Create React App template by @alb](https://github.com/alb/cra-template-tiptap) to create a new project with all the steps listed below completed already. ```bash npx create-react-app my-tiptap-project --template tiptap ``` #### 1. Create a project (optional) Let’s start with a fresh React project called `my-tiptap-project`. [Create React App](https://reactjs.org/docs/getting-started.html) will set up everything we need. ```bash # create a project with npm npx create-react-app my-tiptap-project # change directory cd my-tiptap-project ``` #### 2. Install the dependencies Time to install the `@tiptap/react` package, `@tiptap/pm` (the ProseMirror library) and `@tiptap/starter-kit`, which includes the most popular extensions to get started quickly. ```bash npm install @tiptap/react @tiptap/pm @tiptap/starter-kit ``` If you followed step 1 and 2, you can now start your project with `npm run start`, and open [http://localhost:3000](http://localhost:3000) in your browser. #### 3. Create a new component To actually start using Tiptap we need to create a new component. Let’s call it `Tiptap` and put the following example code in `src/Tiptap.jsx`. ```jsx // src/Tiptap.jsx import { EditorProvider, FloatingMenu, BubbleMenu } from '@tiptap/react' import StarterKit from '@tiptap/starter-kit' // define your extension array const extensions = [ StarterKit, ] const content = '
Hello World!
' const Tiptap = () => { return (Hello World!
' const Tiptap = () => { const editor = useEditor({ extensions, content, }) return ( <>{JSON.stringify(editor.getJSON(), null, 2)}) } ``` **Important**: This won't work if you use the `useEditor` hook to setup your editor. You should now see a pretty barebones example of Tiptap in your browser. #### 6. Add before or after slots Since the EditorContent component is rendered by the `EditorProvider` component, we now can't directly define where to render before or after content of our editor. For that we can use the `slotBefore` & `slotAfter` props on the `EditorProvider` component. ```jsx