Skip to main content

Fast, lightweight notebook conversion library

Project description

notebookx

A fast, lightweight notebook conversion library written in Rust with Python bindings.

notebookx is a Rust-based alternative to Python's nbconvert, providing fast notebook conversion between formats like .ipynb and percent format (.pct.py).

Features

  • Fast: Written in Rust for maximum performance
  • Multiple interfaces: Use as a Rust library, CLI tool (nbx), or Python package
  • Format conversion: Convert between ipynb and percent format
  • Notebook cleaning: Strip outputs, execution counts, and metadata for version control
  • Cross-platform: Works on Linux, macOS, and Windows

Installation

Python

pip install notebookx-py

Rust

Add to your Cargo.toml:

[dependencies]
notebookx = "0.1"

CLI

cargo install notebookx --features cli

Usage

Python

from notebookx import Notebook, Format, CleanOptions

# Load a notebook
nb = Notebook.from_file("example.ipynb")

# Convert to percent format
nb.to_file("example.pct.py")

# Or get as string
percent_content = nb.to_string(Format.Percent)

# Clean notebook for version control
clean_nb = nb.clean(CleanOptions(
    remove_outputs=True,
    remove_execution_counts=True,
))
clean_nb.to_file("clean.ipynb")

# Convenience functions
from notebookx import convert, clean_notebook

convert("input.ipynb", "output.pct.py")
clean_notebook("notebook.ipynb", remove_outputs=True)

CLI (nbx)

# Convert ipynb to percent format
nbx convert notebook.ipynb --to notebook.pct.py

# Convert percent to ipynb
nbx convert notebook.pct.py --to notebook.ipynb

# Clean a notebook (remove outputs)
nbx clean notebook.ipynb --output clean.ipynb --remove-outputs

# Clean in place
nbx clean notebook.ipynb --in-place --remove-outputs --remove-execution-counts

# Use stdin/stdout
cat notebook.ipynb | nbx convert - --from-fmt ipynb --to - --to-fmt percent

Rust

use notebookx::{Notebook, NotebookFormat, CleanOptions};

// Parse from file
let content = std::fs::read_to_string("example.ipynb")?;
let notebook = NotebookFormat::Ipynb.parse(&content)?;

// Convert to percent format
let percent = NotebookFormat::Percent.serialize(&notebook)?;

// Clean notebook
let options = CleanOptions {
    remove_outputs: true,
    remove_execution_counts: true,
    ..Default::default()
};
let clean = notebook.clean(&options);

// Save to file
let output = NotebookFormat::Ipynb.serialize(&clean)?;
std::fs::write("clean.ipynb", output)?;

Supported Formats

Format Extension Description
ipynb .ipynb Standard Jupyter notebook format (JSON)
percent .pct.py Percent format used by Jupytext, VSCode, etc.

Clean Options

When cleaning notebooks, you can control what gets removed:

Option Description
remove_outputs Remove all cell outputs
remove_execution_counts Reset execution counts to null
remove_cell_metadata Remove cell-level metadata
remove_notebook_metadata Remove notebook-level metadata
remove_kernel_info Remove kernel specification
preserve_cell_ids Keep cell IDs (default: regenerate)
remove_output_metadata Remove metadata from outputs
remove_output_execution_counts Remove execution counts from outputs

Presets

Python:

# For version control (removes cell metadata, execution counts, and output metadata)
# Preserves outputs so rendered content remains visible
options = CleanOptions.for_vcs()

# Strip everything (including outputs)
options = CleanOptions.strip_all()

CLI Reference

nbx convert

Convert notebooks between formats.

nbx convert <INPUT> --to <OUTPUT> [OPTIONS]

Options:
  --from-fmt <FORMAT>  Input format (ipynb, percent). Inferred from extension if not specified.
  --to-fmt <FORMAT>    Output format (ipynb, percent). Inferred from extension if not specified.
  -h, --help           Print help

nbx clean

Clean notebooks by removing outputs and metadata.

nbx clean <INPUT> [OPTIONS]

Options:
  -o, --output <FILE>           Output file (default: stdout)
  -i, --in-place                Modify file in place
  -O, --remove-outputs          Remove all outputs
  -e, --remove-execution-counts Remove execution counts
  --remove-cell-metadata        Remove cell metadata
  --remove-notebook-metadata    Remove notebook metadata
  --remove-kernel-info          Remove kernel specification
  -h, --help                    Print help

Development

Building from source

# Clone the repository
git clone https://github.com/lukastk/notebookx.git
cd notebookx

# Build Rust library and CLI
cargo build --release

# Build Python package
pip install maturin
maturin develop

Running tests

# Rust tests
cargo test --workspace

# Python tests
pytest tests/python

License

MIT

Acknowledgements

Example notebooks in nb_format_examples/ are from the Jupytext demo.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

