NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #2179 most downloaded on PyPI
Jupyter notebooks as Markdown documents, Julia, Python or R scripts
Last release today
04 Oct 2026
Ships fairly regularly
a new release about every 6 weeks
Nearly every release is documented
notes for 59 of the last 60 stable releases
1 version withdrawn
withdrawn after publishing
8 years old
150 releases · first in 2018
Exclude tests in package deployment
BugFixes
Nothing published for this version
Jupytext now includes a Jupyter Notebook extension and a JupyterLab extension (#86).
Improvements
--paired-paths to list the paths for the paired representations of the notebook, and --sync to synchronise the content of all paired paths based on the most recent file (#146). In addition, the --from argument is optional even when the notebook is read from stdin (#148).--set-formats and the --update-metadata arguments (#141).--pipe the text representation of a notebook to external programs like black or flake8 (#154, #142)ipynb,prefix/suffix.py:percent to pair the current notebook named notebook.ipynb to a script named prefixnotebooksuffix.py. Suffix and prefix can also be configured on the ipynb file, with the same syntax.hydrogen format for scripts, which derives from percent. In that format Jupyter magic commands are not commented (#59, #126, #132).bare format for scripts, which derives from light. That format has no cell marker. Use a notebook metadata filter {"jupytext": {"notebook_metadata_filter":"-all"}} if you want no YAML header (#152).light, as for the other languages.notebook_metadata_filter and cell_metadata_filter.split_at_heading to split Markdown cells at heading (#130)BugFixes
ls are commented in the light and R markdown format (#149).%%html, %%latex are now commented out in the light, percent and Rmd formats (#179).One column per quarter.
Jupytext command line has more arguments: --paired-paths to list the paths for the paired representations of the notebook, and --sync to synchronise t
Improvements
--paired-paths to list the paths for the paired representations of the notebook, and --sync to synchronise the content of all paired paths based on the most recent file (#146). In addition, the --from argument is optional even when the notebook is read from stdin (#148).--set-formats and the --update-metadata arguments (#141).--pipe the text representation of a notebook to external programs like black or flake8 (#154, #142)ipynb,prefix/suffix.py:percent to pair the current notebook named notebook.ipynb to a script named prefixnotebooksuffix.py. Suffix and prefix can also be configured on the ipynb file, with the same syntax.hydrogen format for scripts, which derives from percent. In that format Jupyter magic commands are not commented (#59, #126, #132).bare format for scripts, which derives from light. That format has no cell marker. Use a notebook metadata filter {"jupytext": {"notebook_metadata_filter":"-all"}} if you want no YAML header (#152).light, as for the other languages.notebook_metadata_filter and cell_metadata_filter.split_at_heading to split Markdown cells at heading (#130)BugFixes
ls are commented in the light and R markdown format (#149).vs 1.0.0-rc0
vs 1.0.0-rc1
vs 1.0.0-rc2
auto extension, used by our two notebook extensions https://github.com/mwouts/jupyterlab-jupytext and https://github.com/mwouts/jupytext_nbextensionrc3 vs 1.0.0-rc2
rc4 vs 1.0.0-rc2
rc5 vs 1.0.0-rc4
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
The language_info section is not part of the default header any more. Language information is now taken from metadata kernelspec.language. (#105).
Improvements
language_info section is not part of the default header any more. Language information is now taken from metadata kernelspec.language. (#105).percent format (#126, #132). Version for the percent format increases from '1.1' to '1.2'. Set an option comment_magics to false either per notebook, or globally on Jupytext's contents manager, or on jupytext's command line, if you prefer not to comment Jupyter magics.The language_info section is not part of the default header any more. Language information is now taken from metadata kernelspec.language. (#105).
Improvements
language_info section is not part of the default header any more. Language information is now taken from metadata kernelspec.language. (#105).percent format (#126, #132). Version for the percent format increases from '1.1' to '1.2'. Set an option comment_magics to false either per notebook, or globally on Jupytext's contents manager, or on jupytext's command line, if you prefer not to comment Jupyter magics.The language_info section is not part of the default header any more. Language information is now taken from metadata kernelspec.language. (#105).
language_info section is not part of the default header any more. Language information is now taken from metadata kernelspec.language. (#105).percent format (#126, #132). Version for the percent format increases from '1.1' to '1.2'. Set an option comment_magics to false either per notebook, or globally on Jupytext's contents manager, or on jupytext's command line, if you prefer not to comment Jupyter magics.R scripts with .r extension are supported
Improvements
bash scripts as notebooks (#127).r extension are supported (#122)Notebook metadata is filtered - only the most common metadata are stored in the text representation
Improvements
freeze_metadata on the content manager and on the command line interface (defaults to False). Use this option to avoid creating a YAML header or cell metadata if there was none initially. (#110)light and percent scripts (#111, #114, #115)BugFixes
percent format has a fail-safe for code cells with square brackets in the title (#116)Notebook metadata is filtered - only the most common metadata are stored in the text representation
Improvements
additional_metadata_on_text_files on the content manager. Defaults to True. Change its value to False to avoid creating a YAML header or cell metadata if there was none initially (#110)light and percent scripts (#111, #114)Notebook metadata is filtered - only the most common metadata are stored in the text representation
Improvements
additional_metadata_on_text_files on the content manager. Defaults to True. Change its value to False to avoid creating a YAML header or cell metadata if there was none initially (#110)Frozen cells are supported in R Markdown, light and percent scripts
Improvements
jupytext gains a --version argument (#103)Round trip conversion testing with jupytext --test was improved
Improvements
jupytext --test was improved (#99)BugFixes
Added
jupytext --test was improved (#99)Fixed
Sphinx format tested on World population notebook
BugFixes
World population notebook (#97)All jupytext related metadata goes to a jupytext section (#91). Please make sure your collaborators use the same version of Jupytext, as the new versi
Improvements
jupytext related metadata goes to a jupytext section (#91). Please make sure your collaborators use the same version of Jupytext, as the new version can read previous metadata, but not the opposite..ipynb and .md, use "jupytext": {"formats": "ipynb,pct.py:percent,lgt.py:light,spx.py:sphinx,md"},.light and percent formats to more languages (#61).auto extension in default_jupytext_formats (#93).light scripts and R markdown documents. Escape magics in other formats with a comment_magics metadata (true or false), or with the contents manager comment_magics global flag (#94).BugFixes
jupytext returns a meaningful error when no argument is given.light and percent formats made available for scheme and cpp notebooks. Adding more formats is straightforward - just add a new entry to _SCRIPT_EXTENS
Improvements
light and percent formats made available for scheme and cpp notebooks. Adding more formats is straightforward - just add a new entry to _SCRIPT_EXTENSIONS in languages.py, a sample notebook and a mirror test (#61)jupytext_formats when notebook is loaded/saved.BugFixes
.nb (#87)Markdown cells header in sphinx gallery format may have a space between first # and following.
BugFixes
# and following.Jupytext can read and write notebooks as Hydrogen/VScode/Spyder/PyCharm compatible scripts (cells starting with # %%)
Improvements
# %%) (#59)jupytext has a from argument, and now accepts notebook from the standard input.BugFixes
jupytext (#84)Added
percent format is more robust: use [markdown] and [raw] to identify cell types. Cell type comes after the cell title. (#59)# %%) (#59)jupytext has a from argument, and now accepts notebook from the standard input.Fixed
Nothing published for this version
Jupytext can read and write notebooks as Hydrogen/VScode/Spyder/PyCharm compatible scripts (cells starting with # %%)
Improvements
# %%) (#59)jupytext has a from argument, and now accepts notebook from
the standard input.BugFixes
jupytext (#84)Code lines that start with a quotation mark in Jupyter are commented in the corresponding Python and Julia scripts
Improvements
BugFixes
Added
Fixed
Jupytext will not load paired notebook when text representation is out of date
Improvements
BugFixes
setup.py (#71)Added
Fixed
Lighter cell markers for Python and Julia scripts (#57). Corresponding file format version at 1.2. Scripts in previous version 1.1 can still be opened
Improvements
BugFixes
jupytext fixed on Python 2.7 (#46)Initial support for Jupyter notebooks as Julia scripts
Improvements
jupytext has explicit to and output
options (#46)jupytext --test improved (#54)BugFixes
testfixtures now in requirements (#55)Package and conversion script renamed from nbrmd to jupytext.
Improvements
nbrmd to jupytext.nbrmd_format is empty (mwouts/nbsrc/#5): no Jupyter notebook
is created on disk when the user opens a Python or R file and saves it from
Jupyter, unless the users asks for it by setting nbrmd_format.BugFixes
nbsrc script (#43)Added
nbrmd to jupytext.Your coding agent can read these notes before it upgrades. Set up the MCP server →