+ Every BlockNote document is a collection of blocksβheadings, lists,
+ images, and more. Use the built-in blocks, customize them to fit
+ your needs, or create entirely new ones.
+
+ Three nations choose
+
+
+ open source
+ {" "}
+ to power
+
+ their digital future.
+
+
+ {/* Short punchy copy */}
+
+ France, Germany, and the Netherlands partner to build{" "}
+
+ Docs
+
+ , a collaborative writing tool for thousands of public servants.{" "}
+ BlockNote is the engine.
+
+
+ {/* Compelling social proof - simpler */}
+
+ "Building Digital Commons means better tools, data sovereignty,
+ and shared progress."
+
+
+ );
+};
diff --git a/docs/app/(home)/_components/FAQ.tsx b/docs/app/(home)/_components/FAQ.tsx
new file mode 100644
index 0000000000..158c5c691a
--- /dev/null
+++ b/docs/app/(home)/_components/FAQ.tsx
@@ -0,0 +1,51 @@
+import React from "react";
+
+const faqs = [
+ {
+ question: "Isn't it easier to use a Headless editor framework?",
+ answer:
+ "There are a number of really powerful headless text editor frameworks available. In fact, BlockNote is built on Prosemirror and TipTap. However, even when using a headless library, it takes several months and requires deep expertise to build a fully-featured editor with a polished UI that your users expect.",
+ },
+ {
+ question: "Is BlockNote ready for production use?",
+ answer:
+ "BlockNote is used by dozens of companies in production, ranging from startups to large enterprises and public institutions. Also, we didn't reinvent the wheel. The core editor is built on top of Prosemirror - a battle tested framework that powers software from Atlassian, Gitlab, the New York Times, and many others.",
+ },
+ {
+ question: "Can I add my own extensions to BlockNote?",
+ answer:
+ "BlockNote comes with lot of functionality out-of-the-box, but we understand that every use case is different. You can easily customize the built-in UI Components, or create your own custom Blocks, Inline Content, and Styles. If you want to go even further, you can extend the core editor with additional Prosemirror or TipTap plugins.",
+ },
+ {
+ question: "Is BlockNote really free?",
+ answer:
+ "100% of BlockNote is open source. We offer consultancy, support services and commercial licenses for specific XL packages to help sustain BlockNote. Explore our pricing page for more details.",
+ },
+];
+
+export const FAQ: React.FC = () => {
+ return (
+
+
+ {tabs.map((tab) => {
+ const isActive = activeTabId === tab.id;
+ // Dynamic styles based on active state could be passed or handled here
+ // For simplicity, we'll use a generic active style or specific color logic if needed.
+ // But CodePlayground had specific colors (purple, amber, blue).
+ // Let's rely on the parent or use a generic active style here for now,
+ // or we can add a 'color' prop to FeatureTab if we want distinct colors per tab.
+
+ return (
+
+ );
+ })}
+
+ Build a Notion-style{" "}
+ editor in minutes.
+
+
+ The AI-native, open source rich
+ text editor for React. Add a{" "}
+ fully customizable modern block-based editing
+ experience to your product that users will love.
+
+
+
+
+ View Demo
+
+ β
+
+
+
+ Documentation
+
+
+
+
+
+
+
+
+ );
+};
diff --git a/docs/app/(home)/_components/HeroVideo.tsx b/docs/app/(home)/_components/HeroVideo.tsx
new file mode 100644
index 0000000000..a36cccbe73
--- /dev/null
+++ b/docs/app/(home)/_components/HeroVideo.tsx
@@ -0,0 +1,77 @@
+"use client";
+import Link from "next/link";
+import React from "react";
+
+export const HeroVideo: React.FC = () => {
+ return (
+ <>
+
+
+ Building a rich text editor is one of the hardest engineering
+ challenges on the web. It used to take months of specialized
+ work.
+
+
+ We believe that great tools should be{" "}
+ sovereign by default. You shouldn't have to
+ choose between a cohesive UX and owning your infrastructure.
+
+
+ That's why we built BlockNote. A{" "}
+ batteries-included editor that gives you a
+ Notion-quality experience in minutes, while staying grounded
+ in open standards like{" "}
+
+ ProseMirror
+ {" "}
+ and Yjs.
+
+
+
+
+ Whether you're a startup or a public institution, you deserve
+ software that lasts. Join us to{" "}
+
+ shape the future
+
+ {" "}
+ of the open web.
+
+
+
+
+
+ {/* Floating "Card" for Impact - DARK MODE */}
+
+
+
+
+ Enter BlockNote.
+
+
+ Forget low-level details. Work with a strongly typed API.
+ Get modern UI components out-of-the-box.
+
+);
diff --git a/docs/app/(home)/_components/OpenSource.tsx b/docs/app/(home)/_components/OpenSource.tsx
new file mode 100644
index 0000000000..b00ec614d6
--- /dev/null
+++ b/docs/app/(home)/_components/OpenSource.tsx
@@ -0,0 +1,126 @@
+"use client";
+import React from "react";
+
+const pillars = [
+ {
+ icon: "ποΈ",
+ title: "Built on Giants",
+ description:
+ "ProseMirror and Yjs are battle-tested foundations trusted by teams worldwide, we're excited to build with these technologies.",
+ },
+ // {
+ // icon: "π€",
+ // title: "Community First",
+ // description:
+ // "We collaborate closely with the Yjs team and contribute back to the ecosystem. Open source thrives on shared innovation.",
+ // },
+ // {
+ // icon: "π",
+ // title: "Yours to Own",
+ // description:
+ // "No vendor lock-in. Self-host, fork, extend. Your editing layer, under your control.",
+ // },
+ // {
+ // icon: "πͺπΊ",
+ // title: "Digital Autonomy",
+ // description:
+ // "Partnering with DINUM (France) and Zendis (Germany) to build open European alternatives β reducing dependencies on big tech.",
+ // },
+ {
+ icon: "β¬οΈ",
+ title: "Contributing Upstream",
+ description:
+ "We're significant contributors to Yjs, Hocuspocus, and Tiptap. When we improve the ecosystem, everyone benefits.",
+ },
+ {
+ icon: "π±",
+ title: "Sustainable by Design",
+ description:
+ "Bootstrapped and independent. We're building for the long term, not the next funding round.",
+ },
+];
+
+export const OpenSource: React.FC = () => {
+ return (
+
+ {/* Subtle grid background */}
+
+
+
+
+
+
+
+ Committed to open source.
+
+
+ Document editing is foundational infrastructure for the modern
+ workforce. We believe the tools we use to create and share knowledge
+ should be open, transparent, and free from lock-in. That's why
+ everything we build is open source.
+
+
+
+
+ {pillars.map((pillar, index) => (
+
+
{pillar.icon}
+
{pillar.title}
+
+ {pillar.description}
+
+
+ ))}
+
+
+ {/* Founder Quote */}
+ {/*
+
+
+ "Here we could put a quote about our open source commitment."
+
+ );
+}
diff --git a/docs/app/demo/_components/styles.css b/docs/app/demo/_components/styles.css
new file mode 100644
index 0000000000..d4882496ac
--- /dev/null
+++ b/docs/app/demo/_components/styles.css
@@ -0,0 +1,20 @@
+/* Custom scrollbar for sidebar */
+.bn-threads-sidebar {
+ height: 100%;
+}
+
+/* Ensure editor content takes full height */
+.bn-editor {
+ min-height: 100%;
+}
+
+.bn-threads-sidebar .bn-thread {
+ /* todo: fix in blocknote */
+ min-width: auto !important;
+}
+
+/*
+(for recording demo video, also needs bn-ai-prompt on combo)
+.bn-ai-prompt {
+ width: 350px;
+} */
diff --git a/docs/app/demo/_components/utils.ts b/docs/app/demo/_components/utils.ts
new file mode 100644
index 0000000000..c69c63e3e8
--- /dev/null
+++ b/docs/app/demo/_components/utils.ts
@@ -0,0 +1,80 @@
+export const HARDCODED_USERS = [
+ {
+ id: "user-1",
+ username: "Kev",
+ color: "#9810fa",
+ avatarUrl: "/avatars/avater2-m.jpg",
+ },
+ {
+ id: "user-2",
+ username: "Matt",
+ color: "#00ff00",
+ avatarUrl: "/avatars/avatar3-m.jpg",
+ },
+ {
+ id: "user-3",
+ username: "Sef",
+ color: "#ababffff",
+ avatarUrl: "/avatars/avater5-m.jpg",
+ },
+ {
+ id: "user-4",
+ username: "Nicky",
+ color: "#ff00ff",
+ avatarUrl: "/avatars/avatar1-f.jpg",
+ },
+ {
+ id: "user-5",
+ username: "Sam",
+ color: "#00ffff",
+ avatarUrl: "/avatars/avatar7-m.jpg",
+ },
+ {
+ id: "user-6",
+ username: "Walter",
+ color: "#ffff00",
+ avatarUrl: "/avatars/avatar10-m.jpg",
+ },
+ {
+ id: "user-7",
+ username: "Amanda",
+ color: "#ffa500",
+ avatarUrl: "/avatars/avatar4-f.jpg",
+ },
+ {
+ id: "user-8",
+ username: "Sara",
+ color: "#800080",
+ avatarUrl: "/avatars/avatar6-f.jpg",
+ },
+];
+
+export const getRandomUser = () => {
+ return HARDCODED_USERS[Math.floor(Math.random() * HARDCODED_USERS.length)];
+};
+
+// The resolveUsers function fetches information about your users
+// (e.g. their name, avatar, etc.). Usually, you'd fetch this from your
+// own database or user management system.
+// Here, we just return the hardcoded users
+export async function resolveUsers(userIds: string[]) {
+ // fake a (slow) network request
+ await new Promise((resolve) => setTimeout(resolve, 500));
+
+ return HARDCODED_USERS.filter((user) => userIds.includes(user.id));
+}
+
+// Uploads a file to tmpfiles.org and returns the URL to the uploaded file.
+export async function uploadFile(file: File) {
+ const body = new FormData();
+ body.append("file", file);
+
+ const ret = await fetch("https://tmpfiles.org/api/v1/upload", {
+ method: "POST",
+ body: body,
+ });
+ return (await ret.json()).data.url.replace(
+ "tmpfiles.org/",
+ "tmpfiles.org/dl/",
+ );
+}
diff --git a/docs/app/demo/layout.tsx b/docs/app/demo/layout.tsx
new file mode 100644
index 0000000000..be4a00255b
--- /dev/null
+++ b/docs/app/demo/layout.tsx
@@ -0,0 +1,6 @@
+import { HomeLayout } from "@/components/fumadocs/layout/home";
+import { baseOptions } from "@/lib/layout.shared";
+
+export default function Layout({ children }: LayoutProps<"/">) {
+ return {children};
+}
diff --git a/docs/app/demo/page.tsx b/docs/app/demo/page.tsx
new file mode 100644
index 0000000000..6e7a5833f2
--- /dev/null
+++ b/docs/app/demo/page.tsx
@@ -0,0 +1,14 @@
+import { DemoEditor } from "./_components/DemoEditor";
+
+export default function DemoPage() {
+ return (
+
+
+
+ Try BlockNote
+
+
+
+
+ );
+}
diff --git a/docs/app/examples/[[...slug]]/page.tsx b/docs/app/examples/[[...slug]]/page.tsx
index b30bbb2eee..1698b3533f 100644
--- a/docs/app/examples/[[...slug]]/page.tsx
+++ b/docs/app/examples/[[...slug]]/page.tsx
@@ -8,6 +8,7 @@ import { Heading } from "fumadocs-ui/components/heading";
import { DocsBody, DocsPage } from "fumadocs-ui/layouts/docs/page";
import { createRelativeLink } from "fumadocs-ui/mdx";
import type { Metadata } from "next";
+import Link from "next/link";
import { notFound } from "next/navigation";
export default async function Page(props: PageProps<"/examples/[[...slug]]">) {
@@ -42,6 +43,24 @@ export default async function Page(props: PageProps<"/examples/[[...slug]]">) {
>
{page.data.title}
+ {!params.slug || params.slug.length === 0 ? (
+
+
+
+ Interactive Playground
+
+
+ Try all features combined in our full-featured demo editor.
+
+
+
+ Try the Demo →
+
+
+ ) : null}
+ Everything you need to get started.{" "}
+
+
+
+ Liberally licensed
+
+
+ BlockNote is MPL-licensed. This is close to MIT and free for any
+ use. The key difference is a "share-alike" requirement: if you
+ modify BlockNote's internal files, you must share those specific
+ changes.
+
+
+ {" "}
+ and free for any project.
+ >
+ ),
+ price: "Free",
features: [
- "Access to all Pro Examples",
- "Prioritized Bug Reports on GitHub",
- "Support maintenance and new versions of our open source library",
- "XL packages only available for open source projects under GPL-3.0 or early stage startups",
+ "All blocks & UI components",
+
+ "Drag-and-drop editing",
+ "Slash commands & menus",
+ "Real-time collaboration",
+ "Comments",
+
+ XL Packages free for OSS under GPL-3.0
+ ,
],
+ cta: "get-started",
+ href: "/docs",
},
{
id: "business",
title: "Business",
+ icon: "β‘",
+ tagline: "Go premium",
mostPopular: true,
+ badge: "Recommended",
description:
- // "Best for companies who need a commercial license for XL features.",
-
- "Best for companies that want a direct line to the team and a commercial license.",
+ "Commercial license for access to advanced features and technical support.",
price: { month: 390, year: 48 },
features: [
- Commercial license for XL packages:,
- "- AI integration",
- "- Multi-column layouts",
- "- Export to PDF, Docx, ODT, Email",
- "Access to all Pro Examples",
- "Prioritized Bug Reports on GitHub",
- "Support maintenance and new versions of our open source library",
- "Logo on our website and repositories",
+
+ Commercial license for XL packages:
+ ,
+
+ β’ AI integration
+ ,
+
+ β’ Multi-column layouts
+ ,
+
+ β’ Export to PDF, Docx, ODT, Email
+ ,
+ "Logo on website and repositories",
- Standard Support included (
- see SLA)
+ Standard Support (
+
+ see SLA
+
+ )
,
],
+ cta: "buy",
},
{
id: "enterprise",
title: "Enterprise",
- description:
- "Collaborate directly with the BlockNote team for dedicated consulting and support.",
- price: "Tailored pricing",
+ icon: "π’",
+ tagline: "Sustainable partnerships",
+ description: "Custom licensing, dedicated support, and design partnership.",
+ price: "Custom",
features: [
- "Development of BlockNote features required for your organization",
- "Access to a private Slack channel with the maintainers",
- "Guidance on integrating BlockNote into your project",
- Commercial license for XL packages:,
- "- AI integration",
- "- Multi-column layouts",
- "- Export to PDF, Docx, ODT, Email",
- "Access to all Pro Examples",
- "Prioritized Bug Reports and Feature Requests on GitHub",
- "Support maintenance and new versions of our open source library",
- "Logo on our website and repositories",
+
+ Everything in Business, plus:
+ ,
+ "Custom BlockNote feature development",
+ "Private Slack channel with maintainers",
+ "Onboarding and integration guidance",
- Priority Support included (
- see SLA)
+ Priority Support (
+
+ see SLA
+
+ )
,
],
href: "/about/",
+ cta: "contact",
},
];
export default function Pricing() {
return (
-
-
-
- BlockNote Pro
-
- Upgrade your BlockNote experience
-
- Get direct support from the maintainers, access Pro Examples
- and get your commercial license for XL Packages such as
- BlockNote AI.
-
- Your subscription helps us to maintain and develop BlockNote.
-
+
+
+ {/* Header */}
+
+
+ Pricing
+
+
+ 100% Open Source.
+
+
+ Fair Pricing.
+
+
+
+ The majority of BlockNote is liberally licensed and free to use for
+ any purpose. The dual-licensed XL features (like AI) are free for
+ open source projects, but require a commercial license for
+ closed-source applications.
+
+
+
+ {/* Pricing Tiers */}
-
- BlockNote is 100% open source software that organizations of all sizes
- are using to add polished editing experiences to their apps.
-
+
+ {/* Social proof */}
+
+
+ Trusted by teams building the future of collaboration
+
+
+ {sponsors.map((sponsor) => (
+
+
+
+ ))}
+
+
+
+ {/* Startup Discounts */}
+
+
+ Discounts for Startups
+
+
+ Building the next big thing? We love supporting early-stage
+ companies. If you're a seed-stage startup or non-profit, get in
+ touch for special pricing on our Business plan.
+