{"library":"nbformat","title":"Jupyter Notebook Format","description":"nbformat is the reference implementation of the Jupyter Notebook format, providing Python APIs for programmatically creating, reading, modifying, and validating Jupyter Notebook files (.ipynb). It is currently at version 5.10.4 and follows the Jupyter project's release cadence, with major versions aligning with significant changes to the notebook format specification.","language":"python","status":"active","last_verified":"Tue May 12","install":{"commands":["pip install nbformat"],"cli":null},"imports":["import nbformat","from nbformat.v4 import new_notebook"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import nbformat\nfrom nbformat.v4 import new_notebook, new_markdown_cell, new_code_cell\nimport os\n\n# 1. Create a new notebook\nnb = new_notebook()\n\n# Add a markdown cell\nnb.cells.append(new_markdown_cell(\"## My First Notebook (nbformat)\"))\n\n# Add a code cell\ncode_cell_content = \"print('Hello from nbformat!')\\nx = 1 + 2\\nprint(f'The sum is: {x}')\"\nnb.cells.append(new_code_cell(code_cell_content))\n\n# Define output path\nnotebook_filename = 'example_notebook.ipynb'\n\n# 2. Write the notebook to a file\nwith open(notebook_filename, 'w', encoding='utf-8') as f:\n    nbformat.write(nb, f)\nprint(f\"Notebook '{notebook_filename}' created successfully.\")\n\n# 3. Read an existing notebook\nread_nb = None\nif os.path.exists(notebook_filename):\n    with open(notebook_filename, 'r', encoding='utf-8') as f:\n        # Specify as_version=4 to ensure it's read as the V4 format\n        read_nb = nbformat.read(f, as_version=4)\n    print(f\"\\nNotebook '{notebook_filename}' read successfully.\")\n    print(f\"Notebook format version: {read_nb.nbformat}.{read_nb.nbformat_minor}\")\n    for i, cell in enumerate(read_nb.cells):\n        print(f\"\\n--- Cell {i+1} ({cell.cell_type}) ---\")\n        print(cell.source)\nelse:\n    print(f\"Error: '{notebook_filename}' not found for reading.\")","lang":"python","description":"This quickstart demonstrates how to create a new Jupyter Notebook programmatically, add markdown and code cells, save it to a `.ipynb` file, and then read the content of an existing notebook. It uses the `nbformat.v4` module for creating notebook components, ensuring compatibility with the current Jupyter Notebook format specification version 4.","tag":"verified","tag_description":"quickstart runs on critical runtimes, recently tested","last_tested":"2026-04-23","results":[{"runtime":"python:3.10-alpine","exit_code":0},{"runtime":"python:3.10-slim","exit_code":0},{"runtime":"python:3.11-alpine","exit_code":0},{"runtime":"python:3.11-slim","exit_code":0},{"runtime":"python:3.12-alpine","exit_code":0},{"runtime":"python:3.12-slim","exit_code":0},{"runtime":"python:3.13-alpine","exit_code":0},{"runtime":"python:3.13-slim","exit_code":0},{"runtime":"python:3.9-alpine","exit_code":0},{"runtime":"python:3.9-slim","exit_code":0}]},"compatibility":{"tag":"verified","tag_description":"installs cleanly on critical runtimes, fast import, recently tested","last_tested":"2026-05-12","installed_version":null,"pypi_latest":null,"is_stale":null,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":null,"avg_import_s":0.49,"wheel_type":null},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"nbformat","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.44,"mem_mb":9.2,"disk_size":"23.6M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"nbformat","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.29,"mem_mb":9.2,"disk_size":"24M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"nbformat","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.64,"mem_mb":9.4,"disk_size":"26.2M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"nbformat","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.61,"mem_mb":9.4,"disk_size":"26M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"nbformat","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.6,"mem_mb":9.1,"disk_size":"17.9M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"nbformat","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.56,"mem_mb":9.1,"disk_size":"18M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"nbformat","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.41,"mem_mb":8.8,"disk_size":"17.1M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"nbformat","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.36,"mem_mb":8.8,"disk_size":"17M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"nbformat","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.5,"mem_mb":10.1,"disk_size":"23.1M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"nbformat","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.52,"mem_mb":10.1,"disk_size":"23M"}]}}