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.

Release files for objutils 0.10.19

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.19
File Size Uploaded
objutils-0.10.19.tar.gz 4.4 MB Details

Built distributions (wheels)

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

Total release size: 20.1 MB

Release files / objutils-0.10.19.tar.gz

Download URL objutils-0.10.19.tar.gz
Size 4.4 MB
Tags Source
SHA-256 checksum
How to use checksums
e628ffd92f0a827c5a31e596a318015c1aa329accdb1b429da8cabb4ade774e2
BLAKE2b-256 checksum
How to use checksums
75a70ab932c93eaffa9febc29fb9909c38638bb3d81768ce062c491531b4cf2d
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 Sep 16, 2026.

Transparency log

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

Download URL objutils-0.10.19-cp314-cp314-win_arm64.whl
Size 624.7 kB
Tags CPython 3.14 Windows ARM64
SHA-256 checksum
How to use checksums
c1c8f7bef938dc897bcbf9bda6f7af4d6e0bb44d12db1b0ecb27b3d120447be8
BLAKE2b-256 checksum
How to use checksums
a761525d256b61a08190fc024b932a9c9e94202d9e7804216e7c83fef851d632
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 Sep 16, 2026.

Transparency log

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

Download URL objutils-0.10.19-cp314-cp314-win_amd64.whl
Size 640.9 kB
Tags CPython 3.14 Windows x86-64
SHA-256 checksum
How to use checksums
5689868778c3136b7ea6407ac4ce303b81e3e9e3b5ee17b605d4a62d06792fd5
BLAKE2b-256 checksum
How to use checksums
5747d485348b93c9857f7f72b5215358dfd82815a1615caad18ad88b6173a00e
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 Sep 16, 2026.

Transparency log

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

Download URL objutils-0.10.19-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 636.3 kB
Tags CPython 3.14 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
3f901409c825b113007a74cadcd454849d3551eaf274b789764c680639781d69
BLAKE2b-256 checksum
How to use checksums
4b103fb96dcf67f279811c5f3086f198f47c79ff6e9094f551663a1abd7807ef
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 Sep 16, 2026.

Transparency log

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

Download URL objutils-0.10.19-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Size 626.1 kB
Tags CPython 3.14 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
1c380b33ff2878aa04f02faafd049af91a04017f0850e27da427d6586f36f6fb
BLAKE2b-256 checksum
How to use checksums
49f78ce3f1fdf330e2961355eb1325ae86cc948bd7638acc3d590435808a1130
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 Sep 16, 2026.

Transparency log

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

Download URL objutils-0.10.19-cp314-cp314-macosx_11_0_arm64.whl
Size 619.2 kB
Tags CPython 3.14 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
81b3e29f389a361f2f3f13d6c3ffd8e4d584a500e8021d97f5b604ef6ff060c6
BLAKE2b-256 checksum
How to use checksums
72e700a801695b6fa7e70687df1647763d3d326b02b53b8f9e761cdfee8a81ef
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 Sep 16, 2026.

Transparency log

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

Download URL objutils-0.10.19-cp313-cp313-win_arm64.whl
Size 620.8 kB
Tags CPython 3.13 Windows ARM64
SHA-256 checksum
How to use checksums
004ab535a22e8b7742d592e66c1993c8baf6cd0a89d7881adbbf696ddcd927ca
BLAKE2b-256 checksum
How to use checksums
e9c5497d714626a487e925cafcf7155f06f6baee77a95515e1b0bbdee318362c
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 Sep 16, 2026.

Transparency log

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

Download URL objutils-0.10.19-cp313-cp313-win_amd64.whl
Size 637.9 kB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
bde0e3ad48c8fc18d9dfeaca643bf1e3ec973c8ce03e4a179b9a2d3e9ba84b8a
BLAKE2b-256 checksum
How to use checksums
732b0cb6f40c0e1a13a69d094b5b0cc6be875d3b5c5336bc9895a2ace76b59a4
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 Sep 16, 2026.

