• Stars
    star
    129
  • Rank 279,262 (Top 6 %)
  • Language
    TypeScript
  • License
    BSD 3-Clause "New...
  • Created over 3 years ago
  • Updated 7 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Use MyST Markdown directly in Jupyter Lab

JupyterLab MyST Extension

Made with MyST GitHub Actions Status Launch on Binder PyPI

Render markdown cells using MyST Markdown, including support for rich frontmatter, interactive references, admonitions, figure numbering, tabs, proofs, exercises, glossaries, cards, and grids!

Note: If you are looking for the version of this repository based on jupyterlab-markup, see the v0 branch.

Info This extension is composed of a Python package named jupyterlab_myst for the server extension and a NPM package named jupyterlab-myst for the frontend extension.

Requirements

  • JupyterLab >= 4.0.0

Install

To install the extension, execute:

pip install jupyterlab_myst

Features

jupyterlab-myst is a fully featured markdown renderer for technical documents, get started with MyST Markdown. It supports the MyST {eval} inline role, which facilitates the interweaving of code outputs and prose. For example, we can use inline expressions to explore the properties of a NumPy array.

In the code cell:

import numpy as np
array = np.arange(4)

In the markdown cell:

Let's consider the following array: {eval}`array`.

We can compute the total: {eval}`array.sum()` and the maximum value is {eval}`array.max()`.

This will evaluate inline, and show:

Let's consider the following array: array([0, 1, 2, 3]).

We can compute the total: 6 and the maximum value is 3.

You can also use this with ipywidgets, and have inline interactive text:

Or with matplotlib to show inline spark-lines:

You can also edit task lists directly in the rendered markdown.

Usage

MyST is a flavour of Markdown, which combines the fluid experience of writing Markdown with the programmable extensibility of reStructuredText. This extension for JupyterLab makes it easier to develop rich, computational narratives, technical documentation, and open scientific communication.

Execution πŸš€

To facilitate inline expressions, jupyterlab-myst defines a jupyterlab-myst:executor plugin. This plugin sends expression code fragments to the active kernel when the user "executes" a Markdown cell. To disable this functionality, disable the jupyterlab-myst:executor plugin with:

jupyter labextension disable jupyterlab-myst:executor

Trust πŸ”Ž

Jupyter Notebooks implement a trust-based security model. With the addition of inline expressions, Markdown cells are now considered when determining whether a given notebook is "trusted". Any Markdown cell with inline-expression metadata (with display data) is considered "untrusted". Like outputs, expression results are rendered using safe renderers if the cell is not considered trusted. Executing the notebook will cause each cell to be considered trusted.

To facilitate this extension of the trust model, the jupyterlab_myst server extension replaces the NotebookNotary from nbformat with MySTNotebookNotary. This can be disabled with

jupyter server extension disable jupyterlab-myst

By disabling this extension, it will not be possible to render unsafe expression results from inline expressions; the MySTNotebookNotary adds additional code that makes it possible to mark Markdown cells as trusted.

Uninstall

To remove the extension, execute:

pip uninstall jupyterlab_myst

Troubleshoot

If you are seeing the frontend extension, but it is not working, check that the server extension is enabled:

jupyter server extension list

If the server extension is installed and enabled, but you are not seeing the frontend extension, check the frontend extension is installed:

jupyter labextension list

Contributing

Development install

Note: You will need NodeJS to build the extension package.

The jlpm command is JupyterLab's pinned version of yarn that is installed with JupyterLab. You may use yarn or npm in lieu of jlpm below.

# Clone the repo to your local environment
# Change directory to the jupyterlab_myst directory
# Install package in development mode
pip install -e ".[test]"
# Link your development version of the extension with JupyterLab
jupyter labextension develop . --overwrite
# Server extension must be manually installed in develop mode
jupyter server extension enable jupyterlab_myst
# Rebuild extension Typescript source after making changes
jlpm build

You can watch the source directory and run JupyterLab at the same time in different terminals to watch for changes in the extension's source and automatically rebuild the extension.

# Watch the source directory in one terminal, automatically rebuilding when needed
jlpm watch
# Run JupyterLab in another terminal
jupyter lab

With the watch command running, every saved change will immediately be built locally and available in your running JupyterLab. Refresh JupyterLab to load the change in your browser (you may need to wait several seconds for the extension to be rebuilt).

