Skip to main content

isojson

Fast JSON for CPython that works in per-interpreter-GIL sub-interpreters.

isojson is a Rust extension with an orjson-compatible API (dumps, loads, the same OPT_* flags, and byte-identical output for the types it supports). The difference is that it loads and runs in own-GIL sub-interpreters (PEP 684) with no compatibility override. orjson does not:

>>> from concurrent import interpreters
>>> interpreters.create().exec("import orjson")
ImportError: module orjson.orjson does not support loading in subinterpreters

>>> interpreters.create().exec("import isojson")   # works, strict mode, no override
pip install isojson

Wheels are published for CPython 3.12, 3.13 and 3.14 on Linux (x86_64, aarch64), macOS (arm64, x86_64) and Windows (x86_64).

import isojson

isojson.dumps({"a": [1, 2.5, None]})          # b'{"a":[1,2.5,null]}'
isojson.loads(b'{"a":[1,2.5,null]}')           # {'a': [1, 2.5, None]}
isojson.dumps(obj, default=str, option=isojson.OPT_SORT_KEYS | isojson.OPT_INDENT_2)

Switching from orjson is usually a one-line change: import isojson as orjson. Check the differences first.


Pure Rust, and no worrying about threads or sub-interpreters

isojson is pure Rust. There is no C or C++ source anywhere in the dependency tree, and the build never runs a C compiler. The only native library it links is libpython itself. The runtime dependencies are pyo3-ffi (declarations of the CPython C API, no code), simd-json (with value-trait, halfbrown and simdutf8), zmij and itoa. The SIMD code (SSE2 on x86_64, NEON on aarch64) uses Rust's core::arch intrinsics.

Things you do not have to do with isojson:

  • set _override_multi_interp_extensions_check or any other escape hatch;
  • ship or load a physical copy of the extension per worker;
  • import it in the main interpreter first, or in any particular order;
  • keep calls on one thread, or add locks around them.

Import it in as many own-GIL sub-interpreters as you like, in strict mode, and call it from any thread.

Why that is safe: the only state shared across interpreters or threads is plain data, never a Python object:

shared state what it is
per-thread scratch buffers bytes only (thread_local!)
simd-json's CPU-feature detection an atomic set once per process
the str fast-path switch an atomic, set by an import-time self-check that gives the same result in every interpreter

Every Python object isojson keeps longer than one call lives in per-interpreter module state. That is the JSONDecodeError type and the dict-key cache. CPython creates it for each interpreter and frees it with that interpreter.

How this is tested: strict import in 6 own-GIL sub-interpreters, with no override; 4 and 8 sub-interpreters running concurrently; 8 threads in one interpreter; threads and sub-interpreters running together; 200 create/use/destroy cycles. The whole suite also passes under PYTHONMALLOC=debug, on macOS (arm64) and Linux (x86_64). Every concurrent worker checks its own seeded data against its own expected answer, so a leak between threads or interpreters shows up as a wrong result, not just as a crash that may or may not happen.

Free-threaded CPython (3.13t / 3.14t): isojson works there, but it is not free-threading-ready yet. The module declares that it needs the GIL, so CPython re-enables the GIL when it is imported and prints a RuntimeWarning. We checked this on 3.14t. The str fast path is also off on those builds.


Why this exists

Python 3.12 added a separate GIL per sub-interpreter, and Python 3.14 made it usable from Python (concurrent.interpreters). N sub-interpreters in one process can run Python code on N cores, which lets a single process scale across cores without multiprocessing.

For that to work, every C extension a sub-interpreter imports has to be safe there. In practice this means:

  1. multi-phase initialization (PEP 489), so each interpreter gets its own module object;
  2. no Python objects stored in process-global state, since an object belongs to exactly one interpreter and touching it from another corrupts reference counts and allocator arenas;
  3. declaring Py_MOD_PER_INTERPRETER_GIL_SUPPORTED, which is only honest once 1 and 2 hold.

orjson is the fastest JSON library for CPython, but it does not meet these requirements and refuses to import in a sub-interpreter. That left people running sub-interpreters two options:

  • stdlib json: safe, but 2.7–13× slower than orjson depending on the payload (see the tables below);
  • a physical copy of orjson's shared library per worker, loaded under an override. This works, but you pay one copy's memory, disk, and load time per worker, plus a separate mechanism to maintain.

