React renderer for Strapi v5 Blocks content with inline text color, background highlight, and all standard marks.
- Why?
- Compatibility
- Installation
- Usage
- Supported Blocks
- Supported Modifiers
- Custom Renderers
- TypeScript
- Contributing
- License
The official @strapi/blocks-react-renderer doesn't support the extra marks (color, backgroundColor) that the Better Blocks plugin adds to the Strapi editor.
This package is a drop-in replacement that renders them out of the box — no configuration needed.
| Strapi Version | Renderer Version | React Version |
|---|---|---|
| v5.x | v0.x | ≥ 17 |
# Using yarn
yarn add @k11k/better-blocks-react-renderer
# Using npm
npm install @k11k/better-blocks-react-rendererPeer dependencies: react >= 17
import { BlocksRenderer } from '@k11k/better-blocks-react-renderer';
// Basic — renders all blocks including color/highlight
<BlocksRenderer content={blocks} />;That's it. Colors and highlights work automatically.
| Block | Default element |
|---|---|
paragraph |
<p> |
heading (1–6) |
<h1>–<h6> |
list (ordered/unordered) |
<ol> / <ul> |
list-item |
<li> |
link |
<a> |
quote |
<blockquote> |
code |
<pre><code> |
image |
<img> |
| Modifier | Default element | Source |
|---|---|---|
bold |
<strong> |
Strapi core |
italic |
<em> |
Strapi core |
underline |
<span> |
Strapi core |
strikethrough |
<del> |
Strapi core |
code |
<code> |
Strapi core |
color |
<span style={{color}}> |
Better Blocks |
backgroundColor |
<span style={{backgroundColor}}> |
Better Blocks |
Override any block type with your own component:
<BlocksRenderer
content={blocks}
blocks={{
paragraph: ({ children }) => <p className="my-paragraph">{children}</p>,
heading: ({ children, level }) => {
const Tag = `h${level}`;
return <Tag>{children}</Tag>;
},
link: ({ children, url }) => (
<a href={url} target="_blank" rel="noopener noreferrer">
{children}
</a>
),
image: ({ image }) => <img src={image.url} alt={image.alternativeText || ''} loading="lazy" />,
}}
/>Override any text modifier with your own component:
<BlocksRenderer
content={blocks}
modifiers={{
bold: ({ children }) => <strong className="font-bold">{children}</strong>,
color: ({ children, color }) => <span style={{ color }}>{children}</span>,
backgroundColor: ({ children, backgroundColor }) => (
<mark style={{ backgroundColor }}>{children}</mark>
),
}}
/>All types are exported:
import type {
BlocksContent,
BlocksRendererProps,
BlockNode,
TextNode,
CustomBlocksConfig,
CustomModifiersConfig,
} from '@k11k/better-blocks-react-renderer';Contributions are welcome! The easiest way to get started is with Docker:
# Clone the repository
git clone https://github.com/k11k-labs/better-blocks-react-renderer.git
cd better-blocks-react-renderer
# Start the playground with Docker
cd playground
docker compose upThis will start a Strapi v5 instance with the Better Blocks plugin and a React app that renders the content — all pre-configured with a showcase article.
- Strapi admin: http://localhost:1337/admin (login:
admin@example.com/admin12#) - React app: http://localhost:5173
- Make changes to the renderer source in
src/ - Rebuild:
yarn build(from repo root) - The React app picks up the new build automatically
# Build the renderer
yarn install && yarn build
# Start Strapi
cd playground/strapi && cp .env.example .env && npm install && npm run dev
# Start the React app (in another terminal)
cd playground/react-app && npm install && npm run devyarn test # Run tests
yarn test:ts # Type check
yarn lint # Check formatting- GitHub Issues — Bug reports and feature requests
- @k11k/strapi-plugin-better-blocks — Strapi plugin that adds color & highlight marks to the Blocks editor
- @strapi/blocks-react-renderer — Official Strapi renderer (no color/highlight support)
