Skip to main content

Simple package to extract text with coordinates from programmatic PDFs

Project description

Docling Parse

PyPI version PyPI - Python Version uv Pybind11 Platforms License MIT

Simple package to extract text, paths and bitmap images with coordinates from programmatic PDFs. This package is used in the Docling PDF conversion. Below, we show a few output of the latest parser with char, word and line level output for text, in addition to the extracted paths and bitmap resources.

To do the visualizations yourself, simply run (change word into char or line),

uv run python ./docling_parse/visualize.py -i <path-to-pdf-file> -c word --interactive
original char word line
screenshot screenshot screenshot screenshot
screenshot screenshot screenshot screenshot
screenshot screenshot screenshot screenshot
screenshot screenshot screenshot screenshot
screenshot screenshot screenshot screenshot

Quick start

Install the package from PyPI:

pip install docling-parse

Sequential parsing

docling-parse v7 split page parsing into two public configs:

  • DecodeConfig: how to compute pages. This is fixed when a document is opened.
  • ContentConfig: what to keep or materialize per page. This can be overridden per page.
from docling_core.types.doc.page import TextCellUnit
from docling_parse.pdf_parser import (
    ContentConfig,
    ContentLevel,
    DecodeConfig,
    DoclingPdfParser,
)

parser = DoclingPdfParser(loglevel="fatal")

pdf_doc = parser.load(
    path_or_stream="<path-to-pdf>",
    decode_config=DecodeConfig(
        do_sanitization=True,
        keep_glyphs=False,
    ),
    content_config=ContentConfig(
        char_cells_content_level=ContentLevel.SKIP,
        word_cells_content_level=ContentLevel.COMPUTE_AND_MATERIALIZE,
        line_cells_content_level=ContentLevel.COMPUTE_AND_MATERIALIZE,
        shapes_content_level=ContentLevel.SKIP,
        bitmaps_content_level=ContentLevel.SKIP,
    ),
)

for page_no, page in pdf_doc.iterate_pages():
    print(page_no, len(page.word_cells), len(page.textline_cells))

    for word in page.iterate_cells(unit_type=TextCellUnit.WORD):
        print(word.rect, word.text)

    image = page.render_as_image(cell_unit=TextCellUnit.WORD)
    image.show()

If you open cheaply and later need richer output, request it per page. When the new content_config needs entities that were previously skipped, that page is re-decoded automatically:

from docling_parse.pdf_parser import ContentConfig, ContentLevel

page = pdf_doc.get_page(
    1,
    content_config=ContentConfig(
        word_cells_content_level=ContentLevel.COMPUTE_AND_MATERIALIZE,
        line_cells_content_level=ContentLevel.COMPUTE_AND_MATERIALIZE,
    ),
)

v6 -> v7 migration

The main API break in v7 is that the old public DecodePageConfig selection flags were split into two concerns:

  • DecodeConfig: compute-time tuning only
  • ContentConfig: what to skip, compute, or materialize per page

In practice:

  • open-time decode_config replaces the old per-page decode tuning
  • per-page content selection now lives in content_config
  • materialize_bitmap_bytes became include_bitmap_bytes
  • threaded page_materialization_config became page_content_config

Typical migration examples:

  • old DecodePageConfig.keep_char_cells=True -> ContentConfig(char_cells_content_level=ContentLevel.COMPUTE_AND_MATERIALIZE)
  • old DecodePageConfig.create_word_cells=True without surfacing them everywhere -> ContentConfig(word_cells_content_level=ContentLevel.COMPUTE)
  • old materialize_bitmap_bytes=False -> ContentConfig(include_bitmap_bytes=False)

One semantic change matters: decode_config is now fixed when the document or threaded batch is opened. If you want richer page output later, override content_config on get_page(...) instead. On the sequential path this may re-decode that page; on the threaded path you can only materialize entities the batch already computed.

Parallel parsing (multi-threaded)

