Skip to main content

Readme

https://github.com/christoph2/objutils/raw/master/docs/objutils_banner.png

PyPI Python Versions License: GPLv2 Code style: black Ask DeepWiki PDF Manual

Binary data stored in hex-files is in widespread use especially in embedded systems applications. objutils gives you programmatic access to a wide array of formats and offers a practical API to work with such data.

Get the latest version from Github

Installation

pip install objutils

For development (editable install):

pip install -e .

Or with Poetry:

poetry install

Prerequisites

  • Python >= 3.9

Features

  • Read ELF files (including symbols) and extract loadable sections.

  • Inspect PE/COFF files and symbols (optional PDB support).

  • Merge multiple HEX files into one (oj-hex-merge).

  • Split HEX files into separate sections (oj-hex-split).

  • Typed access (scalars, arrays, strings) to binary data.

Recent improvements

  • ElfParser now supports in_memory=True: use a transient :memory: SQLite database instead of persisting a .prgdb file – ideal for read-only analysis, CI pipelines and unit tests.

  • New oj-hex-merge and oj-hex-split CLI tools for combining and partitioning HEX files.

  • New oj-dwarf-import CLI replaces dwarfer.py/cu_info.py for DWARF imports, CU listing, summaries, and attribute traversal.

  • Faster DWARF imports: batched ORM writes, quiet flag propagation, and safe DWARF expression evaluation keep large ELF files stable.

  • Exception handling and typing tightened across DWARF/ELF/PECOFF modules and public APIs to surface real errors without masking them.

  • ElfParser.close() releases SQLite/mmap handles; examples/tests now close parsers to avoid database locks.

  • S-Record metadata stays minimal and numeric (no data records mixed in); Mostec/Tek SREC roundtrips now reproduce expected files.

  • Fortran-ordered ndarray reads/writes honor legacy column-major expectations; hexdump empty rows keep canonical spacing.

Supported HEX formats

objutils supports a bunch of HEX formats…

Current

  • codec / format name

  • ihex (Intel HEX)

  • shf (S Hexdump (rfc4194))

  • srec (Motorola S-Records)

  • titxt (Texas Instruments Text)

Historical

  • codec / format name

  • ash (ASCII Space Hex)

  • cosmac (RCA Cosmac)

  • emon52 (Elektor EMON52)

  • etek (Tektronix Extended Hexadecimal)

  • fpc (Four Packed Code)

  • mostec (MOS Technology)

  • rca (RCA)

  • sig (Signetics)

  • tek (Tektronix Hexadecimal)

codec is the first parameter to dump() / load() functions, e.g.:

img = objutils.load("ihex", "myHexFile.hex")     # Load an Intel HEX file...
objutils.dump("srec", "mySRecFile.srec", img)    # and save it as S-Records.

First steps

If you are interested, what objutils provides to you out-of-the-box, refer to Scripts documentation.

In any case, you should work through the following tutorial:

First import all classes and functions used in this tutorial.

from objutils import Image, Section, dump, dumps, load, loads

Everything starts with hello world…

sec0 = Section(start_address = 0x1000, data = "Hello HEX world!")

The constructor parameters to Section reflect what they are about: A continuous area of memory with an start address.

data is not necessarily a string, array.array**s, **byte, bytearray will also do, or from an internal point of view: everything that is convertible to bytearray could be used.

Note: start_address and data are positional arguments, so there is no need to use them as keywords (just for the sake of illustration).

Now let’s inspect our section.

sec0.hexdump()

00001000  48 65 6c 6c 6f 20 48 45 58 20 77 6f 72 6c 64 21  |Hello HEX world!|
---------------
       16 bytes
---------------

hexdump() gives us, what in the world of hackers is known as a canonical hexdump.

HEX files usually consist of more than one section, so let’s create another one.

sec1 = Section(0x2000, range(1, 17))
sec1.hexdump()

00002000  01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10  |................|
---------------
       16 bytes
---------------

Now, let’s glue together our sections.

img0 = Image([sec0, sec1])
print(img0)

Section(address = 0X00001000, length = 16, data = b'Hello HEX world!')
Section(address = 0X00002000, length = 16, data = b'\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10')

Images are obviously a container for sections, and they are always involved if you are interacting with disk based HEX files.

dump("srec", "example0.srec", img0)

The resulting file could be inspected from command line.

$ cat example0.srec
S113100048656C6C6F2048455820776F726C64217A
S11320000102030405060708090A0B0C0D0E0F1044

And loaded again…

