Documentation · Support · GitHub · WordPress.org

WordPress plugin · slug tocflow · v1.2.0

The TOC that reads
with your reader.

TOCflow is the first Table of Contents block with a built-in Reading Guide — section previews, read-time estimates, hover tooltips, emoji reactions, and one-click academic citations. Server-rendered. Zero external APIs. Works with every theme and SEO plugin.

v1.2.0 WordPress 6.4 – 7.1 PHP 7.4 – 8.3 GPL-2.0-or-later No ads · No accounts · No tracking

What it does

A complete Table of Contents block — and then some.

All the things you'd expect from a TOC plugin, built properly on the WordPress block editor with no shortcuts.

🗂

Live editor preview

The outline updates in real time as you add or reorder Heading blocks. No placeholder-only box.

Server-rendered

The <nav> is in the HTML response. Search engines and screen readers see it before any JavaScript runs.

🔗

Accurate anchors

Custom HTML anchors on a heading win. Anchors are injected at render time using the same slug map as the list.

🎨

Five style presets

Default, Minimal, Boxed, Underline, Card — all switchable from the Styles panel with a single click.

📌

Sticky & collapsible

Keep the TOC in view while scrolling. Let readers collapse it. Highlight the active section as they scroll.

🌐

Auto-insert sitewide

Generate the TOC at the top of content or after the first heading across all posts — no per-post editing needed.

📝

Shortcode

[tocflow] for Classic Editor content, widgets, and theme templates via do_shortcode().

Accessible

Proper <nav> landmark, ARIA labels, keyboard navigation, and aria-current on the active link.

📊

JSON-LD schema

Optional ItemList schema markup. Opt-in and off by default — safe alongside Yoast, Rank Math, and Schema Pro.

New in v1.2.0 — study assistant

Private notes, a progress bar, and a resume bookmark.

Opt-in tools for long-form reading. State stays in the reader’s browser — no accounts, no server, no tracking.

📝

Reader note pads

A 📝 button on each section lets readers jot personal notes. Stored in localStorage only. Enable with rnotes="1" or the block sidebar toggle.

📊

Reading progress bar

A thin animated bar shows 0–100% of the document read, based on headings scrolled past. Enable with rprogress="1".

Resume bookmark

TOCflow remembers the last heading the reader reached and offers a ↩ Resume button on the next visit. Enable with bookmark="1".

Section Planner

Writers mark each heading Draft, In progress, or Done in the editor, and can still attach a reader-facing teaser note.

Total read-time badge

When Reading Guide + read-time are on, the TOC header shows the aggregated read time for the whole post.

From v1.1.0 — what no other TOC plugin does

Reading Guide mode turns your TOC into a reading companion.

Enable one toggle in the block sidebar. Every enrichment is extracted from your block content server-side — zero JavaScript fetches, zero external services, zero accounts.

👁

Hover section preview

Hovering over any TOC link pops a floating tooltip with the section's opening text. Reader sees the content without scrolling. Works on keyboard focus too. Smart viewport-aware positioning.

📖

Section content previews

The opening ~20 words of each section appear beneath its TOC link, extracted server-side from your block content. No JS fetch. Works with nested blocks (Group, Columns, Cover).

📏

Content density bars

A thin bar under each TOC link shows that section's word count as a proportion of the longest section. Readers see long vs short at a glance without reading a word.

Per-section read-time

~N min badge alongside each link, computed at PHP render time (word count ÷ 200 wpm). Readers budget their attention before they click.

Reading progress

As a reader scrolls past each heading, its TOC item fades out. The outline becomes a live checklist of what has been read and what remains.

✍️

Author section notes

Type a teaser or hook per heading in the block editor's Section Notes panel. Readers reveal it with a tap. Stored in block attributes — no database round-trip, no extra query.

💡

Emoji reactions

Readers react per section: 💡 Insightful · ⭐ Saved · 🤔 Unclear · ✅ Got it. Stored in localStorage. Zero server calls. Zero accounts. Zero tracking.

§

Per-section academic citations

One-click copy of a formatted citation (APA, MLA, Chicago, Harvard, or plain link) for any section, including the direct #anchor. Built from WordPress post meta — no external API.

Every feature is opt-in.

Disable everything and TOCflow is a clean, fast, server-rendered TOC. Enable Reading Guide features one by one in the block sidebar.

See Reading Guide docs →

Settings reference

Two places to control TOCflow.

The block sidebar controls individual block instances. Settings → TOCflow in wp-admin sets site-wide defaults.

Block sidebar (per block)

ControlWhat it does
Title text, show/hide, HTML tagVisible label and document outline tag (P, H2–H4)
Heading levels H1–H6Which heading levels appear in this TOC
Numbered list / nested 1.1.1Bullets, sequential numbers, or nested counters
Style presetDefault · Minimal · Boxed · Underline · Card (Styles panel)
Hide markers, two columns, compact, underlineLayout adjustments
Max heightScroll within the TOC when list overflows
StickyKeeps the TOC fixed as the page scrolls
Collapsible / start collapsedReader-controlled toggle
Highlight active headingScroll-spy marks the section currently in view
Smooth scroll / offset overridePer-block override of the site-wide setting
Minimum headingsHide this block when the post has fewer headings
Hover section previewFloating tooltip on hover — no full Reading Guide needed
Full Reading GuideInline previews, density bars, read time, progress, reactions, citations
Section PlannerPer-heading writing status plus author teaser, revealed by reader tap
Reader note padsPrivate per-section notes in localStorage
Reading progress bar0–100% document progress from headings scrolled past
Resume bookmarkReturn-visit jump to the last-read heading
Citation formatAPA · MLA · Chicago · Harvard · Plain link

