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.6.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.6.0.tar.gz | 15.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| flatwire-0.6.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 29.4 kB
Release files / flatwire-0.6.0.tar.gz
| Download URL | flatwire-0.6.0.tar.gz |
|---|---|
| Size | 15.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
8f6d27121e27c87bba6c1247ebcf8ac9b6ce472921740a28913baf3637980952
|
|
BLAKE2b-256 checksum How to use checksums |
b1a1acd7f8610bff2aca64eba758275de19beff0a2c9b503a2644ebaf352e83e
|
| 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.6.0-py3-none-any.whl
| Download URL | flatwire-0.6.0-py3-none-any.whl |
|---|---|
| Size | 14.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ae982360ed507fabe4abbda8209cfbe4eadfdac01daeef82171d901073fb2dcb
|
|
BLAKE2b-256 checksum How to use checksums |
143947a5c72f734bfc770eeb44dc5cf8d407829b49324b1dfd031bb37109b7a5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|