img1 = load("srec", "example0.srec")
print(img1)

Section(address = 0X00001000, length = 16, data = b'Hello HEX world!')
Section(address = 0X00002000, length = 16, data = b'\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10')

Or split it into its sections…

images = img1.split()
for i, img in enumerate(images):
    dump("srec", f"part_{i}.srec", img)

This leads to the conversion idiom.

img1 = load("srec", "example0.srec")
dump("ihex", "example0.hex", img1)

Note: the formats above listed as historical are for one good reason historical: they are only 16bit wide, so if you want to convert, say a srec file for a 32bit MCU to them, you’re out of luck.

OK, we’re starting another session.

sec0 = Section(0x100, range(1, 9))
sec1 = Section(0x108, range(9, 17))
img0 = Image([sec0, sec1])
print(img0)

Section(address = 0X00000100, length = 16, data = b'\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10')

img0.hexdump()

Section #0000
-------------
00000100  01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10  |................|
---------------
       16 bytes
---------------

Two sections with consecutive address ranges concatenated to one, this may or may not what you are expected.

For this reason Image has a join parameter.

sec0 = Section(0x100, range(1, 9))
sec1 = Section(0x108, range(9, 17))
img0 = Image([sec0, sec1], join = False)
print(img0)

Section(address = 0X00000100, length = 8, data = b'\x01\x02\x03\x04\x05\x06\x07\x08')
Section(address = 0X00000108, length = 8, data = b'\t\n\x0b\x0c\r\x0e\x0f\x10')

img0.hexdump()

Section #0000
-------------
00000100  01 02 03 04 05 06 07 08                          |........        |
---------------
        8 bytes
---------------

Section #0001
-------------
00000108  09 0a 0b 0c 0d 0e 0f 10                          |........        |
---------------
        8 bytes
---------------

One feature that sets objutils apart from other libraries of this breed is typified access.

We are starting with a new image.

img0 = Image([Section(0x1000, bytes(64))])
print(img0)

Section(address = 0X00001000, length = 64, data = b'\x00\x00\x00\x00\x00\x00\x00...00\x00\x00\x00\x00\x00\x00\x00')

We are now writing a string to our image.

img0 = Image([Section(0x1000, bytes(64))])
img0.write(0x1010, [0xff])
img0.hexdump()

Section #0000
-------------
00001000  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
00001010  ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
00001020  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
00001030  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|

img0.write_string(0x1000, "Hello HEX world!")
img0.hexdump()

Section #0000
-------------
00001000  48 65 6c 6c 6f 20 48 45 58 20 77 6f 72 6c 64 21  |Hello HEX world!|
00001010  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
          *
00001030  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
---------------
       64 bytes
---------------

Notice the difference? In our Section example above, the string passed as a data parameter was just a bunch of bytes, but now it is a “real” C-string (there is a opposite function, read_string, that scans for a terminating NULL character).

Use write() and read() functions, if you want to access plain bytes.

But there is also support for numerical types.

img0 = Image([Section(0x1000, bytes(64))])
img0.write_numeric(0x1000, 0x10203040, "uint32_be")
img0.write_numeric(0x1004, 0x50607080, "uint32_le")
img0.hexdump()

