flatwire (Python)
Streaming JSON serialization that keeps memory flat and time linear — stream large collections element-by-element instead of materializing the whole payload.
pip install flatwire
import flatwire
# Whole-value convenience (byte-compatible with the standard library).
data = flatwire.encode({"hello": "world"})
value = flatwire.decode(data)
# Stream a large collection to a binary writer, one element at a time.
with open("out.json", "wb") as fp:
flatwire.encode_array((row for row in huge_iterator), fp)
# Read it back lazily — peak memory is one element, not the whole array.
with open("out.json", "rb") as fp:
for row in flatwire.decode_array(fp):
handle(row)
Wire format is plain JSON, so nothing downstream changes.
Streaming XML (v0.3)
The same API streams a typed, fully round-trippable XML representation — for which the standard DOM parsers would otherwise build the whole tree in memory:
# Stream a large collection as XML.
with open("out.xml", "wb") as fp:
flatwire.encode_array(rows, fp, format="xml") # optional: root="items"
# Parse it back lazily, one element at a time (iterparse under the hood).
with open("out.xml", "rb") as fp:
for row in flatwire.decode_array(fp, format="xml"):
handle(row)
Measured (bench/xml_bench.py): parsing a 12 MB document with
ElementTree.fromstring peaks at ~125 MB, while flatwire's streaming parse holds
~4 MB (~97% lower); streaming encode is flat at ~900 bytes.
See the monorepo README for the cross-language story, and the live benchmark dashboard for the measured numbers.
Apache-2.0.
Metadata
Release files for flatwire 0.5.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| flatwire-0.5.0.tar.gz | 11.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| flatwire-0.5.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 21.9 kB
Release files / flatwire-0.5.0.tar.gz
| Download URL | flatwire-0.5.0.tar.gz |
|---|---|
| Size | 11.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f767fa8538064ae5bea0fbb83030d00f111c9f2c987a2b0cd2cd35eec0026192
|
|
BLAKE2b-256 checksum How to use checksums |
de5ac2a0fa60a6d0ba9c10da63dd73a35507629c0bef96826e0ef4eceda6601e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / flatwire-0.5.0-py3-none-any.whl
| Download URL | flatwire-0.5.0-py3-none-any.whl |
|---|---|
| Size | 10.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
7a7a8e71ef77e73317b5908301bc630af01014d998dcea9a2f18c723f989a9b7
|
|
BLAKE2b-256 checksum How to use checksums |
c2f8555984e4d12424c990ead1a0dee135b459856dcad43f42c09cb33c95ec2f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|