diff --git a/docs/src/demos/Guide/NodeViews/ReactComponentContent/Component.jsx b/docs/src/demos/Guide/NodeViews/ReactComponentContent/Component.jsx
new file mode 100644
index 00000000..98e98f8f
--- /dev/null
+++ b/docs/src/demos/Guide/NodeViews/ReactComponentContent/Component.jsx
@@ -0,0 +1,12 @@
+import React from 'react'
+import { NodeViewWrapper, NodeViewContent } from '@tiptap/react'
+
+export default () => {
+ return (
+
+ React Component
+
+
+
+ )
+}
diff --git a/docs/src/demos/Guide/NodeViews/ReactComponentContent/Extension.js b/docs/src/demos/Guide/NodeViews/ReactComponentContent/Extension.js
new file mode 100644
index 00000000..5fe2618a
--- /dev/null
+++ b/docs/src/demos/Guide/NodeViews/ReactComponentContent/Extension.js
@@ -0,0 +1,35 @@
+import { Node, mergeAttributes } from '@tiptap/core'
+import { ReactNodeViewRenderer } from '@tiptap/react'
+import Component from './Component.jsx'
+
+export default Node.create({
+ name: 'reactComponent',
+
+ group: 'block',
+
+ content: 'inline*',
+
+ addAttributes() {
+ return {
+ count: {
+ default: 0,
+ },
+ }
+ },
+
+ parseHTML() {
+ return [
+ {
+ tag: 'react-component',
+ },
+ ]
+ },
+
+ renderHTML({ HTMLAttributes }) {
+ return ['react-component', mergeAttributes(HTMLAttributes)]
+ },
+
+ addNodeView() {
+ return ReactNodeViewRenderer(Component)
+ },
+})
diff --git a/docs/src/demos/Guide/NodeViews/ReactComponentContent/index.jsx b/docs/src/demos/Guide/NodeViews/ReactComponentContent/index.jsx
new file mode 100644
index 00000000..141e4deb
--- /dev/null
+++ b/docs/src/demos/Guide/NodeViews/ReactComponentContent/index.jsx
@@ -0,0 +1,29 @@
+import React from 'react'
+import { useEditor, EditorContent } from '@tiptap/react'
+import { defaultExtensions } from '@tiptap/starter-kit'
+import ReactComponent from './Extension.js'
+import './styles.scss'
+
+export default () => {
+ const editor = useEditor({
+ extensions: [
+ ...defaultExtensions(),
+ ReactComponent,
+ ],
+ content: `
+
+ This is still the text editor you’re used to, but enriched with node views.
+
+
+ This is editable.
+
+
+ Did you see that? That’s a React component. We are really living in the future.
+
+ `,
+ })
+
+ return (
+
+ )
+}
diff --git a/docs/src/demos/Guide/NodeViews/ReactComponentContent/styles.scss b/docs/src/demos/Guide/NodeViews/ReactComponentContent/styles.scss
new file mode 100644
index 00000000..c0eeabfc
--- /dev/null
+++ b/docs/src/demos/Guide/NodeViews/ReactComponentContent/styles.scss
@@ -0,0 +1,34 @@
+/* Basic editor styles */
+.ProseMirror {
+ > * + * {
+ margin-top: 0.75em;
+ }
+}
+
+.react-component {
+ border: 3px solid #0D0D0D;
+ border-radius: 0.5rem;
+ margin: 1rem 0;
+ position: relative;
+}
+
+.label {
+ margin-left: 1rem;
+ background-color: #0D0D0D;
+ font-size: 0.6rem;
+ letter-spacing: 1px;
+ font-weight: bold;
+ text-transform: uppercase;
+ color: #fff;
+ position: absolute;
+ top: 0;
+ padding: 0.25rem 0.75rem;
+ border-radius: 0 0 0.5rem 0.5rem;
+}
+
+.content {
+ margin: 2.5rem 1rem 1rem;
+ padding: 0.5rem;
+ border: 2px dashed #0D0D0D20;
+ border-radius: 0.5rem;
+}
diff --git a/docs/src/docPages/guide/node-views/react.md b/docs/src/docPages/guide/node-views/react.md
index 539551f6..f4e5c7e2 100644
--- a/docs/src/docPages/guide/node-views/react.md
+++ b/docs/src/docPages/guide/node-views/react.md
@@ -6,3 +6,5 @@
TODO
+
+