Section #0000
-------------
00001000  10 20 30 40 80 70 60 50 00 00 00 00 00 00 00 00  |. 0@.p`P........|
00001010  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
          *
00001030  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
---------------
       64 bytes
---------------

The folling types are supported:

  • uint8

  • int8

  • uint16

  • int16

  • uint32

  • int32

  • uint64

  • int64

  • float32

  • float64

In any case, endianess suffixes _be or _le are required.

For ASAM workflows there are dedicated helpers with explicit byte-order names:

img0 = Image([Section(0x1000, bytes(64))])
img0.write_asam_numeric(0x1000, 0x11223344, "ULONG", "MSB_FIRST")
img0.write_asam_numeric(0x1004, 0x11223344, "ULONG", "MSB_FIRST_MSW_LAST")
img0.write_asam_numeric(0x1008, 0x11223344, "ULONG", "MSB_LAST_MSW_FIRST")

print(hex(img0.read_asam_numeric(0x1000, "ULONG", "MSB_FIRST")))
print(hex(img0.read_asam_numeric(0x1004, "ULONG", "MSB_FIRST_MSW_LAST")))
print(hex(img0.read_asam_numeric(0x1008, "ULONG", "MSB_LAST_MSW_FIRST")))

# All reads print 0x11223344 again.

Supported ASAM byte orders:

  • MSB_FIRST

  • MSB_LAST

  • MSB_FIRST_MSW_LAST (word-swap)

  • MSB_LAST_MSW_FIRST (word-swap)

  • LITTLE_ENDIAN (legacy alias for MSB_LAST)

  • BIG_ENDIAN (legacy alias for MSB_FIRST)

Supported ASAM numeric datatypes:

  • UBYTE, SBYTE

  • UWORD, SWORD

  • ULONG, SLONG

  • A_UINT64, A_INT64

  • FLOAT16_IEEE, FLOAT32_IEEE, FLOAT64_IEEE

ASAM string helpers are available, too:

img0.write_asam_string(0x1020, "MOTOR", "ASCII")
img0.write_asam_string(0x1030, "Drehzahl", "UTF8")

print(img0.read_asam_string(0x1020, "ASCII"))
print(img0.read_asam_string(0x1030, "UTF8"))

Supported ASAM string datatypes:

  • ASCII

  • UTF8

  • UTF16

  • UTF32

Arrays are also supported.

img0 = Image([Section(0x1000, bytes(64))])
img0.write_numeric_array(0x1000, [0x1000, 0x2000, 0x3000, 0x4000, 0x5000, 0x6000, 0x7000, 0x8000], "uint16_le")
img0.hexdump()

Section #0000
-------------
00001000  00 10 00 20 00 30 00 40 00 50 00 60 00 70 00 80  |... .0.@.P.`.p..|
00001010  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
          *
00001030  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
---------------
       64 bytes
---------------

This concludes our tutorial for now, but there is more stuff to follow…

Documentation

For full documentation, including installation, tutorials and PDF documents, please see Readthedocs

Bugs/Requests

Please use the GitHub issue tracker to submit bugs or request features

References

Here is an overview of some of the classic hex-file formats.

Authors

License

This project is licensed under the GNU General Public License v2.0

Contribution

If you contribute code to this project, you are implicitly allowing your code to be distributed under the GNU General Public License v2.0. You are also implicitly verifying that all code is your original work.

Metadata

Release files for objutils 0.10.20

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for objutils 0.10.20
File Size Uploaded
objutils-0.10.20.tar.gz 4.4 MB Details

Built distributions (wheels)

Table of built distributions (wheels) for objutils 0.10.20
File
objutils-0.10.20-cp314-cp314-win_arm64.whl CPython 3.14 CPython 3.14 Windows ARM64 Details
objutils-0.10.20-cp314-cp314-win_amd64.whl CPython 3.14 CPython 3.14 Windows x86-64 Details
objutils-0.10.20-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
objutils-0.10.20-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl CPython 3.14 CPython 3.14 Linux glibc 2.26+ ARM64, Linux glibc 2.28+ ARM64 Details
objutils-0.10.20-cp314-cp314-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 macOS 11.0+ ARM64 Details
objutils-0.10.20-cp313-cp313-win_arm64.whl CPython 3.13 CPython 3.13 Windows ARM64 Details
objutils-0.10.20-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details
objutils-0.10.20-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details
objutils-0.10.20-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ ARM64, Linux glibc 2.26+ ARM64 Details
objutils-0.10.20-cp313-cp313-macosx_11_0_arm64.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64 Details
objutils-0.10.20-cp312-cp312-win_arm64.whl CPython 3.12 CPython 3.12 Windows ARM64 Details
objutils-0.10.20-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
objutils-0.10.20-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
objutils-0.10.20-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl CPython 3.12 CPython 3.12 Linux glibc 2.26+ ARM64, Linux glibc 2.28+ ARM64 Details
objutils-0.10.20-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details
objutils-0.10.20-cp311-cp311-win_arm64.whl CPython 3.11 CPython 3.11 Windows ARM64 Details
objutils-0.10.20-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details
objutils-0.10.20-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
objutils-0.10.20-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl CPython 3.11 CPython 3.11 Linux glibc 2.26+ ARM64, Linux glibc 2.28+ ARM64 Details
objutils-0.10.20-cp311-cp311-macosx_11_0_arm64.whl CPython 3.11 CPython 3.11 macOS 11.0+ ARM64 Details
objutils-0.10.20-cp310-cp310-win_arm64.whl CPython 3.10 CPython 3.10 Windows ARM64 Details
objutils-0.10.20-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details
objutils-0.10.20-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details
objutils-0.10.20-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl CPython 3.10 CPython 3.10 Linux glibc 2.26+ ARM64, Linux glibc 2.28+ ARM64 Details
objutils-0.10.20-cp310-cp310-macosx_11_0_arm64.whl CPython 3.10 CPython 3.10 macOS 11.0+ ARM64 Details