Transparency log

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

Download URL objutils-0.10.19-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 636.2 kB
Tags CPython 3.13 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
21cafa26eaffa5a85216e54bc7c5eaccd10fc244a17f13c3780c93a15793e682
BLAKE2b-256 checksum
How to use checksums
4c8832d701459430cd5592fcba0355ed9233c3379ca193a76d980f027905ed7e
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 Sep 16, 2026.

Transparency log

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

Download URL objutils-0.10.19-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Size 625.8 kB
Tags CPython 3.13 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
381e3b20693bb5d00c1d4cb6a1047607235c37fa979785caec3d12cf87e93814
BLAKE2b-256 checksum
How to use checksums
2a43b19be628d9a33ae8e459b63bf3ebf0f71bda1819e6f72f12b32ae3596b4e
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 Sep 16, 2026.

Transparency log

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

Download URL objutils-0.10.19-cp313-cp313-macosx_11_0_arm64.whl
Size 619.0 kB
Tags CPython 3.13 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
5a9453c7d6bc08a64c52243a1bf4afe3e077a1e9ca24981deab31fe90d405ef2
BLAKE2b-256 checksum
How to use checksums
0e1e9205a700ec36cec7c1c7d247bc83d75b72ef57bba7ab339a1b1d8df6b9aa
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 Sep 16, 2026.

Transparency log

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

Download URL objutils-0.10.19-cp312-cp312-win_arm64.whl
Size 620.8 kB
Tags CPython 3.12 Windows ARM64
SHA-256 checksum
How to use checksums
7159866f1a8616ee2f7d9945a189afc59783291d76422c144074acecc45ab89e
BLAKE2b-256 checksum
How to use checksums
b741289ae47030283cc5802e7fa84a010e264d1748f1ebf9f3bbf1fe16f55856
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 Sep 16, 2026.

Transparency log

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

Download URL objutils-0.10.19-cp312-cp312-win_amd64.whl
Size 637.8 kB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
858ae4007c6a6b5dae4fbf488f9e0e88c6c243fc11ab2c28cf36b43e6b28956c
BLAKE2b-256 checksum
How to use checksums
91f8eb4c4c8e7b4ae2ac303967e57388d9895f31bfad01637a6cf406cbb022f1
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 Sep 16, 2026.

Transparency log

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

Download URL objutils-0.10.19-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 636.3 kB
Tags CPython 3.12 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
96eb5a6421afd330c7c3e0d5d19e428c188355131ca0026661fde3cf52574354
BLAKE2b-256 checksum
How to use checksums
43aa56bf71120d073f4d8dd2c21d2c0a0515c28c3e8287e719cd5c0d628a5b71
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 Sep 16, 2026.

Transparency log

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

Download URL objutils-0.10.19-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Size 625.8 kB
Tags CPython 3.12 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
20e4f86cc4dd34a80305993f721bfc859f5305dc2e9fa124190e5bb5aa30bd52
BLAKE2b-256 checksum
How to use checksums
9db234ebe81fd67c2bbf0735c3297409135902aa147ceb1e821226c674eb20bf
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 Sep 16, 2026.

Transparency log

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

Download URL objutils-0.10.19-cp312-cp312-macosx_11_0_arm64.whl
Size 618.9 kB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
f6c1680317a220a16f1378f505ad12564ad60c67bb5db645778f3b09bf8e9691
BLAKE2b-256 checksum
How to use checksums
1beb831234bc8631b47688710a354d8a78f6b56d296f6433915f2b7ae7c71f97
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 Sep 16, 2026.

Transparency log

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

Download URL objutils-0.10.19-cp311-cp311-win_arm64.whl
Size 620.9 kB
Tags CPython 3.11 Windows ARM64
SHA-256 checksum
How to use checksums
94b0572350d2b4828333eded463baa95eab88062bd2203795124b485aa04aa38
BLAKE2b-256 checksum
How to use checksums
4aa1ee65c606e03cc018d96653425d7de06d97fe01711b0bb09320cf891f891c
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 Sep 16, 2026.