Parse one or more PDFs in parallel with backpressure:

from docling_parse.pdf_parser import (
    ContentConfig,
    ContentLevel,
    DecodeConfig,
    DoclingThreadedPdfParser,
    ThreadedPdfParserConfig,
)

parser = DoclingThreadedPdfParser(
    parser_config=ThreadedPdfParserConfig(
        loglevel="fatal",
        threads=4,
        max_concurrent_results=32,
        page_content_config=ContentConfig(
            word_cells_content_level=ContentLevel.COMPUTE,
            line_cells_content_level=ContentLevel.COMPUTE_AND_MATERIALIZE,
        ),
    ),
    decode_config=DecodeConfig(),
)

doc_key = parser.load("doc_a.pdf", page_numbers=[1, 3, 5])
print(doc_key, parser.page_count(doc_key), parser.scheduled_page_count(doc_key))

for result in parser.iterate_results():
    if not result.success:
        print(result.doc_key, result.page_number, result.error_message)
        continue

    # Batch decode kept word cells in C++, but did not materialize them by default.
    page = result.get_page(
        ContentConfig(
            word_cells_content_level=ContentLevel.COMPUTE_AND_MATERIALIZE,
            line_cells_content_level=ContentLevel.COMPUTE_AND_MATERIALIZE,
        )
    )
    print(
        result.doc_key,
        result.page_number,
        len(page.word_cells),
        result.timings.total_s,
    )

For threaded parse-and-render workloads, set ThreadedPdfParserConfig.render_config and use result.get_image(), result.get_image(scale=...), or result.get_image(canvas_size=...).

Use the CLI

$ docling-parse -h
usage: docling-parse [-h] -p PDF

Process a PDF file.

options:
  -h, --help         show this help message and exit
  -p PDF, --pdf PDF  Path to the PDF file

Performance Benchmarks

Current perf tooling lives under perf/:

For historical V1 vs V2 benchmarks, see legacy_performance_benchmarks.md.

Development

CXX

To build the parser, simply run the following command in the root folder,

rm -rf build; cmake -B ./build; cd build; make

You can run the parser from your build folder:

% ./parse.exe -h
program to process PDF files or configuration files
Usage:
  PDFProcessor [OPTION...]

  -i, --input arg          Input PDF file
  -c, --config arg         Config file
      --create-config arg  Create config file
  -p, --page arg           Pages to process (default: -1 for all) (default:
                           -1)
      --password arg       Password for accessing encrypted, password-protected files
  -o, --output arg         Output file
  -l, --loglevel arg       loglevel [error;warning;success;info]
  -h, --help               Print usage

If you don't have an input file, a template input file will be printed on the terminal.

Python

To build the package, simply run (make sure uv is installed),

uv sync

The latter will only work after a clean git clone. If you are developing and updating C++ code, please use,

# uv pip install --force-reinstall --no-deps -e .
rm -rf .venv; uv venv; uv pip install --force-reinstall --no-deps -e ".[perf-tools]"

or

BUILD_THREADS=12 uv pip install --force-reinstall --no-deps -e ".[perf]"

To test the package, run:

uv run pytest ./tests -v -s

Contributing

Please read Contributing to Docling Parse for details.

References

If you use Docling in your projects, please consider citing the following:

