The rich-paragraph block supports inline Markdown. Use it for body copy that needs emphasis without dedicated block styling.
Bold text draws attention to key terms. Italic adds nuance or introduces foreign words. Bold and italic together signal the highest inline emphasis.
Strikethrough marks deprecated or removed content. inline code displays short snippets, commands, or variable names inside prose.
Links are written as display text. They render as styled anchors — useful for referencing external resources or citations.
Alternative Markdown syntax also works: bold with underscores, italic with underscores. Both styles are equivalent to their asterisk counterparts (via remark-gfm).
Escape characters when you need a literal symbol: *not italic*, `not code`, [not a link]. The backslash prevents Markdown parsing.
Level 1 is the main section title. Use it once per section, at the very top.
Level 2 introduces a subsection within a section. It may appear multiple times per page.
Level 3 is the finest subdivision — useful for named concepts, examples, or grouped items inside a subsection.
Callout blocks interrupt the reading flow to signal additional context (note) or risk (warning). Both accept an optional label that appears as an uppercase tag above the message.
A note without a label. Use it for supplementary information, tips, or observations that enrich the main text without being critical.
Pro tip
A note with a label. The label appears as a small uppercase tag above the body. It can contain inline Markdown just like a rich-paragraph.
Did you know?
Labels are optional but recommended when the note has a distinct role — e.g. "Pro tip", "Definition", "Context", "Good to know". Keep labels short: 1–3 words.
A warning without a label. Use it for potential pitfalls, destructive actions, or anything the reader must not overlook.
Breaking change
A warning with a label. Visually stronger than a note — reserved for genuinely critical information. Avoid overusing warnings or readers will start ignoring them.
The list block renders a classic bulleted list. Each item supports inline Markdown (bold, italic, code, links, strikethrough). Use this for unordered enumerations where sequence does not matter.
The item-list block renders items in a two-column grid with a small accent dot. Both the label and each item support inline Markdown. Use it for dense, scannable sets of facts, features, or attributes where each item is short.
Key features
The steps block renders a numbered sequence with large, accent-coloured numerals. Both the label and each step support inline Markdown. Use it when order matters — installation instructions, workflows, recipes, or any sequential process.
How to add a new ebook
The highlight block is a large pull-quote styled element — typically used for key takeaways, statistics, or short phrases that should stand out from the surrounding body text.
A single, compelling sentence that summarises the most important idea on this page.
Highlights work best with 10–30 words. Longer content loses the visual impact that makes this block effective.
The quote block renders a left-bordered, italicised block quote. Use it for attributable quotes from authors, researchers, or personas.
Any sufficiently advanced technology is indistinguishable from magic. — Arthur C. Clarke
First, solve the problem. Then, write the code. — John Johnson
The image-with-caption block renders a full-width image with an optional italic caption below. The block is treated as an atomic unit — it will never be split across pages.

The code block renders a monospaced, pre-formatted block with a subtle background. Use it for multi-line code samples, configuration files, or shell commands.
// Minimal ebook definition
import type { Ebook } from "@/ebook-engine/types/ebook";
export const myEbook: Ebook = {
id: "my-ebook",
title: "My First Ebook",
author: "Your Name",
cover: {
layout: "centered",
background: { variant: "wave-cover" },
textColor: "#ffffff",
},
sections: [
{
id: "intro",
title: "Introduction",
blocks: [
{ type: "heading", level: 1, content: "Hello, World!" },
{ type: "rich-paragraph", content: "Your content goes here." },
],
},
],
};The table block renders structured tabular data with a styled header row, zebra-striped rows, and an optional caption. All values are plain strings.
| Block type | Category | Markdown support | Notes |
|---|---|---|---|
| rich-paragraph | Content | Yes (full) | Main body text |
| heading | Structure | Inline | Levels 1–3 |
| highlight | Content | Yes (full) | Pull-quote style |
| quote | Content | Yes (full) | Left-bordered blockquote |
| note | Callout | Yes (full) | Optional label (inline) |
| warning | Callout | Yes (full) | Optional label (inline) |
| action-box | Content | Yes (full) | Optional label (inline) |
| list | Structure | Inline | Bulleted list |
| item-list | Structure | Inline | 2-col grid with dots |
| steps | Structure | Inline | Numbered sequence |
| image-with-caption | Media | Inline | Caption only |
| code | Structure | No | Monospaced pre |
| table | Structure | Inline | Headers and cells |
| divider | Utility | — | Horizontal rule |
| page-break | Utility | — | Forces a new page |
The action-box block is a dark, centered message card used to highlight an action or suggestion — such as a next step, a share prompt, or a key takeaway. It supports an optional label above the main message.
Start building your first ebook today.
Next step
Copy the components-reference ebook as your starting template and replace the content.
Share this
If this reference helped you, share it with someone who is building content tools.
The divider block renders a subtle horizontal rule. Use it to visually separate unrelated groups of blocks within the same section.
Content below the divider continues in the same section but signals a thematic break to the reader.
The page-break block forces the pagination engine to start a new page at that exact point, regardless of how much space remains. The content below continues on the next page.
This paragraph is on the current page. The next paragraph will appear on a new page because a page-break follows.