Quickstart
Getting started with BlockNote is quick and easy. Install the required packages and add the React component to your app.
Installing with NPM
To install BlockNote with NPM (opens in a new tab), run:
npm install @blocknote/core @blocknote/react @blocknote/mantine
Creating an Editor
With the useCreateBlockNote
hook, we can create a new editor instance, then use theBlockNoteView
component to render it. See below:
import {
BlockNoteSchema,
defaultInlineContentSpecs,
filterSuggestionItems,
} from "@blocknote/core";
import "@blocknote/core/fonts/inter.css";
import { BlockNoteView } from "@blocknote/mantine";
import "@blocknote/mantine/style.css";
import {
DefaultReactSuggestionItem,
SuggestionMenuController,
useCreateBlockNote,
} from "@blocknote/react";
import { Reference } from "./Reference";
export default function App() {
const schema = BlockNoteSchema.create({
inlineContentSpecs: {
...defaultInlineContentSpecs,
reference: Reference,
},
});
const getReferenceMenuItems = (
editor: typeof schema.BlockNoteEditor,
): DefaultReactSuggestionItem[] => {
const citations = [
{
key: 1,
doi: "10.1093/ajae/aaq063",
author: "Steve Smith",
title: "Understanding BlockNote",
journal: "BlockNote Journal",
year: 2023,
},
{
key: 2,
doi: "10.1234/example.doi",
author: "Jane Doe",
title: "Exploring BlockNote Features",
journal: "BlockNote Features Journal",
year: 2022,
},
{
key: 3,
doi: "10.5678/another.example",
author: "John Doe",
title: "Advanced BlockNote Techniques",
journal: "BlockNote Techniques Journal",
year: 2021,
},
];
return citations.map((citation) => ({
title: citation.title,
onItemClick: () => {
editor.insertInlineContent([
{
type: "reference",
props: {
...citation,
},
},
" ",
]);
},
}));
};
const editor = useCreateBlockNote({
schema,
initialContent: [
{
type: "paragraph",
content: "Welcome to this demo!",
},
{
type: "paragraph",
content: [
{
type: "text",
text: "Woah, you can add a reference like this: ",
styles: {},
},
{
type: "reference",
props: {
key: 1,
doi: "10.1093/ajae/aaq063",
author: "Steve Smith",
title: "Understanding BlockNote",
journal: "BlockNote Journal",
year: 2023,
},
},
{
type: "text",
text: " <- This is an example reference",
styles: {},
},
],
},
{
type: "paragraph",
content: "Press the '@' key to open the references menu and add another",
},
{
type: "paragraph",
},
],
});
// Renders the editor instance using a React component.
return (
<BlockNoteView editor={editor}>
<SuggestionMenuController
triggerCharacter={"@"}
getItems={async (query) =>
filterSuggestionItems(getReferenceMenuItems(editor), query)
}
/>
</BlockNoteView>
);
}
We also import @blocknote/mantine/style.css
to add default styling for the editor and the Inter
font that BlockNote exports (optional).
Are you using Next.js (create-next-app
)? Because BlockNote is a
client-only component, make sure to disable server-side rendering of
BlockNote. Read our guide on setting up Next.js + BlockNote
It's also possible to use BlockNote without React, using "vanilla" JavaScript or other frameworks. Read our guide on using BlockNote without React
Next steps
You now know how to integrate BlockNote into your React app! However, this is just scratching the surface of what you can do with BlockNote.
- Learn about blocks and the editor basics and how to interact with the editor using the editor API
- See UI Components to customize built-in menus and toolbars and Styling & Theming to customize the look and feel of the editor
- Further extend the editor with your own Blocks using Custom Schemas or add Real-Time Collaboration