Total release size: 20.3 MB

Release files / objutils-0.10.20.tar.gz

Download URL objutils-0.10.20.tar.gz
Size 4.4 MB
Tags Source
SHA-256 checksum
How to use checksums
b015f1c31bf2a6178885b955e975ba5c0caddbb6276076407e3933f7aa9dc03d
BLAKE2b-256 checksum
How to use checksums
90a7db1f906ab79644cec34d5296e85ec51c611d0149852a26f258daec312bf7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.

Transparency log

Release files / objutils-0.10.20-cp314-cp314-win_arm64.whl

Download URL objutils-0.10.20-cp314-cp314-win_arm64.whl
Size 644.0 kB
Tags CPython 3.14 Windows ARM64
SHA-256 checksum
How to use checksums
ecb63e660fe0b7a62c79029b5de501a0737f1ee910cbff54bf8f051482e852b8
BLAKE2b-256 checksum
How to use checksums
8f76cec23a720f6669d337d6b6b9d4c375c001b0e1f12fe8a94a30cb064a9a94
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.

Transparency log

Release files / objutils-0.10.20-cp314-cp314-win_amd64.whl

Download URL objutils-0.10.20-cp314-cp314-win_amd64.whl
Size 646.6 kB
Tags CPython 3.14 Windows x86-64
SHA-256 checksum
How to use checksums
99c39b5cb71a2f954a2c2d6e818adaf855438cd4c9e1f3afc07b38c06ebe9213
BLAKE2b-256 checksum
How to use checksums
4300331dd5030611a2171bbf4f42293ae2c6ed600de98714d1307b5ef8dfb03f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.

Transparency log

Release files / objutils-0.10.20-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL objutils-0.10.20-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 642.4 kB
Tags CPython 3.14 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
3b52fbd7ac26f8405b42a88013f574cc0f325c09175fdc4e51ce6fb558f4d7ba
BLAKE2b-256 checksum
How to use checksums
cc9343778439d3d8c57ae855504fb06f6a6f05a65358e3db1c5bf7c45973a664
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.

Transparency log

Release files / objutils-0.10.20-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl

Download URL objutils-0.10.20-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Size 632.1 kB
Tags CPython 3.14 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
cd8165156bf3be5eb55e6fa505cd9147bda2b2cd266477f59ca2360c9c01f7e0
BLAKE2b-256 checksum
How to use checksums
19486a78db13e8e6b139368a130c06e6974b22e22fe9fdc7e6fc2042e7e88150
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.

Transparency log

Release files / objutils-0.10.20-cp314-cp314-macosx_11_0_arm64.whl

Download URL objutils-0.10.20-cp314-cp314-macosx_11_0_arm64.whl
Size 624.5 kB
Tags CPython 3.14 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
e19751d77752c039b357bb50b5059c3994f80373608c8a17b5b9c492980c2f47
BLAKE2b-256 checksum
How to use checksums
094225d8667d13257d99ca001724e164634f5420ee6d8beb10f6bcd781234ae9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.

Transparency log

Release files / objutils-0.10.20-cp313-cp313-win_arm64.whl

Download URL objutils-0.10.20-cp313-cp313-win_arm64.whl
Size 640.0 kB
Tags CPython 3.13 Windows ARM64
SHA-256 checksum
How to use checksums
77d2ca19f4c79ca71179318dcd8818881511e888e5b24528df1ff3cb7a12ba05
BLAKE2b-256 checksum
How to use checksums
d83d5203194e1e9b967052bf168ab2ed87a7cc7d8717f5973eaa006caf5aaf35
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.

Transparency log

Release files / objutils-0.10.20-cp313-cp313-win_amd64.whl

Download URL objutils-0.10.20-cp313-cp313-win_amd64.whl
Size 643.5 kB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
71f78a7f20a3671e0b440c48f726c0a1c0767333a02641c575d30b7b5a810fe1
BLAKE2b-256 checksum
How to use checksums
b9d0dd6e0a49e32b7a2e6497b542a82a5b5351b51b892ee60c071bdbe0072dd6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.

Transparency log

Release files / objutils-0.10.20-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL objutils-0.10.20-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 642.4 kB
Tags CPython 3.13 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
026ce929a131b9a8e300a7b2c81ac2c30fc60499cb630558c3f389d194eca74c
BLAKE2b-256 checksum
How to use checksums
162179e4de8446537646c1e195afa2bb8f08090cd0f30afdfa1f348f1bdb3806
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.

