Skip to content
Jupyter Notebooks as Markdown Documents, Julia, Python or R scripts
Python Jupyter Notebook Scheme C++ Julia JavaScript Other
Branch: master
Clone or download
Latest commit a393afd Feb 18, 2020


Type Name Latest commit message Commit time
Failed to load latest commit information.
binder Added wordcloud image and notebook Nov 23, 2019
demo Added wordcloud image and notebook Nov 23, 2019
docs C# and F# added to the list of supported languages Feb 16, 2020
jupyter-config Fix jupyter_server jpserver_extension config Jul 6, 2019
jupytext Version 1.3.4 Feb 18, 2020
packages/labextension nomarker format in the JupyterLab extension Dec 26, 2019
tests Comment indented bash commands Feb 16, 2020
.codecov.yml Ignore coverage diffs smaller than 0.1% Sep 17, 2019
.gitattributes Exclude the world population notebook from languages statistics May 2, 2019
.gitignore adding back in world population and small edits Jun 20, 2019
.lgtm.yml Skip matplotlib example in lgtm Sep 20, 2018
.pylintrc project max-line-length at 127 Jan 30, 2019
.travis.yml Compute coverage with the miniconda3 env Feb 16, 2020 Version 1.3.4 Feb 18, 2020 nomarker format in the JupyterLab extension Dec 26, 2019
LICENSE Update copyright years Jan 8, 2020 Exclude second large notebook from pip package Oct 13, 2019
Makefile Sphinx on Feb 3, 2019 C# and F# added to the list of supported languages Feb 16, 2020
environment.yml Upload to pip with twine Dec 26, 2019
make.bat Sphinx on Feb 3, 2019
requirements-dev.txt Updated all the mirror representation of notebooks Oct 20, 2019
requirements.txt Remove mock from requirements Jul 9, 2019
setup.cfg Run flake8 on travis Jun 9, 2019 nomarker format in the JupyterLab extension Dec 26, 2019

Build Status Documentation Status Language grade: Python GitHub language count

Have you always wished Jupyter notebooks were plain text documents? Wished you could edit them in your favorite IDE? And get clear and meaningful diffs when doing version control? Then... Jupytext may well be the tool you're looking for!

Jupytext can save Jupyter notebooks as

  • Markdown and R Markdown documents,
  • Scripts in many languages.

It can also convert these documents into Jupyter Notebooks, allowing you to synchronize content in both directions.

The languages that are currently supported by Jupytext are: Julia, Python, R, Bash, Scheme, Clojure, Matlab, Octave, C++, q/kdb+, IDL, TypeScript, Javascript, Scala, Rust/Evxcr, PowerShell, C#, F#, and Robot Framework. Extending Jupytext to more languages should be easy - read more at In addition, jupytext users can choose between two formats for notebooks as scripts:

  • The percent format, compatible with several IDEs, including Spyder, Hydrogen, VScode and PyCharm. In that format, cells are delimited with a commented %%.
  • The light format, designed for this project. Use that format to open standard scripts as notebooks, or to save notebooks as scripts with few cell markers - none when possible.

For more complete information see the jupytext FAQ and the jupytext documentation

Try Jupytext

Introducing Jupytext PyParis CFM insights Binder

Looking for a demo?


Conda Version Pypi pyversions

Jupytext is available on pypi and on conda-forge. Run either of

pip install jupytext --upgrade


conda install -c conda-forge jupytext

If you want to use Jupytext within Jupyter Notebook or JupyterLab, make sure you install Jupytext in the Python environment where the Jupyter server runs. If that environment is read-only, for instance if your server is started using JupyterHub, install Jupytext in user mode with:

/path_to_your_jupyter_environment/python -m pip install jupytext --upgrade --user

Jupytext's contents manager

Jupytext provides a contents manager for Jupyter that allows Jupyter to open and save notebooks as text files. When Jupytext's content manager is active in Jupyter, scripts and Markdown documents have a notebook icon.

In most cases, Jupytext's contents manager is activated automatically by Jupytext's server extension. When you restart either jupyter lab or jupyter notebook, you should see a line that looks like:

[I 10:28:31.646 LabApp] [Jupytext Server Extension] Changing NotebookApp.contents_manager_class from LargeFileManager to jupytext.TextFileContentsManager

If you don't have the notebook icon on text documents after a fresh restart of your Jupyter server, you can either enable our server extension explicitly (with jupyter serverextension enable jupytext), or install the contents manager manually. Append

c.NotebookApp.contents_manager_class = "jupytext.TextFileContentsManager"

to your .jupyter/ file (generate a Jupyter config, if you don't have one yet, with jupyter notebook --generate-config). Our contents manager accepts a few options: default formats, default metadata filter, etc. Then, restart Jupyter Notebook or JupyterLab, either from the JupyterHub interface or from the command line with

jupyter notebook # or lab

Jupytext menu in Jupyter Notebook

Jupytext includes an extensions for Jupyter Notebook that adds a Jupytext section in the File menu.

Jupyter notebook extension

If the extension was not automatically installed, install and activate it with

jupyter nbextension install --py jupytext [--user]
jupyter nbextension enable --py jupytext [--user]

Jupytext commands in JupyterLab

In JupyterLab, Jupytext adds a set of commands to the command palette:

JupyterLab extension

The lab extension is included in the Python package. Unless you need to use an older version of the extension you don't have to either install or update the extension manually from npm.

If you are wondering why the npm and the Python packages have different version, it's because the npm package is updated less often than the Python one. The latest versions are respectively npm version and Pypi.

Installing Jupytext will trigger a build of JupyterLab the next time you open it. If you prefer, you can trigger the build manually with

jupyter lab build

The version of the extension that is shipped with Jupytext requires JupyterLab 1.0. If you prefer to continue using JupyterLab in version 0.35, you should install the version 0.19 of the extension:

jupyter labextension install jupyterlab-jupytext@0.19

Using Jupytext

Paired notebooks in the Jupyter Server

Jupytext can write a given notebook to multiple files. In addition to the original notebook file, Jupytext can save the input cells to a text file — either a script or a Markdown document. Put the text file under version control for a clear commit history. Or refactor the paired script, and reimport the updated input cells by simply refreshing the notebook in Jupyter.

Configuring notebooks to use Jupytext

Select the pairing for a given notebook using either the Jupytext menu in Jupyter Notebook, or the Jupytext commands in JupyterLab.

Alternatively, the pairing information for one or multiple notebooks can be set on the command line:

jupytext --set-formats ipynb,py notebook.ipynb

For more information see the jupytext documentation.

Command line conversion

The package provides a jupytext script for command line conversion between the various notebook extensions:

jupytext --to py notebook.ipynb                 # convert notebook.ipynb to a .py file
jupytext --to notebook              # convert to an .ipynb file with no outputs
jupytext --to notebook --execute    # convert to an .ipynb file and run it 
jupytext --update --to notebook     # update the input cells in the .ipynb file and preserve outputs and metadata
jupytext --set-formats ipynb,py notebook.ipynb  # Turn notebook.ipynb into a paired ipynb/py notebook
jupytext --sync notebook.ipynb                  # Update all paired representations of notebook.ipynb

For more examples, see the jupytext documentation

Want to contribute?

Contributions are welcome. Please let us know how you use jupytext and how we could improve it. You think the documentation could be improved? Go ahead and edit it on GitHub! Read our to find out guidelines and instructions on how to setup a development environment. And stay tuned for more demos on medium and twitter!

You can’t perform that action at this time.