isojson is a JSON library written from the start to meet all three requirements.

How it works

  • Multi-phase init with per-interpreter state. The module declares Py_MOD_PER_INTERPRETER_GIL_SUPPORTED, which is honest only because nothing process-global holds a Python object (see above). The only process-global pointers isojson touches are CPython's static builtin types and the immortal singletons None/True/False, which every interpreter shares by design.
  • The key cache is per interpreter. Like orjson, loads caches recently seen dict keys, so repeated keys reuse one str with its hash already computed. orjson keeps that cache process-wide. isojson keeps one per interpreter, because a shared cache would hand one interpreter's objects to another.
  • dumps borrows and doesn't keep. It only borrows objects for the length of the call, on the calling thread, under the caller's GIL. When a default= callback could run arbitrary Python code and mutate a container, items are also held by a reference for that span. Output is written straight into the result bytes object, so there is no final copy. String escaping scans 16 bytes at a time: SSE2 on x86_64 and NEON on aarch64, both part of those architectures' baseline, so no runtime detection is needed.
  • str contents are read from the object header, after a self-check. Where CPython 3.12–3.14 already holds a string's UTF-8 (compact ASCII, or a cached UTF-8 copy), isojson reads it directly instead of calling PyUnicode_AsUTF8AndSize. That layout is not public API. So at import, isojson compares its reading with the API on probe strings and turns the fast path on only if every probe agrees. If a future CPython changes the layout, isojson gets slower but never wrong.
  • loads parses with simd-json and uses no recursion. simd-json turns the document into a flat tape where every array and object carries its length. isojson builds Python objects from the tape with an explicit stack, so lists are created at their exact size. A document nested 1024 deep is safe even on threads with small C stacks; deeper documents are rejected, as in orjson. simd-json never touches a Python object.
  • Exceptions belong to the interpreter. isojson.JSONDecodeError subclasses the calling interpreter's own json.JSONDecodeError. Its messages are plain sentences, never the parser's internal error names.
  • No PyO3. The module is written against the raw C API (pyo3-ffi). PyO3's high-level layer caches type objects and modules in process-global statics and rejects a second interpreter, which is exactly what this package exists to avoid.

Why simd-json, not sonic-rs

Both are fast, pure-Rust JSON parsers. We compared them directly on JSONTestSuite (318 cases, each run in its own child process so a crash is recorded), on edge cases that matter for a Python library, and on raw parse speed:

simd-json 0.18.1 sonic-rs 0.5.10
JSONTestSuite: must-accept rejected / must-reject accepted 0 / 0 0 / 0
JSONTestSuite: crashes 0 2 (stack overflow: n_structure_100000_opening_arrays, n_structure_open_array_object)
Deeply nested input depth limit 1024, then a clean error (same as orjson) no limit: 100,000 levels abort the process, which cannot be caught
-0 integer 0 (same as orjson) float 0.0
Integers beyond 64 bits, 1e400 float / error (same as orjson) same
Lone surrogate "\ud800" decoded as "\x00": bug, fixed by us (see below) error
API for building Python objects a tape where every container carries its length serde visitor (recursive) or its own DOM

Parse only, no Python objects, µs, Apple M5 Pro:

payload simd-json (tape) sonic-rs (Value) serde_json (Value)
floats ×10k 142 152 255
records ×100 18.6 18.9 100
records ×2000 360 336 1906
unicode/escapes ×200 28.0 19.8 96.5

Speed is a draw. The deciding factor is robustness. A JSON library inside a server must not let one request take the process down, and sonic-rs does exactly that on deeply nested input. simd-json's tape is also the shape isojson needs.