notebookx_py-0.1.3.tar.gz (39.1 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

notebookx_py-0.1.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (755.5 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ ARM64

notebookx_py-0.1.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (757.7 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ ARM64

notebookx_py-0.1.3-cp38-abi3-win_amd64.whl (593.9 kB view details)

Uploaded CPython 3.8+Windows x86-64

notebookx_py-0.1.3-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (778.2 kB view details)

Uploaded CPython 3.8+manylinux: glibc 2.17+ x86-64

notebookx_py-0.1.3-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (756.9 kB view details)

Uploaded CPython 3.8+manylinux: glibc 2.17+ ARM64

notebookx_py-0.1.3-cp38-abi3-macosx_11_0_arm64.whl (700.7 kB view details)

Uploaded CPython 3.8+macOS 11.0+ ARM64

notebookx_py-0.1.3-cp38-abi3-macosx_10_12_x86_64.whl (726.2 kB view details)

Uploaded CPython 3.8+macOS 10.12+ x86-64

File details

Details for the file notebookx_py-0.1.3.tar.gz.

File metadata

  • Download URL: notebookx_py-0.1.3.tar.gz
  • Upload date:
  • Size: 39.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for notebookx_py-0.1.3.tar.gz
Algorithm Hash digest
SHA256 0a24701ca2e98a705c0ee11abac6f732208f17724b72337eddf49c7290d8d1c1
MD5 d556c8c9df28d99a192e06b21b8850a9
BLAKE2b-256 4549f3d01a09d8ce082ed274fdbd16d2d2e0151affc3c726689fde13011ba39e

See more details on using hashes here.

Provenance

The following attestation bundles were made for notebookx_py-0.1.3.tar.gz:

Publisher: release.yml on lukastk/notebookx

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file notebookx_py-0.1.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for notebookx_py-0.1.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 cc55143396840964dc71e04a7f6600d4bf7ae7b063e8537b52ce173ea8453967
MD5 f6e09f83f147cacb766248a7a1ff65fa
BLAKE2b-256 c898a0ce5176d7613b67d6d5f24b5594603ef2f41205e26f774ab79440ea82e6

See more details on using hashes here.

Provenance

The following attestation bundles were made for notebookx_py-0.1.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release.yml on lukastk/notebookx

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file notebookx_py-0.1.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for notebookx_py-0.1.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 b49d1c3e4d9a4051328da25e00a93e731091c513b2bc54c3c2e854f4e6295dbd
MD5 074176e17f4ba1a3d2542134dad4f477
BLAKE2b-256 8615af115036594bb462c0ec3348d922e3411b8f350c735a1fbd628091196389

See more details on using hashes here.

Provenance

The following attestation bundles were made for notebookx_py-0.1.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release.yml on lukastk/notebookx

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file notebookx_py-0.1.3-cp38-abi3-win_amd64.whl.

File metadata

  • Download URL: notebookx_py-0.1.3-cp38-abi3-win_amd64.whl
  • Upload date:
  • Size: 593.9 kB
  • Tags: CPython 3.8+, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for notebookx_py-0.1.3-cp38-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 5ed8e67a3cf5dbae0e879d8ffdd1d85f8418fd4483509db32e99c2c0e363017e
MD5 c0a817eb74c76212219e4d50c214b395
BLAKE2b-256 203f06850da17caab0a3677f092c1c9ee1f36d510446d361048d67de9ae01e6a

See more details on using hashes here.

Provenance

The following attestation bundles were made for notebookx_py-0.1.3-cp38-abi3-win_amd64.whl:

Publisher: release.yml on lukastk/notebookx

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file notebookx_py-0.1.3-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for notebookx_py-0.1.3-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b46c8450777a0b5158fffbd91acada805bc6b16ac6c810873799dc7eb9b510f0
MD5 5884fc79021c66701474920b033a1c72
BLAKE2b-256 9a2f21ea275bb60d45a40881642b176384fab2853ebc5ba1413c9fe325ab82a8

See more details on using hashes here.

Provenance

The following attestation bundles were made for notebookx_py-0.1.3-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on lukastk/notebookx

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file notebookx_py-0.1.3-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for notebookx_py-0.1.3-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 7ae0677cf87108f28eb9b2af29fa347b31c8764b32dd10deaa72d4beef907120
MD5 cce65f83c5886f5d8955683481d209bf
BLAKE2b-256 a4afd0225e2005ae119e3e4f4631566d7606e2e5163423915147c08ecd518d2d

See more details on using hashes here.

Provenance

The following attestation bundles were made for notebookx_py-0.1.3-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release.yml on lukastk/notebookx

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file notebookx_py-0.1.3-cp38-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for notebookx_py-0.1.3-cp38-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2d943c4e05f214879f91e4b3bbfb097b414eee9242b4aee18ce9248fb30b82b2
MD5 e4a44f971121413c0d9fb218a88028e6
BLAKE2b-256 fc0cd015658941f5e27a69458f3f6de3dc60cd1a2259fc502216fff5e52c9567

See more details on using hashes here.

Provenance

The following attestation bundles were made for notebookx_py-0.1.3-cp38-abi3-macosx_11_0_arm64.whl:

Publisher: release.yml on lukastk/notebookx

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file notebookx_py-0.1.3-cp38-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for notebookx_py-0.1.3-cp38-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 af9361ef9784848d410311f6c26c5fdbf7f366ac77939a2164e499c44bfe1cda
MD5 efb6be8fb703f4201e7b33a8928800de
BLAKE2b-256 990962c1eb18261b1991a3a46c8b0695ce2b0919bfa96f16f7a0f20a95df4ccd

See more details on using hashes here.

Provenance

The following attestation bundles were made for notebookx_py-0.1.3-cp38-abi3-macosx_10_12_x86_64.whl:

Publisher: release.yml on lukastk/notebookx

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page