Automatic Table Of Contents

approved

by Johan Satgé

Create a table of contents in a note that updates itself when the note changes.

256 stars127,821 downloadsUpdated 1mo agoMIT
View on GitHub

Obsidian Automatic Table Of Contents

Downloads Version Test status codecov

An Obsidian plugin to create a table of contents in a note, that updates itself when the note changes


demo

Installation

From Obsidian (easiest)

Install the plugin from the Community plugins section in the app settings.

From git

Clone the plugin in your .obsidian/plugins directory:

cd /path/to/your/vault/.obsidian/plugins
git clone git@github.com:johansatge/obsidian-automatic-table-of-contents.git

From source

Download the latest release and unzip it in the .obsidian/plugins/automatic-table-of-contents directory.

Usage and options

Insert a codeblock with the table-of-contents (or its short version toc) syntax.

```table-of-contents
option1: value1
option2: value2
```

Alternatively, two commands are available in the command palette:

  • Insert table of contents
  • Insert table of contents (with available options)

Available options

Most options can have a default value configured in the plugin settings (Settings → Community plugins → Automatic Table of Contents). These defaults will be used for all tables of contents in your vault, unless overridden in individual codeblocks.

The following options are available:

OptionDefault valueDescription
titleNoneTitle to display before the table of contents (supports Markdown)
stylenestedListTable of contents style (can be nestedList, nestedOrderedList or inlineFirstLevel)
minLevel0Include headings from the specified level (0 for no limit)
maxLevel0Include headings up to the specified level (0 for no limit)
includeAllInclude headings with a regexp (example: /Some heading/i)
excludeNoneExclude headings with a regexp (example: /Some heading/i)
includeLinkstrueMake headings clickable
hideWhenEmptyfalseHide TOC if no headings are found
debugInConsolefalsePrint debug info in Obsidian console

Limitations and known bugs

  • The table of contents may not be generated correctly if the document doesn't implement a correct titles hierarchy (level 1 title then level 3 without a level 2 in between, for instance)
  • HTML & markdown that may be in the document headings are stripped when includeLinks: true (see #24 & #27)
  • LaTeX equations are not rendered correctly when includeLinks: true (see #13)
  • Links might not behave correctly if the same title is present several times on the page (see #57)
  • Generated table of contents is not foldable (see #23)
  • The table of contents is based on a codeblock so it can be updated; it doesn't generate real Markdown in the document (see #10) so it won't be visible when exporting, or on Obsidian Publish (see #31) and links might not work in PDFs (see #12)

Publish a new version

  • Build the plugin with npm run build (--watch during dev)
  • Push a commit with the new version number as message with:
    • The relevant changelog in README.md
    • The new version number in manifest.json
    • The updated main.js (with npm run build)
  • Tag the commit with the version number
  • Publish a new GitHub release with:
    • The version number as title
    • The changelog from README.md as description
    • main.js and manifest.json from as attachments
    • Set as the latest release checked

Changelog

This project uses semver.

VersionDateNotes
1.8.02026-02-07Introduce global settings (@stevedoyle) (fix #38, #83)
1.7.32025-05-25Fix default include & exclude values (fix #73)
1.7.22025-05-03Fix italic stripping (fix #43)
1.7.12025-05-02Fix # in wikilinks (fix #64)
1.7.02025-04-27Add include & exclude options (fix #46)
1.6.12025-02-23Inline title when style:inlineFirstLevel (fix #59)
1.6.02025-02-23Ignore empty headings (fix #60)
1.5.12025-01-18Rename command for readability (fix #53)
1.5.02024-11-24Add hideWhenEmpty option (fix #51)
1.4.02024-05-19Add nestedOrderedList style (@bjtho08) (fix #41)
1.3.32024-05-16Compute the right min level when style:inlineFirstLevel (fix #39)
1.3.22024-02-18Harden headings stripping
1.3.12024-02-18Strip headings for readability (fix #24, #27)
1.3.02024-02-17Introduce title option (fix #5, #32)
1.2.02024-01-19Introduce toc shorthand trigger (fix #19)
1.1.02024-01-03Introduce minLevel option (@ras0q) (fix #11)
1.0.62023-11-02Escape special characters (fix #3)
1.0.52023-11-01Fix plugin activation on mobile (fix #17)
1.0.42023-10-31Support pages with no first level headings (fix #6)
1.0.32023-09-30Fix readme
1.0.22023-09-25Fix output sometimes displaying undefined headings
1.0.12023-09-09Fix reference to global App instance
1.0.02023-08-27Initial version

License

This project is released under the MIT License.

Contributing

Bug reports and feature requests are welcome! More details in the contribution guidelines.

For plugin developers

Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.