Transparency log

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

Download URL objutils-0.10.19-cp311-cp311-win_amd64.whl
Size 636.6 kB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
477c046baae94f8203170d8227ba416281e95188c391433fe2fd362d4fc4c256
BLAKE2b-256 checksum
How to use checksums
669b9cd6e265afe44945dc536814cad36d1ba2403a0d50efec6a49b4cc0dd44b
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 Sep 16, 2026.

Transparency log

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

Download URL objutils-0.10.19-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 635.7 kB
Tags CPython 3.11 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
0628872939736e5d856e3d46e580c2be7714bae01cf172d0b7dfee12aba19748
BLAKE2b-256 checksum
How to use checksums
cee16f9338324125cd7b2ea3ff2734541b900f8844777e719c14a78ca6c750f9
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 Sep 16, 2026.

Transparency log

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

Download URL objutils-0.10.19-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Size 626.3 kB
Tags CPython 3.11 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
1cb8baa232b4eedb4d571de69297c057eb6e61c024bb5d410d62fcb146f71d38
BLAKE2b-256 checksum
How to use checksums
10fb15c37563c8ee1ff50c282ca05bc9bff98309bdc5c5443441b714478adee8
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 Sep 16, 2026.

Transparency log

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

Download URL objutils-0.10.19-cp311-cp311-macosx_11_0_arm64.whl
Size 618.9 kB
Tags CPython 3.11 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
052313139fe9eb05ef41cb41174c16c33dd43a4c28ab2dba90919369de485fa3
BLAKE2b-256 checksum
How to use checksums
6f164b9ed11b652f66120798d20c70532a0c2394bcd3096f19357caad0daf893
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 Sep 16, 2026.

Transparency log

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

Download URL objutils-0.10.19-cp310-cp310-win_arm64.whl
Size 620.3 kB
Tags CPython 3.10 Windows ARM64
SHA-256 checksum
How to use checksums
af3582df80a78130565d96adb912eb81cdc80e06de663ea71c0340e0218f9f08
BLAKE2b-256 checksum
How to use checksums
5e0fd8f370d1f8ca1f0b665c7a523ed4d948b606c60b990f6dea404146e37848
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 Sep 16, 2026.

Transparency log

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

Download URL objutils-0.10.19-cp310-cp310-win_amd64.whl
Size 635.3 kB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
9f6b1f96a2fe7522cfa3cdc48f6f55e9850ac7b35e6c392acd36c247299ce9bc
BLAKE2b-256 checksum
How to use checksums
6bc920ef162fccf56a106fc2ccc9b5553572e03effa2c1e07f57da5a1c23f5b9
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 Sep 16, 2026.

Transparency log

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

Download URL objutils-0.10.19-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 634.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
5391b5c17fdebf8849b8935dbd355a680a15703876475f1a3f901f0996f278f0
BLAKE2b-256 checksum
How to use checksums
5f6fde6c545bc7a51b685fb548c1ac6b74ee9d2275a4dacc21d23d7fd2855c37
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 Sep 16, 2026.

Transparency log

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

Download URL objutils-0.10.19-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Size 625.2 kB
Tags CPython 3.10 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
ba1503a6d02b302e595f0a9d0032ae4526f00698a345aa4da335daa03fc5d10c
BLAKE2b-256 checksum
How to use checksums
b9adf4dead6a2f9fdbd44efe87224d60bb2f42f53bb839947eb4872923bc25c2
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 Sep 16, 2026.

Transparency log

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

Download URL objutils-0.10.19-cp310-cp310-macosx_11_0_arm64.whl
Size 617.2 kB
Tags CPython 3.10 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
8ef683332387d1494e70df0401029cd04fc263057f8175525bcc798c4e10d03e
BLAKE2b-256 checksum
How to use checksums
8ad3634bb409f27da64c7ed47c7e5c2c6696e1e365f162f64a82eacb4a840db7
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 Sep 16, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.10.19 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