Settings → TOCflow (site-wide)

ControlWhat it does
Smooth scrollAnimate jumps to headings sitewide (respects prefers-reduced-motion)
Scroll offset (px)Space to leave under a sticky admin bar or theme header
Highlight active headingSite-wide default for the scroll-spy feature
Minimum headingsHide the TOC when a post has fewer matching headings
Auto-generate positionOff · Top of content · After first heading — sitewide
Post typesWhich post types get the auto-generated TOC
Auto TOC: title, style, layout, heading levelsDefaults for the auto-generated block
Schema markup (JSON-LD)ItemList structured data — off by default, safe with Yoast and Rank Math
Delete data on uninstallOpt-in cleanup — deactivating never deletes data

Full settings documentation →

Works with your stack

Compatibility is a core design principle.

TOCflow inherits the active theme's fonts and colors, outputs a standard <nav> landmark, never loads from third-party CDNs, and makes zero remote calls. It co-exists cleanly with every major plugin and theme in the WordPress ecosystem.

WordPress & PHP

WordPress6.4 through 7.1
Tested
PHP7.4, 8.0, 8.1, 8.2, 8.3
Tested
Block EditorGutenberg / Core Editor
Native
Classic Editorvia [tocflow] shortcode
Supported

SEO plugins

Yoast SEOSchema is opt-in and additive — no conflicts
Confirmed
Rank MathTOC schema off by default — enable only if Rank Math is not outputting one
Confirmed
All in One SEONo schema conflicts in default config
Compatible
Schema ProLeave TOCflow's JSON-LD off when Schema Pro is active
Compatible

Themes

Twenty Twenty-FourFull Site Editor, block themes
Tested
Twenty Twenty-FiveFull Site Editor
Tested
AstraClassic + FSE variants
Compatible
KadenceBlock-based
Compatible
GeneratePressClassic + block
Compatible
OceanWPClassic
Compatible
BlocksyBlock-based
Compatible
Any themeTOCflow inherits theme fonts & colors — no injected brand styles
By design

Page builders

Use [tocflow] in any Shortcode, HTML, or Code element. TOCflow automatically reads headings from each builder's stored data and injects matching anchor IDs into the rendered page — no manual slug mapping needed.

ElementorHeading widget JSON parsed directly; IDs injected into rendered HTML
Full support
DiviHTML scan of rendered output; use [tocflow] in Code module
Full support
Bricks BuilderHeading & rich-text elements parsed from Bricks meta
Full support
Beaver BuilderHTML module or Shortcode module with [tocflow]
Full support
WPBakeryRaw HTML element or Shortcode element; heading scan via rendered HTML
Full support
Oxygen / BreakdanceCode block or Shortcode element; meta-detected for ID injection
Full support
WooCommerceWorks in product descriptions with Heading blocks
Compatible
Any builderGeneric HTML heading scan as final fallback — [tocflow] works everywhere
By design

Multilingual

WPMLTranslatable strings, text domain tocflow
Compatible
PolylangNo locale-specific slug issues
Compatible
TranslatePressFront-end translated strings render correctly
Compatible

Found a conflict? Open a GitHub issue — confirmed compatibility is added to this page.

Get going in 3 steps

Quick start.

  1. Install and activate from tocflow.zip or Plugins → Add New (search tocflow).
  2. Edit a post with Heading blocks. Insert the Table of Contents block.
  3. Optionally open Settings → TOCflow in wp-admin for site-wide auto-insert, scroll offset, and defaults.

Skip a heading: Add CSS class no-toc or tocflow-skip to any Heading block (Advanced → Additional CSS class(es)).

Enable Reading Guide: Open the block sidebar → Reading Guide panel → toggle Hover section preview or Full Reading Guide.

Developers: git clone into wp-content/plugins/tocflow, then npm install && npm run build. Source in src/, output in build/.

Frequently asked

FAQ.

Does it work with the Classic Editor?

Yes — use the [tocflow] shortcode in classic post content, text widgets, or theme templates via do_shortcode('[tocflow]').

Will it conflict with my Yoast / Rank Math schema?

No. The JSON-LD ItemList markup is off by default. If you enable it, leave your SEO plugin's TOC schema off, or vice versa. Both cannot be on simultaneously without creating duplicate structured data.

Does it phone home or use external services?

Never. Zero external API calls in any mode. Reading Guide section data is extracted server-side from your block content. Emoji reactions are stored in the reader's browser localStorage. Citations are built from WordPress post meta. No data leaves your server or the reader's device.

Does it work with multilingual plugins (WPML, Polylang)?

Yes. TOCflow is fully translation-ready with a standard tocflow text domain. All user-facing strings are translatable. There are no locale-specific slug issues.

How do hover section previews work?

PHP extracts the opening ~20 words of each section from your parsed block content at render time. The text is embedded in the HTML. JavaScript positions a floating tooltip next to the hovered link — no network request.

How do academic citations work?

The § citation button uses only data WordPress already has: your author display name, post title, site name, published date, and permalink. JavaScript formats it into the chosen style (APA, MLA, Chicago, Harvard, or plain link) and copies it to the clipboard. No external API, no account.

Can I use it in a Full Site Editor template?

Yes. Insert the block in a template using the Template Editor. Auto-insert mode works across any registered public post type.

Where do I put the block?

Typically right after the introduction paragraph, before the first heading. Some writers prefer just before the conclusion. Auto-insert mode handles positioning automatically sitewide.

Is the GitHub repo supposed to be called something else?

No. Keep it tocflow — that is the WordPress plugin slug, folder name, and text domain. Naming notes.