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 Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

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

notebookx_py-0.1.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (755.1 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ ARM64

notebookx_py-0.1.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (757.4 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ ARM64

notebookx_py-0.1.2-cp38-abi3-win_amd64.whl (593.0 kB view details)

Uploaded CPython 3.8+Windows x86-64

notebookx_py-0.1.2-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (778.1 kB view details)

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

notebookx_py-0.1.2-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (756.7 kB view details)

Uploaded CPython 3.8+manylinux: glibc 2.17+ ARM64

notebookx_py-0.1.2-cp38-abi3-macosx_11_0_arm64.whl (700.3 kB view details)

Uploaded CPython 3.8+macOS 11.0+ ARM64

notebookx_py-0.1.2-cp38-abi3-macosx_10_12_x86_64.whl (725.6 kB view details)

Uploaded CPython 3.8+macOS 10.12+ x86-64

File details

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

File metadata

File hashes

Hashes for notebookx_py-0.1.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 32425825f47cc42ade2a8d8ff62b3aa4d71d453d10e8266d69df8a16fd04c059
MD5 12e68f7cf8b2de55820e7cda2b9aa611
BLAKE2b-256 442069ceb2fe7e96a33eb922ff514a7ed7500df7f77075350e3a152c6b56b572

See more details on using hashes here.

Provenance

The following attestation bundles were made for notebookx_py-0.1.2-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.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for notebookx_py-0.1.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 860e74bba7cad1affa794fb89e85584b319b5f1410dc3c23736b53bec659df5e
MD5 902a1171d5432a0b9beb04490d240dff
BLAKE2b-256 c10097a098bd7c61d53bfa7fd71401d9e982401081e50d6a9aadaa1d1b322c54

See more details on using hashes here.

Provenance

The following attestation bundles were made for notebookx_py-0.1.2-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.2-cp38-abi3-win_amd64.whl.

File metadata

  • Download URL: notebookx_py-0.1.2-cp38-abi3-win_amd64.whl
  • Upload date:
  • Size: 593.0 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.2-cp38-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 b27094495c6b5402617842f3e0aaa778f5dddb4ab7f1c9ca5b226012028c44fa
MD5 db9a3467924fd8b8ef52ed536d2d5408
BLAKE2b-256 1ddd614e794dab39cdea63eb7702a40a9d6f1874a9ae3bdc9c8b1779fd409e1d

See more details on using hashes here.

Provenance

The following attestation bundles were made for notebookx_py-0.1.2-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.2-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for notebookx_py-0.1.2-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 75ddb649f39be77337e4b433cb62f10f2db7a7fc46b6372749066e613616b7bd
MD5 e162e194189a698270e18fae8e817b08
BLAKE2b-256 aa72854be2a2538f2178938ef49ffcd0dbad237634bfa68908f62f41a48951dd

See more details on using hashes here.

Provenance

The following attestation bundles were made for notebookx_py-0.1.2-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.2-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for notebookx_py-0.1.2-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 7263fbbb269eb913c32058209f06762f35c8ce908fafa70ba74c1d435d8e488d
MD5 6c8083dfaf66dbdf65721b48fafa6949
BLAKE2b-256 1d8eb392efec5b352113d5ab1eaf6e949e73c4661236d6db47f1c527bc94b6c6

See more details on using hashes here.

Provenance

The following attestation bundles were made for notebookx_py-0.1.2-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.2-cp38-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for notebookx_py-0.1.2-cp38-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 723169da996563688ed9e8b53e66f8b523caec5dc26490ffe8494f285da60ac0
MD5 3465323a90122433e8f30d942f481e99
BLAKE2b-256 877bf467334f6a91883d12c2dbcb32f906002b8197a01aab1d2519f6c318478c

See more details on using hashes here.

Provenance

The following attestation bundles were made for notebookx_py-0.1.2-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.2-cp38-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for notebookx_py-0.1.2-cp38-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 3c7e1e702c53fc91daca699affbf20442e25a7c7cf42289ef84877994b42869f
MD5 a23d873eb20780bcfda7cf02ad93c6d1
BLAKE2b-256 e53324f9a42ce3d83556157bc76b571a781fa4853dc37785b5cd00683bcb810b

See more details on using hashes here.

Provenance

The following attestation bundles were made for notebookx_py-0.1.2-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