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.21

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

Built distributions (wheels)

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

Total release size: 23.1 MB

Release files / objutils-0.10.21.tar.gz

Download URL objutils-0.10.21.tar.gz
Size 4.4 MB
Tags Source
SHA-256 checksum
How to use checksums
718f7b2b005ca29fdebeb7d5073231a955bff18b63df82362baecaa0c5852a32
BLAKE2b-256 checksum
How to use checksums
0c97745a3641134584ce4b37bfbd2cc3488d4e9a751407ee90ae7f511dc77ce1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.13

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 16, 2026.

Transparency log

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

Download URL objutils-0.10.21-cp314-cp314-win_arm64.whl
Size 1.0 MB
Tags CPython 3.14 Windows ARM64
SHA-256 checksum
How to use checksums
d2f669bdd7555e83c45c91b69b293ab7599569ab5e1bc3be4dd09cec226f20bc
BLAKE2b-256 checksum
How to use checksums
c572305528acea14d088efe277b5552ce07e38dda8b8098c777ed6f0b9714e07
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.13

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 16, 2026.

Transparency log

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

Download URL objutils-0.10.21-cp314-cp314-win_amd64.whl
Size 841.7 kB
Tags CPython 3.14 Windows x86-64
SHA-256 checksum
How to use checksums
650e74e41ff65730673710f68e5b84926a5284d90b960ba95bc5f82007b303f7
BLAKE2b-256 checksum
How to use checksums
2b59ac5d2e686f7090e9d330d5435f96ee600b2fade43546ca0d8e8bf217414d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.13

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 16, 2026.

Transparency log

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

Download URL objutils-0.10.21-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 643.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
cacd2cdeb9dad7be94c72cfbe8b958d85dbf7da09b024cb69b68c11e0548e034
BLAKE2b-256 checksum
How to use checksums
03cd9aabc3627c202220ec8f4f8daf1f4195bf3b074eff1f0ae01e90e2ec9932
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.13

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 16, 2026.

Transparency log

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

Download URL objutils-0.10.21-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Size 632.9 kB
Tags CPython 3.14 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
89b4d31acc9f4cbc4f82ebbdf3a042a0f0ee78b2c91478c37bbb11d304d98ae8
BLAKE2b-256 checksum
How to use checksums
c0b9ef4c94096d02b3b612f0c9f44ad6d0cd8fa1b82ef55c7dbeb5169ef5fbff
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.13

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 16, 2026.

Transparency log

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

Download URL objutils-0.10.21-cp314-cp314-macosx_11_0_arm64.whl
Size 625.4 kB
Tags CPython 3.14 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
77bcd54bd8b6fbad0f4defc032cda223e5659ab72c7dd364e5c5d6b7d3f15d8e
BLAKE2b-256 checksum
How to use checksums
f76d2dcf958d6069356b09153734280ff4301ddd1db01fafc492c1c6de0a3f70
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.13

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 16, 2026.

Transparency log

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

Download URL objutils-0.10.21-cp313-cp313-win_arm64.whl
Size 999.9 kB
Tags CPython 3.13 Windows ARM64
SHA-256 checksum
How to use checksums
98d2299790d9581753e32229e21613cfaacc9df548afef0a6e532f9d566a3a4c
BLAKE2b-256 checksum
How to use checksums
3d4eeb3f1245a077a30d0f64e4d8f7dbed52320daab036a1a32219709e8fda8f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.13

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 16, 2026.

Transparency log

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

Download URL objutils-0.10.21-cp313-cp313-win_amd64.whl
Size 831.9 kB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
d8a6df7be8c4ed5aa013bcc1ce966f999b4266f1c43962bceb3308e490667c69
BLAKE2b-256 checksum
How to use checksums
ee949828ac6b47c9667340793f488fedc444fd702adabc0a501058a0c53d7364
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.13

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 16, 2026.

Transparency log

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

Download URL objutils-0.10.21-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 643.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
eb232fba3e6ed614f15dd3fbc0aade929672cdee64446924ff72b39210eab19f
BLAKE2b-256 checksum
How to use checksums
b41866199b3225a9f2bc93c7a3db7020213d6c47c46f025ed65e35e69eb6453c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.13

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 16, 2026.

Transparency log

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

Download URL objutils-0.10.21-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Size 632.4 kB
Tags CPython 3.13 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
d9e9f6990375e79a89da938c73dc6713a4d90457f20ce6b388220645ea2c6778
BLAKE2b-256 checksum
How to use checksums
4502afeb48aac85742e14a33046e9cf6a9218fd76ee9d0e68a52b9365214ee2f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.13

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 16, 2026.

Transparency log

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

Download URL objutils-0.10.21-cp313-cp313-macosx_11_0_arm64.whl
Size 625.2 kB
Tags CPython 3.13 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
91c719f5da412c3e3bc273ca03759fc4cd87d3bf38833dfe567724e0d9169609
BLAKE2b-256 checksum
How to use checksums
d0de6ed310c346b07979f820efd4712aad9561d23d1e7af5fedefd5fb659806b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.13

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 16, 2026.

Transparency log

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

Download URL objutils-0.10.21-cp312-cp312-win_arm64.whl
Size 999.9 kB
Tags CPython 3.12 Windows ARM64
SHA-256 checksum
How to use checksums
5b99d2ef5eb70e7d514caa2afcf3a64db64c9d549d3a294fda0472679fb8dd40
BLAKE2b-256 checksum
How to use checksums
e290eedcafdf18b35c157a7598d3b02a77c2503e48912ef8973b2f43e6326a28
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.13

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 16, 2026.

Transparency log

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