Transparency log

Release files / objutils-0.10.20-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl

Download URL objutils-0.10.20-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Size 631.6 kB
Tags CPython 3.13 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
769eff296ce5e90c852345a690e0cc796b6cfcc42b47fdc7d3f610a6f9aa4ad2
BLAKE2b-256 checksum
How to use checksums
ce801d74a10ea4a2f43a482b370c9345cfbe8a52ca99c484cbe79ed6c8f5c668
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.

Transparency log

Release files / objutils-0.10.20-cp313-cp313-macosx_11_0_arm64.whl

Download URL objutils-0.10.20-cp313-cp313-macosx_11_0_arm64.whl
Size 624.4 kB
Tags CPython 3.13 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
6825483f2afb154fc51571929719f0cb58ad05f8d34f9069b2dfbdc465b72c8e
BLAKE2b-256 checksum
How to use checksums
1f5f72c5538a4c52f5bfd4fe70db651f398dd5c4417bdde037ffe7700fa1ef4f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.

Transparency log

Release files / objutils-0.10.20-cp312-cp312-win_arm64.whl

Download URL objutils-0.10.20-cp312-cp312-win_arm64.whl
Size 640.0 kB
Tags CPython 3.12 Windows ARM64
SHA-256 checksum
How to use checksums
18cd57e1980641a13d5e96a645c3b1952d3ad6b9f7bf6b9a2964adbf36df3743
BLAKE2b-256 checksum
How to use checksums
21c4c5d27efac063785d089586411ff307ce493a7e18e1aff306f5038abcb2c2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.

Transparency log

Release files / objutils-0.10.20-cp312-cp312-win_amd64.whl

Download URL objutils-0.10.20-cp312-cp312-win_amd64.whl
Size 643.4 kB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
7a1c40bee0d756ec2c33335fcaea5ac90d73a871623524acbe5f587bb482639e
BLAKE2b-256 checksum
How to use checksums
9eeade266429d0b3c0f8ab930f8985fd35512e21ce1a860bc78042821303aaf2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.

Transparency log

Release files / objutils-0.10.20-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL objutils-0.10.20-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 642.4 kB
Tags CPython 3.12 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
64d0a89a60d1eaa1232c1893e52074e52aae452c2131bb63493d02525ba4640b
BLAKE2b-256 checksum
How to use checksums
f6927a4b2a93d59bdebde1af7bb89b11bd498b6c7be339809a0985c6fb4d4ec2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.

Transparency log

Release files / objutils-0.10.20-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl

Download URL objutils-0.10.20-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Size 631.6 kB
Tags CPython 3.12 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
fea7e1918fac8203621f6c9c6be6c1333f0bc5afe89702f9021cac34825fb611
BLAKE2b-256 checksum
How to use checksums
c4148f90534bd2bfa884e3917400211b442fe54a01a12a7c0d7077206966842f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.

Transparency log

Release files / objutils-0.10.20-cp312-cp312-macosx_11_0_arm64.whl

Download URL objutils-0.10.20-cp312-cp312-macosx_11_0_arm64.whl
Size 624.4 kB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
022ef8723934429915680ab96487ae1b07a7877bb195b30c29845c5595b497b8
BLAKE2b-256 checksum
How to use checksums
23ef90c082cf1328a4cc639560589906b1841cfeb469610c124e623d5369bcbf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.

Transparency log

Release files / objutils-0.10.20-cp311-cp311-win_arm64.whl

Download URL objutils-0.10.20-cp311-cp311-win_arm64.whl
Size 640.2 kB
Tags CPython 3.11 Windows ARM64
SHA-256 checksum
How to use checksums
24f1a1897a6c37ddd0a3d8a1a3f5f1ef60d09cfed2d5d72f6f2ccb45764c84c2
BLAKE2b-256 checksum
How to use checksums
442bc9ec481a53350fd1f34357d4ec3722318198be56a914bf000c4d77dad4c6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.

Transparency log

Release files / objutils-0.10.20-cp311-cp311-win_amd64.whl

Download URL objutils-0.10.20-cp311-cp311-win_amd64.whl
Size 642.2 kB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
00aee8581389be81f61a9624e3f84adf57012ff72d850939d7631a84c28dc202
BLAKE2b-256 checksum
How to use checksums
12cb7689452f30afd402e46e9fc00ef31a150c474970e33ffbc48c32ef07c695
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.

