How to clickable table of contents for long documents
- Step 1Paste the long draft — Drop your long-form .md file or paste the text. Works on the raw Markdown, headings and all.
- Step 2Decide the granularity — For a flat list of major sections set minDepth=2, maxDepth=2; add maxDepth=3 to include one level of sub-points.
- Step 3Pick placement — position=after-h1 keeps your title up top with the TOC beneath; position=top puts navigation first.
- Step 4Generate the clickable TOC — Run it; each heading becomes a clickable bullet linking to its anchor.
- Step 5Test the jump links — On your target platform, click a couple of entries to confirm the renderer honors the anchors.
- Step 6Publish or export — Save the Markdown and publish, or feed it into an exporter. Re-run if you restructure the piece.
Granularity presets for long-form prose
Set min/maxDepth to control how busy the TOC is. There is no preset menu — these are just option values.
| Goal | minDepth | maxDepth | Result |
|---|---|---|---|
| Flat list of major sections | 2 | 2 | Only H2s, no nesting — cleanest for narrative pieces. |
| Sections + one sub-level | 2 | 3 | H2s with their H3s indented beneath. |
| Full outline including title | 1 | 6 | Everything from the H1 down — best for reference, not essays. |
| Chapters only (book-style) | 1 | 1 | Just the H1 chapter titles. |
Where anchor links actually work
Markdown anchor links depend on the renderer generating matching heading IDs.
| Platform | Markdown anchors honored? | Note |
|---|---|---|
| GitHub / GitLab | Yes | Heading IDs match the same slug rules; jump links work. |
| Static-site generators (Docusaurus, MkDocs, Hugo) | Usually | Most generate heading IDs; confirm the slug algorithm matches. |
| Medium / Substack | Often no | These create their own anchors and may ignore Markdown anchor links — test first. |
| Plain Markdown preview in editors | Varies | Depends on the editor's renderer; VS Code preview honors them. |
Capacity for long manuscripts
charLimit is a character cap separate from file size; long prose hits the character cap first.
| Tier | Character limit | Approx. words | File size |
|---|---|---|---|
| Free | 500,000 | ~80,000 words | 1 MB |
| Pro | 5,000,000 | ~800,000 words | 10 MB |
| Pro-media | 20,000,000 | ~3.2M words | 50 MB |
| Developer | Unlimited | Unlimited | 500 MB |
Cookbook
Recipes aimed at essayists, guide-writers, and whitepaper authors. Output is plain Markdown you can paste into your CMS or static-site source.
Flat TOC of major sections (minDepth=2, maxDepth=2)
The cleanest look for a narrative long-form piece: just the H2 sections, no nesting.
INPUT # The Long Essay ## The Problem ### A tangent ## The Argument ## The Conclusion OUTPUT (TOC) ## Table of Contents - [The Problem](#the-problem) - [The Argument](#the-argument) - [The Conclusion](#the-conclusion) # the H3 'A tangent' is excluded by maxDepth=2
Sections plus one sub-level (maxDepth=3)
When sub-points deserve their own jump links, include H3 but stop there.
INPUT # Guide ## Setup ### Mac ### Windows ## Usage OUTPUT (TOC) - [Setup](#setup) - [Mac](#mac) - [Windows](#windows) - [Usage](#usage)
TOC above the title for a CMS
Some CMS templates render the H1 separately; put the TOC first with position=top.
INPUT # Whitepaper ## Abstract ## Method OUTPUT ## Table of Contents - [Whitepaper](#whitepaper) - [Abstract](#abstract) - [Method](#method) # Whitepaper ## Abstract ## Method
Frontmatter from a blog post is preserved
Your post's YAML metadata stays intact; the TOC slots in below it.
INPUT --- title: My Post date: 2026-06-10 --- # My Post ## Intro ## Body OUTPUT --- title: My Post date: 2026-06-10 --- # My Post ## Table of Contents - [My Post](#my-post) - [Intro](#intro) - [Body](#body) ## Intro ## Body
Quoted or punctuated section titles
Smart quotes and punctuation are stripped from the anchor — verify long titles slug as you expect.
INPUT ## "On Beauty" — A Note OUTPUT (TOC) - ["On Beauty" — A Note](#on-beauty-a-note) # quotes and the em dash are stripped, and the hyphen run collapses; the link text keeps the original
Edge cases and what actually happens
Publishing on Medium or Substack
May not jumpThese platforms generate their own heading anchors and frequently ignore Markdown anchor links. The TOC renders as a list, but clicks may not scroll. Test on the platform before relying on it.
Essay with dozens of H3 asides
By designAt default depth every H3 becomes a TOC line, producing clutter. Set maxDepth=2 for a flat, readable TOC of major sections only.
Long title with punctuation and an em dash
StrippedCharacters outside letters, digits, underscore, space, and hyphen are removed from the anchor and runs of hyphens collapse, so a title like "On Beauty" — A Note slugs to on-beauty-a-note. The link text keeps the original.
Document over 500,000 characters on free
RejectedLong manuscripts can exceed the free character cap (separate from file size). Trim or upgrade to Pro (5,000,000 characters).
Smart-quote or em-dash heavy prose
CleanedTypographic punctuation is stripped from anchors but kept in the visible link text, so the TOC reads naturally while the anchor stays URL-safe.
A code sample with a `# heading-like` line
SkippedLines inside fenced ``` blocks are not scanned, so example snippets in a tutorial never appear as bogus TOC sections.
Two chapters titled the same
Duplicate anchorBoth link to the first; the tool adds no -1/-2 suffix. Rename one chapter for distinct jump links.
Re-running on a doc that already has a TOC
DuplicatedA second TOC is inserted without removing the first. Delete the prior block before regenerating.
No H1 in the draft, position=after-h1
Falls backWith no H1, the TOC is placed at the top of the body, identical to position=top.
Heading written in Setext underline style
Not detectedOnly #-style headings are parsed. Convert underline-style headings to ATX form first or they will be missing from the TOC.
Frequently asked questions
Will the jump links work where I publish?
On GitHub, GitLab, and most static-site generators, yes. Medium and Substack often generate their own anchors and may ignore Markdown anchor links — test on your platform first.
My TOC is too cluttered — how do I trim it?
Narrow the depth range. For a flat list of major sections set minDepth=2 and maxDepth=2; add maxDepth=3 only if sub-points need their own links.
How big a document can it handle?
Free tier: 500,000 characters (roughly 80,000 words) and 1 MB. Pro raises the character cap to 5,000,000. Long prose usually hits the character cap before the size cap.
Where does the TOC appear?
Below the first H1 by default. Use position=top to place it above the title for templates that render the H1 separately.
Are punctuation and quotes handled in anchors?
They are stripped from the anchor (kept in the visible text). So "On Beauty" links to #on-beauty, which keeps the URL clean.
Can I exclude my title from the TOC?
Yes — set minDepth=2 so the H1 is excluded and the list begins at your H2 sections.
Does it keep my blog frontmatter?
Yes. YAML and TOML frontmatter are detected and preserved; the TOC is inserted below them.
What about code samples in a tutorial?
Lines inside fenced `` blocks are skipped, so a # heading` in a snippet never becomes a TOC entry.
Can I make the TOC collapsible?
Not directly — the output is a plain Markdown list. You can wrap it in a <details> block manually after generating if your platform supports HTML.
Is my draft uploaded anywhere?
No. Processing is entirely in-browser; your manuscript never leaves your device.
Two sections share a title — why one link?
Identical text yields one slug and the tool does not add -1/-2. Rename one section for a unique anchor.
Privacy first
All Markdown processing runs locally in your browser using JavaScript. No file is ever uploaded to JAD Apps servers — only metadata counters are saved for signed-in dashboard stats.