By default, the jlpm build command generates the source maps for this extension to make it easier to debug using the browser dev tools. To also generate source maps for the JupyterLab core extensions, you can run the following command:

jupyter lab build --minimize=False

Development uninstall

# Server extension must be manually disabled in develop mode
jupyter server extension disable jupyterlab_myst
pip uninstall jupyterlab_myst

In development mode, you will also need to remove the symlink created by jupyter labextension develop command. To find its location, you can run jupyter labextension list to figure out where the labextensions folder is located. Then you can remove the symlink named jupyterlab-myst within that folder.

Testing the extension

Server tests

This extension is using Pytest for Python code testing.

Install test dependencies (needed only once):

pip install -e ".[test]"
# Each time you install the Python package, you need to restore the front-end extension link
jupyter labextension develop . --overwrite

To execute them, run:

pytest -vv -r ap --cov jupyterlab_myst

Frontend tests

This extension is using Jest for JavaScript code testing.

To execute them, execute:

jlpm
jlpm test

Integration tests

This extension uses Playwright for the integration tests (aka user level tests). More precisely, the JupyterLab helper Galata is used to handle testing the extension in JupyterLab.

More information are provided within the ui-tests README.

Packaging the extension

See RELEASE

More Repositories

1

jupyter-book

Create beautiful, publication-quality books and documents from computational content.
Python
3,698
star
2

MyST-Parser

An extended commonmark compliant parser, with bridges to docutils/sphinx
Python
690
star
3

markdown-it-py

Markdown parser, done right. 100% CommonMark support, extensions, syntax plugins & high speed. Now in Python!
Python
626
star
4

sphinx-autobuild

Watch a Sphinx directory and rebuild the documentation when a change is detected. Also includes a livereload enabled web server.
Python
480
star
5

sphinx-book-theme

A clean book theme for scientific explanations and documentation with Sphinx
Jupyter Notebook
438
star
6

mdformat

CommonMark compliant Markdown formatter
Python
401
star
7

thebe

Turn static HTML pages into live documents with Jupyter kernels.
Jupyter Notebook
378
star
8

sphinx-tabs

Tabbed views for Sphinx
HTML
265
star
9

sphinx-copybutton

Add a "copy" button to code blocks in Sphinx
JavaScript
231
star
10

MyST-NB

Parse and execute ipynb files in Sphinx
Jupyter Notebook
207
star
11

sphinx-design

A sphinx extension for designing beautiful, screen-size responsive web components.
Python
180
star
12

mystmd

Command line tools for working with MyST Markdown.
TypeScript
161
star
13

cookiecutter-jupyter-book

Cookiecutter template for a simple jupyter book
TeX
138
star
14

meta

A community dedicated to supporting tools for technical and scientific communication and interactive computing
129
star
15

sphinx-panels

A sphinx extension for creating panels in a grid layout
Python
85
star
16

rst-to-myst

Convert ReStructuredText to MyST Markdown
Python
58
star
17

github-activity

Simple markdown changelogs for GitHub repositories
Python
48
star
18

jupyter-cache

A defined interface for working with a cache of executed jupyter notebooks
Jupyter Notebook
44
star
19

sphinx-togglebutton

Show and hide content with a button in Sphinx
JavaScript
42
star
20

myst-vs-code

A syntax highlighter for the MyST Markdown format
TypeScript
35
star
21

quantecon-mini-example

A short example showing how to write a lecture series using Jupyter Book 2.0.
Python
34
star
22

sphinx-external-toc

A sphinx extension that allows the site-map to be defined in a single YAML file
Python
31
star
23

sphinx-proof

A Sphinx extension for producing proof, theorem, lemma, definition, remark, conjecture, corollary and algorithm directives.
Python
30
star
24

sphinx-jupyterbook-latex

Supporting LaTeX infrastructure for Jupyter Book
Python
28
star
25

sphinx-thebe

A Sphinx extension to convert static code into interactive code cells with Jupyter, Thebe, and Binder.
Python
28
star
26

mdit-py-plugins

Collection of core plugins for markdown-it-py
Python
28
star
27

sphinx-comments

hypothes.is interaction layer with Sphinx
Python
21
star
28

sphinx-exercise