@techreport{Docling,
  author = {Docling Team},
  month = {8},
  title = {Docling Technical Report},
  url = {https://arxiv.org/abs/2408.09869},
  eprint = {2408.09869},
  doi = {10.48550/arXiv.2408.09869},
  version = {1.0.0},
  year = {2024}
}

License

The Docling Parse codebase is under MIT license. For individual model usage, please refer to the model licenses found in the original packages.

LF AI & Data

Docling (and also docling-parse) is hosted as a project in the LF AI & Data Foundation.

IBM ❤️ Open Source AI

The project was started by the AI for knowledge team at IBM Research Zurich.

Project details


Release history Release notifications | RSS feed

Download files

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

Source Distribution

docling_parse-7.2.0.tar.gz (6.7 MB view details)

Uploaded Source

Built Distributions

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

docling_parse-7.2.0-cp314-cp314-win_amd64.whl (11.4 MB view details)

Uploaded CPython 3.14Windows x86-64

docling_parse-7.2.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (10.2 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

docling_parse-7.2.0-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (9.8 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.26+ ARM64manylinux: glibc 2.28+ ARM64

docling_parse-7.2.0-cp314-cp314-macosx_14_0_arm64.whl (9.2 MB view details)

Uploaded CPython 3.14macOS 14.0+ ARM64

docling_parse-7.2.0-cp313-cp313-win_amd64.whl (11.0 MB view details)

Uploaded CPython 3.13Windows x86-64

docling_parse-7.2.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (10.2 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

docling_parse-7.2.0-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (9.8 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.26+ ARM64manylinux: glibc 2.28+ ARM64

docling_parse-7.2.0-cp313-cp313-macosx_14_0_arm64.whl (9.2 MB view details)

Uploaded CPython 3.13macOS 14.0+ ARM64

docling_parse-7.2.0-cp312-cp312-win_amd64.whl (11.0 MB view details)

Uploaded CPython 3.12Windows x86-64

docling_parse-7.2.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (10.2 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

docling_parse-7.2.0-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (9.8 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.26+ ARM64manylinux: glibc 2.28+ ARM64

docling_parse-7.2.0-cp312-cp312-macosx_14_0_arm64.whl (9.2 MB view details)

Uploaded CPython 3.12macOS 14.0+ ARM64

docling_parse-7.2.0-cp311-cp311-win_amd64.whl (11.0 MB view details)

Uploaded CPython 3.11Windows x86-64

docling_parse-7.2.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (10.2 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

docling_parse-7.2.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (9.8 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.26+ ARM64manylinux: glibc 2.28+ ARM64

docling_parse-7.2.0-cp311-cp311-macosx_14_0_arm64.whl (9.2 MB view details)

Uploaded CPython 3.11macOS 14.0+ ARM64

docling_parse-7.2.0-cp310-cp310-win_amd64.whl (11.0 MB view details)

Uploaded CPython 3.10Windows x86-64

docling_parse-7.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (10.2 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

docling_parse-7.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (9.9 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

docling_parse-7.2.0-cp310-cp310-macosx_14_0_arm64.whl (9.2 MB view details)

Uploaded CPython 3.10macOS 14.0+ ARM64

File details

Details for the file docling_parse-7.2.0.tar.gz.

File metadata

  • Download URL: docling_parse-7.2.0.tar.gz
  • Upload date:
  • Size: 6.7 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for docling_parse-7.2.0.tar.gz
Algorithm Hash digest
SHA256 b3ad556fd96986fd4dbf43cb24d38c3343e06d58d15af65003a806b502645419
MD5 b5ec6148d4a33b811098728c580ddd7f
BLAKE2b-256 f35d73b88de7877f76066976919e773c75901339368a69e0a6c1adb97b32e494

See more details on using hashes here.

File details

Details for the file docling_parse-7.2.0-cp314-cp314-win_amd64.whl.

File metadata

File hashes

Hashes for docling_parse-7.2.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 ede9687710560cecaf9ae89b09e1e50a4c1028a1ec2ea265466a1d179574a4f8
MD5 ede7b4876c4cbbc72bf43c903d7eaa07
BLAKE2b-256 62f960a98cc9b0b23e0bb9da52e3600f0e9445d81e8de5f30ea09d62cf57cc31

See more details on using hashes here.

File details

Details for the file docling_parse-7.2.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for docling_parse-7.2.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 1d74b5cb5e2bee45067307ce89b40ecbba296fed50b3fee5599417cf9ee6f7a1
MD5 78f66bda70bac33e8107d030ef986053
BLAKE2b-256 7798383adaaddcac237cb226ec701dda026ab9221485d56d328529f46a934788

See more details on using hashes here.

File details

Details for the file docling_parse-7.2.0-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for docling_parse-7.2.0-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 16f4da6f4e9794e8fd13bf25941c0abd0bea4c792b26fd6b5489d16a809f52aa
MD5 1a6280d23c123042b9ddd18e3eb9c67a
BLAKE2b-256 ef9eecddae4447690c5ef8c0c52e20cb31f66040c2f41f013ed0eb73dcd86107

See more details on using hashes here.

File details

Details for the file docling_parse-7.2.0-cp314-cp314-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for docling_parse-7.2.0-cp314-cp314-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 dc1c0d055a417462cc62d2c562ac3584805bbb1adb2c22634ff3446425a6ea82
MD5 3fe0d13d43d367b770f455b2bfa622ee
BLAKE2b-256 7a919083e8b1a8d773e1f7a818a4bbb80844c2eb31d80e5f84a65c193fa50dc0

See more details on using hashes here.

File details

Details for the file docling_parse-7.2.0-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for docling_parse-7.2.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 f7771365d19fbc39172f1fe1b77dfe82f38de1baa207274e3e33adda6c6b92a6
MD5 1506166ff6f94b2980b889423fe08454
BLAKE2b-256 97146309978c4adfb1cb5ba02179446b2def10ff38d7f71903e5d005e6ee1297

See more details on using hashes here.

File details

Details for the file docling_parse-7.2.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for docling_parse-7.2.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 26a0917ebab66f3456069f235e8df9a5d5fcf98793aa69abe9204a0132af21f1
MD5 2d045f163e2c9604b3d78ee03ee12a8d
BLAKE2b-256 ce0ba95aca85bb0bd50bf1b9c626a6cd9cc02d266a34161ef834c1f27d53832f

See more details on using hashes here.

File details

Details for the file docling_parse-7.2.0-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for docling_parse-7.2.0-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 67a3151b5609a6c47a1a70f44bc0ffd7fe9f472531246163a535decbaea41ee3
MD5 3ba41cdf86ddd1b6b3a0b40408629db3
BLAKE2b-256 08f9be01b5af26cf31ecc1d9c836dc2458a88b6ec7575fa92dd5469311dfb860

See more details on using hashes here.

File details

Details for the file docling_parse-7.2.0-cp313-cp313-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for docling_parse-7.2.0-cp313-cp313-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 a6c69c9772b22f116b715be902c84e60bc175f1d25170098f62ff47f8193093b
MD5 97aebd6fd6df3a137d27934d62e21dec
BLAKE2b-256 9fbbbbe3ca3481a7640cee0c1c8ed33f6474abd872f3810a0b9951157aaf8674

See more details on using hashes here.

File details

Details for the file docling_parse-7.2.0-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for docling_parse-7.2.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 e2b2e3857094e2b76201e022f494184d67255a132f43c513943151cc2b390ce2
MD5 9af08eadaa44871b47fb761a45d8ee15
BLAKE2b-256 6b1455732078b27803f768c888c761e7e48aa9b863eed9ddad511c693ec1c20a

See more details on using hashes here.

File details

Details for the file docling_parse-7.2.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for docling_parse-7.2.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 47898456f23e68d9bc8f1cc5244d01695ef80b8d010221a33f088f5063d1c591
MD5 737c67c59194c02e9a43265940401b17
BLAKE2b-256 ce72760e5edee90b22f0d987314ef2de1d979715f3989053e1f9eaa996c652ac

See more details on using hashes here.

File details

Details for the file docling_parse-7.2.0-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for docling_parse-7.2.0-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 033689d8326433540995b2a29d78d9e562d57706c5e01314b51f32f31bdf5119
MD5 db2d00e43e44bc825bb97760453b4256
BLAKE2b-256 b590b7b833b37478bc7176f3a33402ec985d694f52d6984fe9b2b380420bd8f0

See more details on using hashes here.

File details

Details for the file docling_parse-7.2.0-cp312-cp312-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for docling_parse-7.2.0-cp312-cp312-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 3211bc7b9098e0e7b7eda896b6caa9bacc86dbfcb4e74e3efa4010effc77def0
MD5 aedd46e1008676990729028a699a766c
BLAKE2b-256 7f7b78410f87cb8451371644d93c6081286a874bd83c6f5000600f19598a5f7f

See more details on using hashes here.

File details

Details for the file docling_parse-7.2.0-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for docling_parse-7.2.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 4f6f308a5e4a416dba47337ad2728c42223ed0017cae65755f0fe808c89e695a
MD5 37d3f017a33c08660d74fa5eda8d73a6
BLAKE2b-256 ad1a3cc5c4f914ef639a188e4df6737b1723eea58e0c9f177e1708e6a477f7a6

See more details on using hashes here.

File details

Details for the file docling_parse-7.2.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for docling_parse-7.2.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 4aa3cb166c70e7266e4b732ca1bf2d168bcf597f8e1b1df868265619659e1fef
MD5 a9724e8b95dfe12a724389c60b9c65af
BLAKE2b-256 1efcaf18446ca6e2bfd5b0970920ac234b325ede526fef2940d16c5b28e9763e

See more details on using hashes here.

File details

Details for the file docling_parse-7.2.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for docling_parse-7.2.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 2451911ab09604fc0f023543b368a3097b94fe7dcae5bb8f3685542492d10449
MD5 e34309947d48ea53fe13519b32b04d10
BLAKE2b-256 576128d8bad7f3557e6d0cfbd41d1980eed9292fa00fc7ba4e7c6224e8ea0d2f

See more details on using hashes here.

File details

Details for the file docling_parse-7.2.0-cp311-cp311-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for docling_parse-7.2.0-cp311-cp311-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 17ed67e24882534ef05bb7cf587ac9d13a588640aa2f199f7fada19910830b83
MD5 1fad7604b0868e55ff0a3326be3630e4
BLAKE2b-256 84ee7934acb108000684059d7dbefc4669815772c6de819128bd62bc43f4193c

See more details on using hashes here.

File details

Details for the file docling_parse-7.2.0-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for docling_parse-7.2.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 fd588623c6f3f76e8188b798307945c2932f8dae492aa123dc340e53a31a9f67
MD5 3541621a95ac46a62628cf64718b4ab1
BLAKE2b-256 4ae52f62b93b31dc468ae01cc32ccf3f6719c29b5507f72f6e3d5caf6464a5c6

See more details on using hashes here.

File details

Details for the file docling_parse-7.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for docling_parse-7.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 bba8a762ad240ede197e380239301787b82792d81e23fda8c3041b9d1c443c6e
MD5 15e074d374a5d1ca0f0654f92d114b20
BLAKE2b-256 12a97fd3d72f12d6ddd621807a1c8b2d7bf37f13fed09a024479446b91341bf1

See more details on using hashes here.

File details

Details for the file docling_parse-7.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for docling_parse-7.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 91b513e47fb00b977bf2f0d11b8660812dc9d4840c0d105c70efb208caaca6d9
MD5 cf60c467fd60fc6f690304d36561423c
BLAKE2b-256 0fcde01c9b5e5c635f00d75617484071bf1e2a301ee2aad4350f74461726f5c6

See more details on using hashes here.

File details

Details for the file docling_parse-7.2.0-cp310-cp310-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for docling_parse-7.2.0-cp310-cp310-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 d72dc949f56eb7748fa0f76f4ef54341f47441600c8153c24071b20fcbd5efb8
MD5 138adaddca7cff0098158e6bb399cc6a
BLAKE2b-256 02e46988c825e1ef6f3103b7097bb17a70b343b00b5f80e8e397f15016206f7f

See more details on using hashes here.

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