jupyterlab_markdown_insert_content_extension
[!TIP] This extension is part of the stellars_jupyterlab_extensions metapackage. Install all Stellars extensions at once:
pip install stellars_jupyterlab_extensions
JupyterLab extension for inserting reusable content blocks into markdown files and notebook cells, starting with automatic table of contents generation.
Right-click in markdown editor or notebook cell to access the context menu:
Generated table of contents with hierarchical structure and working anchor links:
Configure TOC caption and maximum heading level through JupyterLab settings:
Features
- Context menu integration - right-click in markdown editors or notebook cells to access all tools via "Markdown Tools" submenu
- Table of contents generation - automatically extracts headings and creates hierarchical TOC with working anchor links
- TOC update support - regenerates existing TOC in place using markers (
<!-- TOC:BEGIN -->and<!-- TOC:END -->) - Per-TOC depth configuration - each TOC stores its depth in the marker (
<!-- TOC:BEGIN DEPTH=3 -->) and preserves it across updates - Heading exclusion - mark headings with
<!-- TOC:IGNORE -->to exclude from TOC while preserving numbering - Hierarchical heading numbering - add, remove, or update numbering on headings (1., 1.1., 1.1.2., etc.)
- GitHub alert boxes - insert
> [!NOTE],> [!TIP],> [!IMPORTANT],> [!WARNING]or> [!CAUTION]blockquotes, wrapping the current selection when there is one - Emoji picker - searchable emoji dialog that tracks frequently used emoji, with the dataset bundled so it works offline
- Configurable settings - customize TOC caption, maximum heading depth, numbering depth, and trailing dot style
- Code block filtering - excludes headings within fenced code blocks from TOC and numbering
- JupyterLab-compatible anchors - generates anchor IDs matching JupyterLab's format for reliable navigation
- Dual mode support - works in both markdown file editors and notebook markdown cells
- Cursor-aware insertion - inserts content at current cursor position
- Automatic TOC updates - TOC is updated automatically when heading numbering changes
Requirements
- JupyterLab >= 4.0.0
Install
pip install jupyterlab_markdown_insert_content_extension
Usage
Table of Contents
- Open a markdown file or create a markdown cell in a notebook
- Position cursor where you want the TOC inserted
- Right-click and select Markdown Tools > Insert Table of Contents
- TOC is generated with markers for future updates
To update an existing TOC:
- Right-click and select Markdown Tools > Update Table of Contents
- The TOC between markers will be regenerated
Heading Numbering
Add hierarchical numbering to your headings:
- Right-click and select Markdown Tools > Add Heading Numbering
- Headings become numbered:
# Introduction-># 1. Introduction
Other numbering commands:
- Remove Heading Numbering - strips all numbering from headings
- Update Heading Numbering - recalculates numbering and updates TOC
Alert Boxes
Insert a GitHub-style alert blockquote:
- Optionally select the text that should become the alert body
- Right-click and select Markdown Tools > Insert Alert > Note (or Tip, Important, Warning, Caution)
With no selection, a placeholder body is inserted:
> [!WARNING]
> Urgent info that needs immediate user attention to avoid problems.
Emoji
- Position the cursor where the emoji should go
- Right-click and select Markdown Tools > Insert Emoji
- Search or browse, then click an emoji to insert it and close the dialog
Frequently used emoji are remembered between sessions and shown in a bar below the grid.
Configure Settings
Access settings through Settings -> Settings Editor -> Markdown Insert Content:
- TOC Caption - markdown content inserted before TOC list (default:
**Table of Contents**) - Maximum TOC Heading Level - deepest heading level to include in TOC (1-6, default: 3)
- Maximum Numbering Level - deepest heading level to number (1-6, default: 3)
- Trailing Dot in Numbering - add trailing dot after numbers (default: enabled, e.g.,
1.2.vs1.2)
Settings apply immediately without restart.
Uninstall
pip uninstall jupyterlab_markdown_insert_content_extension
Development
Development install
# Clone repository
git clone https://github.com/stellarshenson/jupyterlab_markdown_insert_content_extension.git
cd jupyterlab_markdown_insert_content_extension
# Set up virtual environment
python -m venv .venv
source .venv/bin/activate
pip install --editable "."
# Link extension with JupyterLab
jupyter labextension develop . --overwrite
# Build extension
jlpm install
jlpm build
Development workflow
# Watch mode - automatically rebuilds on changes
jlpm watch
# In another terminal, run JupyterLab
jupyter lab
Refresh JupyterLab after changes to load updated extension.
Development uninstall
pip uninstall jupyterlab_markdown_insert_content_extension
jupyter labextension list # Find labextensions folder
# Remove symlink from labextensions folder
Testing
Frontend tests:
jlpm test
Integration tests: See ui-tests/README.md for Playwright integration tests.
Packaging
See RELEASE.md for release process.
Release files for jupyterlab-markdown-insert-content-extension 1.1.28
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| jupyterlab_markdown_insert_content_extension-1.1.28.tar.gz | 989.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| jupyterlab_markdown_insert_content_extension-1.1.28-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 1.2 MB
Release files / jupyterlab_markdown_insert_content_extension-1.1.28.tar.gz
| Download URL | jupyterlab_markdown_insert_content_extension-1.1.28.tar.gz |
|---|---|
| Size | 989.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d04c5312ef74aa44146fe4e1003c876c6c90ac4d2fd4a74d0b28a780ba316fb0
|
|
BLAKE2b-256 checksum How to use checksums |
0319be02cf0ba170de8189536c4ed1ae96b04458a90f3580288d35af10b94afe
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.15
|
Release files / jupyterlab_markdown_insert_content_extension-1.1.28-py3-none-any.whl
| Download URL | jupyterlab_markdown_insert_content_extension-1.1.28-py3-none-any.whl |
|---|---|
| Size | 229.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
2180a57ef019c2aa8a5ecc4111d2f10a11517ac9a3c3927a91763e5d358a52e6
|
|
BLAKE2b-256 checksum How to use checksums |
acfe93fd8f7bb2ce422e799673c2acd18c032876591427bf93ec1fbfe6d1d9d5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.15
|