A Sphinx extension for producing exercise and solution directives.
HTML
18
star
29

sphinx-multitoc-numbering

A Sphinx extension to support continuous numbering of sections across multiple tocs in HTML output.
Python
14
star
30

sphinx-remove-toctrees

Speed up Sphinx builds by selectively removing toctrees from some pages
Python
14
star
31

github-action-demo

A demonstration repository to build and host a book with GitHub Actions
TeX
14
star
32

quantecon-example

A demonstration of Jupyter Book functionality using QuantEcon Python programming source material.
Python
14
star
33

myst-spec

MyST is designed to create publication-quality, computational documents written entirely in Markdown.
TypeScript
13
star
34

markdown-it-docutils

A markdown-it plugin for implementing docutils style roles/directives.
TypeScript
12
star
35

mdformat-tables

An mdformat plugin for rendering tables
Python
11
star
36

mdurl

URL utilities for markdown-it (a Python port)
Python
11
star
37

jupyterlab-mystjs

Jupyterlab extension using the MySTjs parser
TypeScript
8
star
38

myst-enhancement-proposals

MyST Enhancement Proposals (MEPs)
8
star
39

myst-theme

Packages for creating MyST websites themes using React and Remix
TypeScript
8
star
40

mdformat-myst

Mdformat plugin for MyST compatibility
Python
7
star
41

cli

πŸ›‘πŸ›‘DEPRECATED, see https://github.com/ExecutableBookProject/jupyter-bookπŸ›‘πŸ›‘
Python
7
star
42

web-compile

A CLI to compile/minify SCSS & JS, and associated pre-commit hook.
Python
7
star
43

unified-myst

A repository of packages for working with MyST in the https://unifiedjs.com/ ecosystem
JavaScript
6
star
44

markdown-it-plugin-template

A template for creating a markdown-it plugin.
JavaScript
6
star
45

sphinx-ext-mystmd

Integrate existing Sphinx projects with MyST-MD
Python
5
star
46

sphinx-examples

A Sphinx extension to create examples of source markdown and the result of rendering it.
Python
5
star
47

sphinx-ext-autodoc

Auto-documentation for sphinx extension components
Python
5
star
48

sphinx-tomyst

A sphinx translator for producing myst syntax files
Python
4
star
49

mistletoe-ebp

The EPB fork of mistletoe: A fast, extensible and spec-compliant Markdown parser in pure Python.
Python
4
star
50

jupyterlab-myst-quickstart

Quickstart examples for working with MyST in Jupyter
Jupyter Notebook
4
star
51

mdformat-plugin

A template for creating an mdformat parser extension plugin
Python
4
star
52

rst2myst

Tools for converting RST files to MyST-NB files
Python
4
star
53

myst-react

A web-based UI for rendering MyST Markdown
TypeScript
4
star
54

.github

Community health files: Contributing guidelines, Code of Conduct, ...
4
star
55

markdown-it-dollarmath

A markdown-it plugin for $-delimited math
TypeScript
4
star
56

myst

Myst - Markedly Structured Text
3
star
57

python-pkg-cookiecutter

A cookiecutter for python packages, with docs and GitHub Actions CI
Python
3
star
58

mdformat-footnote

Footnote format addition for mdformat
Python
3
star
59

markdown-it-amsmath

A markdown-it plugin for amsmath LaTeX environments.
TypeScript
3
star
60

markdown-it-myst-extras

Additional plugins required for the MyST specification
TypeScript
2
star
61

myst-standard

A meta-repository to discuss and plan for the MyST standard
2
star
62

mystmd-quickstart

Repository to be used in the mystjs quickstart guide
Jupyter Notebook
2
star
63

myst-book-theme

A lightweight MyST theme designed to mimic the look-and-feel of an interactive book.
TypeScript
2
star
64

sphinx-jupyter-book-theme

An experimental Sphinx theme for Jupyter Book
HTML
2
star
65

myst-article-theme

A light-weight theme for rendering scientific articles and associated notebooks
TypeScript
2
star
66

mystmd.org

The website theme and landing content for mystmd.org
TypeScript
2
star
67

write_ups

Write ups and publications that document the project
1
star
68

sphinx-conditional-asset

A small extension for developers of Sphinx to conditionally add assets to a page.
Python
1
star
69

sphinx-yaml-config

Python
1
star