Transparency log

Release files / objutils-0.10.20-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL objutils-0.10.20-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 641.4 kB
Tags CPython 3.11 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
68e5d7790b2315f3c1f44e8ecfad76d981f721312df122497ab89153de1dc7fd
BLAKE2b-256 checksum
How to use checksums
b50c56c79fb5dd761c8f97a3145c050cffba2529313702592e19734621624ddc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.

Transparency log

Release files / objutils-0.10.20-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl

Download URL objutils-0.10.20-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Size 631.4 kB
Tags CPython 3.11 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
0ad3b2631df10a2afd3fed17067146ef411e1bbbc853c0d501c408582985e443
BLAKE2b-256 checksum
How to use checksums
21ee398f3248c0737af8be657976580e8102c8c6ee4237a1377e7782f645ba10
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.

Transparency log

Release files / objutils-0.10.20-cp311-cp311-macosx_11_0_arm64.whl

Download URL objutils-0.10.20-cp311-cp311-macosx_11_0_arm64.whl
Size 624.0 kB
Tags CPython 3.11 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
855040721a23be537b4e4cd26192bfc5392232f92855b617af1de0e5ccf3ec08
BLAKE2b-256 checksum
How to use checksums
6f1d893e07b90a2aed7c0b887931eef4954595c45200bc99b12e933d8228e68d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.

Transparency log

Release files / objutils-0.10.20-cp310-cp310-win_arm64.whl

Download URL objutils-0.10.20-cp310-cp310-win_arm64.whl
Size 639.7 kB
Tags CPython 3.10 Windows ARM64
SHA-256 checksum
How to use checksums
014cf22a1e0688d899408247f003df83ff605ff4be8d01ea94058135997e37ac
BLAKE2b-256 checksum
How to use checksums
189e6d7689c4dc4d6942f34920d31ee4ac53f321308392980447874dc70e896e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.

Transparency log

Release files / objutils-0.10.20-cp310-cp310-win_amd64.whl

Download URL objutils-0.10.20-cp310-cp310-win_amd64.whl
Size 640.8 kB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
f629a2c607b0dfb581461e2291fb11027641736337a85a56f81d22b8b4299a98
BLAKE2b-256 checksum
How to use checksums
84216926661722f6cae622ee416ad1b785957421c1a74c870d37e2992c9412da
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.

Transparency log

Release files / objutils-0.10.20-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL objutils-0.10.20-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 640.4 kB
Tags CPython 3.10 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
2767ae9c5db1a864cab3031a297358a393c1406c9458b0e102da747ffd5c31f2
BLAKE2b-256 checksum
How to use checksums
27cf5ac6618359e91e8a9482a29f1fe9bac3ca01f778578f84fce219bbf17b7d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.

Transparency log

Release files / objutils-0.10.20-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl

Download URL objutils-0.10.20-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Size 630.5 kB
Tags CPython 3.10 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
895b0d274d9f16aca15da46448d1aee1832d525a377b3a27cde5bada6bda7f02
BLAKE2b-256 checksum
How to use checksums
69b35d17d78f467e972f3d0d58190cf940187c7bddfca97f28bbf1bc807a4c70
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.

Transparency log

Release files / objutils-0.10.20-cp310-cp310-macosx_11_0_arm64.whl

Download URL objutils-0.10.20-cp310-cp310-macosx_11_0_arm64.whl
Size 622.6 kB
Tags CPython 3.10 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
34f338777ea9f149ea1d47a98413e05c69fd961833503f2be2e2808926063e79
BLAKE2b-256 checksum
How to use checksums
87b69b3cb2d5959e13fc9fd1ff6dd27e75ea5b7061ba7d6650c952b75940f9bb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.10.20 This release

26 release files

0.9.1

26 release files

0.9.0

26 release files

0.8.10

1 release file

0.8.9

1 release file

0.8.8

1 release file

0.8.7

1 release file

0.8.0

1 release file

0.7.3

1 release file

0.7.2

1 release file

0.7.1

1 release file

0.7.0

1 release file

0.6.4

1 release file

0.6.3

6 release files

0.6.2

1 release file

0.6.1

1 release file

0.6.0

1 release file

0.4.12

2 release files

0.4.8

2 release files

0.4.7

2 release files

0.4.2

1 release file

0.4.1

1 release file

0.4.0

1 release file

0.2.2

1 release file

0.2.1

1 release file

0.1.1

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page