diff --git a/.claude/skills/create-example/SKILL.md b/.claude/skills/create-example/SKILL.md
index dbf95af451..47f91486d0 100644
--- a/.claude/skills/create-example/SKILL.md
+++ b/.claude/skills/create-example/SKILL.md
@@ -45,7 +45,7 @@ Contains all of the example's configuration. Here's an annotated example (from `
"Slash Menu",
"Appearance & Styling"
],
-
+
"dependencies": {
"@mui/icons-material": "^5.16.1",
"@mui/material": "^5.16.1"
@@ -54,6 +54,11 @@ Contains all of the example's configuration. Here's an annotated example (from `
"pro": true
```
+Two constraints on dependencies:
+
+- `"uiLib"` (optional; `"mantine"` | `"ariakit"` | `"shadcn"`, default `"mantine"`) selects which single BlockNote UI package the generated `package.json` depends on. The mantine variant also carries `@mantine/core`/`@mantine/hooks` (peer dependencies of `@blocknote/mantine`). Do not add UI packages to `"dependencies"` manually; set `uiLib` instead.
+- Examples with `"docs": true` are all compiled into the docs site's single dependency context, so `vp run gen` fails if two docs-embedded examples declare incompatible version ranges of the same package (e.g. `lib0` for yjs 13 vs 14). Reconcile the ranges or set `"docs": false` on one of them.
+
`README.md`
A Markdown description of the example. Made of four parts:
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000000..eb1fb001f4
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,3 @@
+# Committed output of `pnpm run gen` — collapsed in GitHub diffs and excluded
+# from language stats. CI (build.yml) verifies it stays in sync with examples/.
+playground/src/examples.gen.tsx linguist-generated=true
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 00aead0595..a868797ff3 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -31,6 +31,11 @@ jobs:
- name: Install Dependencies
run: vp install
+ - name: Check generated files are up to date
+ run: |
+ vp run --filter @blocknote/dev-scripts gen
+ git diff --exit-code || (echo "Generated files are out of date. Run 'pnpm run gen' and commit the result." && exit 1)
+
- name: Build packages
run: vp run -r build
diff --git a/docs/app/(home)/_components/FAQ.tsx b/docs/app/(home)/_components/FAQ.tsx
deleted file mode 100644
index 5fbe0bda40..0000000000
--- a/docs/app/(home)/_components/FAQ.tsx
+++ /dev/null
@@ -1,51 +0,0 @@
-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 (
-
- {faq.answer}
-
- Questions?
-
-
- {faq.question}
-
-
- 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. -
-- Forget low-level details. Work with a strongly typed API. - Get modern UI components out-of-the-box. -
-- "{testimonial.quote}" -
-- From startups to enterprises, teams choose BlockNote to build their - document experiences. -
-- {props.children} -
- ); -} - -export function SidebarItem({ - icon, - children, - ...props -}: LinkProps & { - icon?: ReactNode; -}) { - const pathname = usePathname(); - const ref = useRef{selected.title}
-- {selected.description} -
-{item.title}
-- {item.description} -
-BlockNote is an open source block-based editor:
", - "