simd-json had one real bug for us: a lone high surrogate ("\ud800") was decoded as U+0000 instead of being rejected, so invalid input silently became different data. The cause was an old "0 means failure" sentinel that kept its value but lost its meaning in a 2023 refactor. We reported it (simd-lite/simd-json#481) and sent the fix with a regression test (#482). Until a release contains it, isojson pins our fork at that commit (see Cargo.toml), and isojson's own tests cover the case.

Feature comparison

isojson orjson json (stdlib)
Loads in own-GIL sub-interpreters (strict, no override) ✅ ❌ ImportError ✅
dict, list, tuple, str, int, float, bool, None ✅ ✅ ✅
Subclasses of str / int / dict / list ✅ ✅ ✅
default= callable ✅ ✅ ✅
OPT_INDENT_2, OPT_SORT_KEYS, OPT_APPEND_NEWLINE ✅ ✅ ~ (indent=, sort_keys=)
OPT_STRICT_INTEGER, OPT_PASSTHROUGH_SUBCLASS ✅ ✅ —
loads from bytes / bytearray / memoryview / str ✅ ✅ str/bytes only
Output bytes identical to orjson for the types above ✅ — ❌
datetime / date / time serialized natively ❌ → default= ✅ ❌
uuid.UUID, enum.Enum, dataclasses natively ❌ → default= ✅ ❌
numpy arrays (OPT_SERIALIZE_NUMPY) ❌ raises ✅ ❌
Non-str dict keys (OPT_NON_STR_KEYS) ❌ raises ✅ ~ (coerced)
orjson.Fragment ❌ ✅ ❌
Integers beyond 64 bits in dumps ❌ (like orjson) ❌ ✅
NaN / ±Infinity in dumps null (like orjson) null NaN / Infinity
Python versions CPython 3.12–3.14 CPython 3.10+ all

Differences from orjson

These are all the known differences. Anything not listed produces the same result as orjson 3.12 (the test suite checks this, see Testing).

  • Native datetime, UUID, Enum, dataclass, and numpy support is not implemented yet. Such objects go to your default= callable, the same as any other unsupported type. Without a default, dumps raises TypeError: Type is not JSON serializable: <type>, with the same message as orjson.
  • OPT_NON_STR_KEYS and OPT_SERIALIZE_NUMPY raise TypeError: isojson does not support .... They are not silently ignored, because ignoring them would produce output you did not ask for.
  • Options that only affect datetimes and dataclasses are accepted and do nothing: OPT_NAIVE_UTC, OPT_OMIT_MICROSECONDS, OPT_UTC_Z, OPT_PASSTHROUGH_DATETIME, OPT_PASSTHROUGH_DATACLASS. isojson never serializes those types natively, so these options can have no effect. OPT_SERIALIZE_DATACLASS and OPT_SERIALIZE_UUID are 0, as in orjson.
  • loads error messages differ. The exception type (JSONDecodeError, a subclass of json.JSONDecodeError and ValueError) and .pos / .lineno / .colno match. The wording of .msg does not always match orjson's.
  • CPython 3.12–3.14 only. Per-interpreter GIL arrived in 3.12. On free-threaded builds (3.13t/3.14t) the module declares that it needs the GIL, so CPython re-enables it on import (see above).

Performance

Reproduce with python bench/bench.py. Each cell is the median of repeated runs. Parallel cells time only the work loop: interpreter or process creation and imports happen before timing starts.

macOS arm64: Apple M5 Pro, 18 cores, CPython 3.14.7, orjson 3.12.0

Parallel, the case isojson is built for. Each worker does 3,000 round trips (loads(dumps(doc))) of a 100-record document. Throughput is in round trips per second; higher is better.

setup N=1 N=2 N=4 N=8 scaling 1→8
isojson, N own-GIL sub-interpreters, one process 15,162 31,731 60,705 114,405 7.55×
json (stdlib), N own-GIL sub-interpreters 4,019 8,277 14,230 26,679 6.64×
orjson, N own-GIL sub-interpreters ✗ ✗ ✗ ✗ —
orjson, N threads, one interpreter (shared GIL) 16,277 20,206 18,185 21,703 1.33×
isojson, N threads, one interpreter (shared GIL) 18,160 17,932 18,270 19,076 1.05×
orjson, N processes (multiprocessing) 22,773 42,917 80,230 149,056 6.55×
isojson, N processes (multiprocessing) 19,286 36,307 64,255 123,112 6.38×

✗ ImportError: module orjson.orjson does not support loading in subinterpreters

How to read this:

  • In one process, isojson on 8 sub-interpreters does about 5× the best orjson can do (114k vs 22k round trips/s here; 4.9–5.3× across our runs). Adding threads to orjson gains almost nothing, because every thread shares one GIL.
  • isojson on sub-interpreters does 4.3× stdlib json on sub-interpreters, and stdlib json was the only other option that works there.
  • Sub-interpreters get close to process-level scaling in one process: isojson reaches 114k round trips/s on 8 sub-interpreters vs 123k on 8 processes.
  • orjson on 8 processes is still faster (149k) because orjson is faster per call. If you already run multiprocessing and never use sub-interpreters, orjson remains the faster choice.

Single interpreter, per-call cost (lower is better):

dumps isojson orjson json (stdlib) isojson / orjson
small (27 B) 47 ns 46 ns 594 ns 1.03×
records ×100 18.33 µs 17.04 µs 153.80 µs 1.08×
records ×2000 349.52 µs 298.00 µs 2.86 ms 1.17×
floats ×10k 111.83 µs 209.36 µs 2.39 ms 0.53×
unicode/escapes ×200 12.88 µs 11.05 µs 124.12 µs 1.17×
loads isojson orjson json (stdlib) isojson / orjson
small (27 B) 107 ns 101 ns 1.09 µs 1.06×
records ×100 62.46 µs 45.94 µs 111.03 µs 1.36×
records ×2000 1.39 ms 851.92 µs 2.16 ms 1.63×
floats ×10k 224.24 µs 199.21 µs 1.14 ms 1.13×
unicode/escapes ×200 94.63 µs 68.32 µs 171.29 µs 1.39×

In summary: dumps is within 1.2× of orjson and about 2× faster on float-heavy documents. loads is 1.1–1.6× slower than orjson. Both are 1.5–21× faster than stdlib json.

The remaining loads gap is mostly fixed per-call cost around simd-json: the input is copied (simd-json unescapes in place, and bytes are immutable), and a fresh tape is allocated on every call. Both are next on the list.

Testing

pip install maturin pytest orjson
maturin develop --release
pytest tests
  • Parity with orjson (tests/test_parity.py):
    • randomized documents (control characters, non-BMP text, 64-bit edges, random float bit patterns) compared byte-for-byte against orjson under every supported option combination;
    • 250,000 floats compared bit-exactly;
    • error types and messages for every dumps failure mode;
    • the recursion and default depth limits;
    • loads accept/reject behaviour on edge-case documents.
  • JSON conformance (tests/test_conformance.py): all 318 cases of JSONTestSuite. Every must-accept document parses, every must-reject document raises JSONDecodeError, and nothing crashes. The suite runs in a child process, so a crash is reported as a failure.
  • Multi-interpreter safety (tests/test_subinterp.py):
    • strict import in 6 own-GIL sub-interpreters with no override;
    • per-interpreter module state and exception types;
    • 4 and 8 interpreters running concurrently, each on its own seeded data with its own expected answer, with a Python default= callback running inside the serializer on every call. A leak between interpreters would show up as a wrong answer, not just a possible crash;
    • 200 create/use/destroy cycles in a child process, so a crash is reported instead of swallowed.
  • Threads (tests/test_threads.py): 8 threads in one interpreter, and 4 threads plus 4 sub-interpreters at the same time, each worker on its own seeded data with its own expected answer.

The suite passes on macOS arm64 and Linux x86_64, both normally and under PYTHONMALLOC=debug. The -X dev / PYTHONDEVMODE=1 run is on Linux.

Status

Version 0.1.0. The API is stable (it is orjson's). Native datetime, UUID, Enum, and dataclass support is next.

License

Apache-2.0.

Third-party: simd-json (Apache-2.0 OR MIT); tests/data/JSONTestSuite is from nst/JSONTestSuite (MIT, license included in that directory).

Release files for isojson 0.1.0

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

Source distribution (sdist)

Source distribution for isojson 0.1.0
File Size Uploaded
isojson-0.1.0.tar.gz 62.3 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for isojson 0.1.0
File
isojson-0.1.0-cp314-cp314-win_amd64.whl CPython 3.14 CPython 3.14 Windows x86-64 Details
isojson-0.1.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.17+ x86-64 Details
isojson-0.1.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.14 CPython 3.14 Linux glibc 2.17+ ARM64 Details
isojson-0.1.0-cp314-cp314-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 macOS 11.0+ ARM64 Details
isojson-0.1.0-cp314-cp314-macosx_10_12_x86_64.whl CPython 3.14 CPython 3.14 macOS 10.12+ x86-64 Details
isojson-0.1.0-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details
isojson-0.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.17+ x86-64 Details
isojson-0.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.13 CPython 3.13 Linux glibc 2.17+ ARM64 Details
isojson-0.1.0-cp313-cp313-macosx_11_0_arm64.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64 Details
isojson-0.1.0-cp313-cp313-macosx_10_12_x86_64.whl CPython 3.13 CPython 3.13 macOS 10.12+ x86-64 Details
isojson-0.1.0-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
isojson-0.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ x86-64 Details
isojson-0.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ ARM64 Details
isojson-0.1.0-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details
isojson-0.1.0-cp312-cp312-macosx_10_12_x86_64.whl CPython 3.12 CPython 3.12 macOS 10.12+ x86-64 Details

Total release size: 3.4 MB

Release files / isojson-0.1.0.tar.gz

Download URL isojson-0.1.0.tar.gz
Size 62.3 kB
Tags Source
SHA-256 checksum
How to use checksums
384573ce3c548ba83291edce4e35f07d161a8ad044e9935e4f9810a9ef7ecdb2
BLAKE2b-256 checksum
How to use checksums
92503611313c3ca210e7324490bf1c986dd9a4bbf49451d99c6128154f994fbc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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

Transparency log

Release files / isojson-0.1.0-cp314-cp314-win_amd64.whl

Download URL isojson-0.1.0-cp314-cp314-win_amd64.whl
Size 144.1 kB
Tags CPython 3.14 Windows x86-64
SHA-256 checksum
How to use checksums
1be37dba32c6d08d119f4604fb80c87a78739b2a1f23bb86c3176d4c9beb2b39
BLAKE2b-256 checksum
How to use checksums
817240ea4ae5930d4a90ccc28579315757d7fa78302cc36bdb9535dbd2750417
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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

Transparency log

Release files / isojson-0.1.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL isojson-0.1.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 251.9 kB
Tags CPython 3.14 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
249138b6d4dbf6eed6e2858245611b88fa38da035676e4de56987930427c4a1c
BLAKE2b-256 checksum
How to use checksums
c0a33c10c17136c8d592ef58e477749f55491a31bbf9ef7292c1d6139df86ceb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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

Transparency log

Release files / isojson-0.1.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL isojson-0.1.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 240.6 kB
Tags CPython 3.14 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
608daeb3a4eda58e226259c1fccf3022f0ba0b90d06e5c41a750bc7987b02ff8
BLAKE2b-256 checksum
How to use checksums
7782adc91460c776c68d5caa6e561f854fc0b90e1f4e2d22bb45561f53e53650
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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

Transparency log

Release files / isojson-0.1.0-cp314-cp314-macosx_11_0_arm64.whl

Download URL isojson-0.1.0-cp314-cp314-macosx_11_0_arm64.whl
Size 222.3 kB
Tags CPython 3.14 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
93c2af5effa702f30768e45e47a0cf465ae69725e35be542635ddc95dd6bb508
BLAKE2b-256 checksum
How to use checksums
3a8cee3e0c52726d3fda735364a1b7c048fd81cb9b326e0438d297baf437173a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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

Transparency log

Release files / isojson-0.1.0-cp314-cp314-macosx_10_12_x86_64.whl

Download URL isojson-0.1.0-cp314-cp314-macosx_10_12_x86_64.whl
Size 244.1 kB
Tags CPython 3.14 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
cea33065df1e4e3ced6192c164788872c67fc469f7aeeddaf928eadd27930038
BLAKE2b-256 checksum
How to use checksums
6e7d85ae15ab24f35145149125d4d3290052acfdfa6d2c24f5c494afbd50f116
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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

Transparency log

Release files / isojson-0.1.0-cp313-cp313-win_amd64.whl

Download URL isojson-0.1.0-cp313-cp313-win_amd64.whl
Size 144.2 kB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
f705161f815fe6a9deb762503680de3cb67fa3796492d3c8affd60b41b6ed2c3
BLAKE2b-256 checksum
How to use checksums
199b7919311e5cdf1f3259fe18f51b2917c7c34e53e638be048566df5ba3099d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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

Transparency log

Release files / isojson-0.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL isojson-0.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 251.9 kB
Tags CPython 3.13 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
adc6ecbaa5bbcc7d12f96fb287e20d5679c920e096389af847048f1dd44ef88f
BLAKE2b-256 checksum
How to use checksums
9f34ebbb56d8b60b5f891e57f0487c0575948eeb230f4a1541d8ced1042255bd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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

Transparency log

Release files / isojson-0.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL isojson-0.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 240.6 kB
Tags CPython 3.13 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
0111966898f88c425cdd240471d0c70e803bab628733f227978243ea7a865d26
BLAKE2b-256 checksum
How to use checksums
2fa862e50314d95195ac0ae0243f352113a06d17967bcd9b93b221ac6db65096
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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

Transparency log

Release files / isojson-0.1.0-cp313-cp313-macosx_11_0_arm64.whl

Download URL isojson-0.1.0-cp313-cp313-macosx_11_0_arm64.whl
Size 222.4 kB
Tags CPython 3.13 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
393c2befe252cd8d2ac47c5e1ea64fad835511c08b4456a514dd5d89bf5e41cd
BLAKE2b-256 checksum
How to use checksums
c3e4192472096e64af3281f46aa76b4030a54b8b114ce778b770103d1e7d61b4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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

Transparency log

Release files / isojson-0.1.0-cp313-cp313-macosx_10_12_x86_64.whl

Download URL isojson-0.1.0-cp313-cp313-macosx_10_12_x86_64.whl
Size 244.1 kB
Tags CPython 3.13 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
ed42ce0f21a03789edc32680d36555c9bac5fd53876e560bedfc48597ae14fac
BLAKE2b-256 checksum
How to use checksums
324ba7da31e916dc44e373c4fc95ca3a9fbc8a3057550e98f225c0420aef25d3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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

Transparency log

Release files / isojson-0.1.0-cp312-cp312-win_amd64.whl

Download URL isojson-0.1.0-cp312-cp312-win_amd64.whl
Size 144.2 kB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
e3598d262525c1ce3198deb00344b566c33bec71e0d2e6d60f6b0ac42611527c
BLAKE2b-256 checksum
How to use checksums
21bea9f87b10504a8b085f0791d2c5a49a218717c0b64ef76aa570c6ebd00ee4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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

Transparency log

Release files / isojson-0.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL isojson-0.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 251.9 kB
Tags CPython 3.12 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
8f01c7fa8cb779be972cc4a8d747c4670056cf42463b1d58d49398ea3439741d
BLAKE2b-256 checksum
How to use checksums
7392fadabf1d9248a55748bb3e066cc18fab7e80710bf29ad12b66b9a54d0b64
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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

Transparency log

Release files / isojson-0.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL isojson-0.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 240.6 kB
Tags CPython 3.12 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
5f04be22287b1b589b1b0e15c4ddf83d229ea21cb0f2220abae0c95154bbb1e3
BLAKE2b-256 checksum
How to use checksums
4b9c18b90e955a7ec228a4525a82fbe8c0f1e5c228931e16c7c2bc8fa636b932
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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

Transparency log

Release files / isojson-0.1.0-cp312-cp312-macosx_11_0_arm64.whl

Download URL isojson-0.1.0-cp312-cp312-macosx_11_0_arm64.whl
Size 222.4 kB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
6726318c90d4e2ae2018c8677ad3c8630da121c6cf75f40046f2bd025b4595da
BLAKE2b-256 checksum
How to use checksums
2705ddac5e6e43038a13bbf09a23267f18df37f2202792581d534fd624da0ac5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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

Transparency log

Release files / isojson-0.1.0-cp312-cp312-macosx_10_12_x86_64.whl

Download URL isojson-0.1.0-cp312-cp312-macosx_10_12_x86_64.whl
Size 244.1 kB
Tags CPython 3.12 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
cdc7bc9d70a31562303281b2971441692f2f0770aabb52f77f82c0e1850cb42f
BLAKE2b-256 checksum
How to use checksums
813229f05fcc9b6d254a83d7ee82d1e9b99ece88ed5e10fb19156fa4be2d65f9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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

Transparency log

Release history Release notifications | RSS feed

This release

0.1.0 This release

16 release files

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