JupyterLab PKM Extension
we developed this for our own internal use, and we used Claude to scaffold some parts. We're not likely to develop it any further with any more features, so if there's something you want, fork and develop as you will.
Transform your JupyterLab into a Personal Knowledge Management (PKM) system with wikilinks, backlinks, search, and notebook cell embedding capabilities.
🌟 Overview
This extension bridges the gap between computational notebooks and knowledge management, combining:
- Jupyter's computational power for data analysis and code development
- Markdown's simplicity for note-taking and documentation
- PKM features for connecting and organizing knowledge
Perfect for researchers, students, and educators who want to build connected knowledge graphs while maintaining full computational capabilities in JupyterLab Desktop.
✨ Key Features
🔗 Wikilinks & Navigation
- Link syntax:
[[Note Name]]or[[file|Display Text]] - Multi-format support: Link to
.md,.ipynb,.csv,.json,.geojsonfiles - Auto-completion: Type
[[for smart file suggestions - Click navigation: Ctrl/Cmd+click to follow links
- Broken link creation: Click red links to create new files
📊 Notebook Cell Embedding
Embed specific cells from Jupyter notebooks:
![[analysis.ipynb#cell:5]] <!-- Full cell (code + output) -->
![[analysis.ipynb#cell:5:code]] <!-- Code only -->
![[analysis.ipynb#cell:5:output]] <!-- Output only -->
Cell Overview Tool: Use PKM: Show Notebook Cell Overview to see all cells with their IDs, types, and previews.
📄 Block Embedding
Reference and embed content from other markdown files:
![[research-notes#methodology]] <!-- Embed by heading -->
![[findings#key-insight]] <!-- Embed by block ID -->
![[summary#results|Key Results]] <!-- With custom title -->
🔍 Search & Discovery
- Global search (
Alt+F): Search across all markdown files and notebooks - Backlinks panel (
Alt+B): See which files link to the current file - Real-time results: Live search with context previews
📝 Editing
- Mode toggle (
Alt+M): Switch between edit and preview modes - Auto-preview startup: Files open in preview mode by default
- Floating toggle button: Visual mode indicator
📦 Installation
Using pip (Recommended)
pip install jupyterlab-pkm
Using conda
conda install -c conda-forge jupyterlab-pkm
Prerequisites
- JupyterLab 4.0+
- Python 3.8+
Install from Source
-
Clone the repository:
git clone https://github.com/XLabCU/jupyterlab-desktop-pkm.git cd jupyterlab-pkm
-
Install frontend dependencies and build:
jlpm install jlpm build
-
Install the Python package:
pip install -e .
-
Restart JupyterLab Desktop
Development Installation
For development work:
# Clone and install in development mode
git clone https://github.com/XLabCU/jupyterlab-desktop-pkm.git
cd jupyterlab-pkm
# Install dependencies and build
jlpm install
jlpm build
# Install Python package in development mode
pip install -e .
# Install extension in development mode
jupyter labextension develop . --overwrite
# Start JupyterLab Desktop in watch mode
jlpm watch
📁 Content Organization
Structure your workspace for optimal PKM experience:
workspace/
├── start.md # Landing page (auto-opens)
├── projects/
│ ├── project-alpha.md
│ ├── analysis.ipynb
│ └── data.csv
├── notes/
│ ├── daily-notes/
│ ├── research/
│ └── ideas/
└── resources/
├── methodologies.md
└── references.md
🎯 Use Cases
📚 Academic Research
- Link literature reviews to data analysis notebooks
- Embed key findings across multiple papers
- Track research progression with connected notes
👩🏫 Teaching & Learning
- Create interconnected lesson materials
- Embed live code examples in documentation
- Build concept maps with executable content
💼 Project Documentation
- Connect project plans to implementation notebooks
- Embed analysis results in reports
- Maintain living documentation with computational backing
🧠 Personal Knowledge Management
- Build a second brain with computational capabilities
- Connect ideas across disciplines
- Maintain reproducible research notes
⌨️ Keyboard Shortcuts
| Shortcut | Action |
|---|---|
Alt+M |
Toggle edit/preview mode |
Alt+F |
Open global search |
Alt+B |
Toggle backlinks panel |
Ctrl/Cmd+Click |
Follow wikilink |
🛠️ Configuration
Startup Behavior
The extension automatically opens start.md in preview mode. Create this file in your workspace root to customize the landing experience.
Auto-save
Files are automatically saved according to JupyterLab's auto-save settings.
Search Indexing
Search indexes all .md and .ipynb files in your workspace directory and subdirectories.
📖 Usage Examples
Basic Note Linking
# Research Project Alpha
## Overview
This project builds on [[previous-research]] and explores [[new-methodology]].
## Data Analysis
See the full analysis in [[analysis.ipynb]] and key findings in [[results-summary]].
## Next Steps
- Review [[literature-review#recent-papers]]
- Update [[methodology#data-collection]]
- Prepare [[presentation-draft]]
Embedding Computational Results
# Monthly Report
## Key Metrics
![[metrics-analysis.ipynb#cell:3:output]]
## Methodology
![[analysis-methods#statistical-approach]]
## Code Implementation
![[implementation.ipynb#cell:5:code]]
Use the command palette command PKM: Show Notebook Cell Overview when viewing a notebook to see cell IDs for embedding.
🔧 Development
Building
jlpm build
Testing
jlpm test
Linting
jlpm lint
Watching for changes
jlpm watch
📄 License
This project is licensed under the BSD 3-Clause License - see the LICENSE file for details.
🙏 Acknowledgments
- Built on JupyterLab
- Inspired by Obsidian, Logseq, and Roam Research
- Adapted from the original JupyterLite PKM extension
- Designed for digital humanities education and computational research workflows
📚 Related Projects
- JupyterLite PKM Extension - The original browser-based version
- Obsidian - Dedicated PKM application
- Logseq - Local-first knowledge base
- Tangent Notes - Note-taking with wikilinks
Future?
Jun 3, 2025: Everything we need, we think.
Metadata
Release files for jupyterlab-pkm 0.1.12
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| jupyterlab_pkm-0.1.12.tar.gz | 58.8 MB | Without provenance | Details for jupyterlab_pkm-0.1.12.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| jupyterlab_pkm-0.1.12-py3-none-any.whl | Python 3 | none | any | Details for jupyterlab_pkm-0.1.12-py3-none-any.whl |
Total release size: 58.9 MB
Release files / jupyterlab_pkm-0.1.12.tar.gz
| Download URL | jupyterlab_pkm-0.1.12.tar.gz |
|---|---|
| Size | 58.8 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
3120b3b1e84d4a989d7847a2bd33abeed68572c02de77da402f2a0094af48df6
|
|
BLAKE2b-256 checksum How to use checksums |
25920c7fd58cf6d35901dfdf0ffe3e1f6a6c013b718ca6a8fd361db51f5e352d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.2
|
Release files / jupyterlab_pkm-0.1.12-py3-none-any.whl
| Download URL | jupyterlab_pkm-0.1.12-py3-none-any.whl |
|---|---|
| Size | 125.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
9b4b235f74b5d4d4be1531016598112cd60e4612a7bafd99c3ba65ed5d3c0411
|
|
BLAKE2b-256 checksum How to use checksums |
c0f8b72c84c80a233faaf7e4af7969dc6313a278a6282308d938dce1ec63fe11
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.2
|
Security for jupyterlab-pkm 0.1.12
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.