Download URL objutils-0.10.21-cp312-cp312-win_amd64.whl
Size 831.9 kB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
769c22185e62b167c5a9a29772f611eec722c5c4ca367e930f086b7bd7356c18
BLAKE2b-256 checksum
How to use checksums
ea48202440245ece58af671ea718cf2189797a274b570462af8aeb1da6623604
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.13

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 16, 2026.

Transparency log

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

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

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 16, 2026.

Transparency log

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

Download URL objutils-0.10.21-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Size 632.4 kB
Tags CPython 3.12 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
3bcf3b06bcc0ccdd115940ea1ab8be808812aa7cd6a37980eef5a2f67283a8ea
BLAKE2b-256 checksum
How to use checksums
62ea7049d8f059ed14cd1e62fe861bacb04ddc6f0f4c538119d6e000b4f7ec3a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.13

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 16, 2026.

Transparency log

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

Download URL objutils-0.10.21-cp312-cp312-macosx_11_0_arm64.whl
Size 625.2 kB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
02fecf15e1cc5bd0afaf7f99341049b687d32adc91264faff1649842dae328c7
BLAKE2b-256 checksum
How to use checksums
27e6e297095adb8fa030aec06ce92a4275f01dd5235aef8c98b7f82f3468e61f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.13

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 16, 2026.

Transparency log

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

Download URL objutils-0.10.21-cp311-cp311-win_arm64.whl
Size 1.0 MB
Tags CPython 3.11 Windows ARM64
SHA-256 checksum
How to use checksums
e25b9da13a0c1289de4c92e448bb3e1b899ee55c403be45868627991e42937ad
BLAKE2b-256 checksum
How to use checksums
91abd6b7303ff1ec046083b9bd530cabf8c2b31194e67e0e713a0fc930023232
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.13

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 16, 2026.

Transparency log

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

Download URL objutils-0.10.21-cp311-cp311-win_amd64.whl
Size 830.6 kB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
7cad1c9014df1909824f30d4eb9767ece1915f5dc64026229e5012694a6374b2
BLAKE2b-256 checksum
How to use checksums
313b8ca3c4ccbcd6ccbc0b1b423262221c358fe778d7e3f40feff987589d8122
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.13

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 16, 2026.

Transparency log

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

Download URL objutils-0.10.21-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 642.2 kB
Tags CPython 3.11 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
c988504630bd8e61615c01c33439a565320a4afd1edf81a374ccbf47587dfaaa
BLAKE2b-256 checksum
How to use checksums
51fb14397a7b4b9ac8c44a92b6f02339e6267e0bf273dc46ad050c991a42b9ba
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.13

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 16, 2026.

Transparency log

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

Download URL objutils-0.10.21-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Size 632.3 kB
Tags CPython 3.11 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
0ce65e1a1f89a233c194b0918217bc2589590f947b650d7fa7395917a2d8dd3d
BLAKE2b-256 checksum
How to use checksums
1730885f66f5bc1a55f539c648ce5361475c9fe15bcb6c82a16434f0aec3d3e5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.13

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 16, 2026.

Transparency log

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

Download URL objutils-0.10.21-cp311-cp311-macosx_11_0_arm64.whl
Size 624.8 kB
Tags CPython 3.11 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
2466d556bba7eae52ec98e1f00dcbeb1c5ca51ba82a99a386e1ea90a7bfa4ad6
BLAKE2b-256 checksum
How to use checksums
791190c465da64cb4ff7c0d18c9c0cc9a3054a4526eb426d4c88739e93961b7f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.13

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 16, 2026.

Transparency log

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

Download URL objutils-0.10.21-cp310-cp310-win_arm64.whl
Size 999.7 kB
Tags CPython 3.10 Windows ARM64
SHA-256 checksum
How to use checksums
4109268a63c4935c8c6c45f13f9275fa173e80a3d942fa23231a8b3f66e6f7f3
BLAKE2b-256 checksum
How to use checksums
0a40bffe2372f84e3c0853bb933fb130adb14dafc77c0a0e6eb2631552858893
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.13

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 16, 2026.

Transparency log

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

Download URL objutils-0.10.21-cp310-cp310-win_amd64.whl
Size 829.2 kB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
1a690ab0e9af3504e89807f17c28fc8c0be1b5580cbda6be5911a79747449e72
BLAKE2b-256 checksum
How to use checksums
1beaaabdaba54e8811e4ef964653a4c2c54c057b6d284af751779b398d81b278
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.13

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 16, 2026.

Transparency log

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

Download URL objutils-0.10.21-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 641.3 kB
Tags CPython 3.10 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
a90f91cc492bc5b9fb44af6aa16bbd5f451f049bf6fa3c2c5af41bae5e2aae95
BLAKE2b-256 checksum
How to use checksums
75e226d5aa7041f5c256b50b141ec6adeb614f474f5fced0f228c355b3693a01
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.13

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 16, 2026.

Transparency log

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

Download URL objutils-0.10.21-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Size 631.4 kB
Tags CPython 3.10 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
1fae15302026577688eafc9e114033ae3d073336d79d0ae172d907a9aacfdc0b
BLAKE2b-256 checksum
How to use checksums
1c4a21b903afc869688dbb6900d601e3d1909afedcac2c7cba0bf48a33f21832
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.13

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 16, 2026.

Transparency log

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

Download URL objutils-0.10.21-cp310-cp310-macosx_11_0_arm64.whl
Size 623.4 kB
Tags CPython 3.10 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
a06d65c4fc4cc60356803d9409297796dda24e61956071e3e9ed56a6beb37f02
BLAKE2b-256 checksum
How to use checksums
08909310224fcd856966040257b4a44406d33254ac8e3e3bd7c9f93afb0c6909
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.13

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 16, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.10.21 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