Changelog History
-
v6.2.0 Changes
June 05, 2026json2xml 6.2.0
🚀 This release ships the serializer memory savings for both the pure Python package and the optional Rust accelerator.
Highlights
- ⬇️ Reduces peak memory in the pure Python rooted-output path by avoiding an intermediate output list.
- ⬇️ Reduces peak memory in
json2xml-rsby writing directly into Python bytes instead of materializing a large Rust string first. - ⚡️ Publishes
json2xml-rs0.3.0 and updatesjson2xml[fast]to requirejson2xml-rs>=0.3.0. - ⚡️ Updates the Rust extension crate to Rust 2024 with
rust-version = 1.96. - 🛠 Fixes macOS
cargo testlinking by separating normal PyO3 tests from extension-module builds.
Memory benchmark
For the documented 100,000-record benchmark, the Rust serializer RSS delta dropped from 157.70 MiB to 80.26 MiB, saving 77.44 MiB, about 49.1%.
See
docs/rust_memory_benchmark.rstfor methodology and reproduction details.🚀 Release order
🚀
json2xml-rs0.3.0 was published first viarust-v0.3.0, then thisjson2xml6.2.0 release was published sojson2xml[fast]resolves cleanly. -
v6.1.0 Changes
May 04, 2026What's Changed
Full Changelog : v6.0.7...v6.1.0
-
v6.0.7 Changes
April 25, 2026 -
v6.0.6 Changes
April 08, 2026What changed
- 🛠 Fixed review cleanup and removed a needless line in the recent conversion and test cleanup (#281, #280)
- ➕ Added lat.md support to the codebase for architecture and test knowledge tracking (#279)
- ⬆️ Bumped the docs dependency pygments from 2.19.1 to 2.20.0 (#278)
- ⬆️ Upgraded the Python workflow to 3.12
🚀 Rust release
- 🚀 No new json2xml-rs release was published for 6.0.6
- There were no commits under rust/ since rust-v0.2.0, so no new Rust tag was needed
Full changelog
-
v6.0.5 Changes
March 12, 2026What changed
- 🛠 Fixed double-escaping of XML attribute values for invalid key names
- 🛠 Fixed Rust backend float formatting to match Python output
- 🛠 Fixed iteration errors being swallowed in the Rust backend
- Validated
custom_rootas a proper XML element name - ⬇️ Reduced Rust writer allocations and removed duplicated dispatch logic
- ⬆️ Bumped
pyo3and Rust binding versions - ➕ Added the missing
xmltodictdependency to the Rust CI workflow
Full changelog
-
v6.0.1 Changes
January 16, 2026json2xml v6.0.1
🚀 This release enables the
[fast]optional dependency and includes comprehensive benchmark comparisons.🚀 Easy Rust Acceleration
You can now install json2xml with Rust acceleration in a single command:
pip install json2xml[fast]This automatically installs both
json2xmlandjson2xml-rs.📊 Comprehensive Benchmark Results
✅ Tested on Apple Silicon, comparing all implementations:
🐎 Performance Summary
✅ | Test Case | Python | Rust | Go | Zig | | --- | --- | --- | --- | --- | | Small (47B) | 40.12µs | 1.45µs | 4.65ms | 3.74ms | | Medium (3.2KB) | 2.14ms | 71.28µs | 4.07ms | 3.28ms | | Large (32KB) | 21.08ms | 739.89µs | 4.05ms | 6.11ms | | Very Large (323KB) | 212.61ms | 7.55ms | 4.38ms | 33.24ms |
Speedup vs Pure Python
✅ | Test Case | Rust | Go | Zig | | --- | --- | --- | --- | | Small (47B) | 27.6x | 0.0x* | 0.0x* | | Medium (3.2KB) | 30.0x | 0.5x* | 0.7x* | | Large (32KB) | 28.5x | 5.2x | 3.5x | | Very Large (323KB) | 28.2x | 48.5x | 6.4x |
*CLI tools have ~3-4ms process spawn overhead
Key Findings
- Rust is best for Python users - ~28x faster with zero overhead
- Go excels for large CLI workloads - 48x faster for 300KB+ files
- CLI startup overhead matters - Go/Zig slower for small files due to process spawn
📦 Installation Options
# Pure Python (always works)pip install json2xml# With Rust acceleration (recommended)pip install json2xml[fast]🔗 Related Projects
- Go version : json2xml-go
- Zig version : json2xml-zig
- Rust extension : json2xml-rs
What's Changed
- Enable
[fast]optional dependency for easy Rust installation - ➕ Add comprehensive
benchmark_all.pyscript - ⚡️ Update
BENCHMARKS.mdwith Python/Rust/Go/Zig comparison
Full Changelog : v6.0.0...v6.0.1
-
v6.0.0 Changes
January 16, 2026json2xml v6.0.0 🚀
🚀 Major Release: Native Rust Extension for 29x Faster Performance
This release introduces an optional native Rust extension built with PyO3 that provides approximately 29x faster JSON to XML conversion compared to pure Python.
✨ Highlights
- Optional Rust acceleration - Install
json2xml-rsfor blazing fast performance - Zero breaking changes - Pure Python version works exactly as before
- Automatic backend selection - Use
dicttoxml_fastmodule for auto-detection - Cross-platform wheels - Pre-built for Linux, macOS (Intel + Apple Silicon), Windows
🐎 📊 Performance Benchmarks
JSON Size Pure Python With Rust Speedup Small (47 bytes) 6.85 µs 0.21 µs 33x Medium (3.2KB) 160 µs 5.6 µs 28x Large (32KB) 1.59 ms 53 µs 30x Very Large (323KB) 16.4 ms 569 µs 29x 📦 Installation
# Pure Python (always works)pip install json2xml# With Rust acceleration (optional, recommended)pip install json2xml json2xml-rs🔧 Usage
# Option 1: Auto-selecting wrapper (recommended)fromjson2xml.dicttoxml\_fastimportdicttoxmlxml=dicttoxml({"name":"John","age":30})# Option 2: Direct Rust import (fastest, requires json2xml-rs)fromjson2xml\_rsimportdicttoxmlxml=dicttoxml({"name":"John","age":30})# Option 3: Pure Python (always available)fromjson2xml.dicttoxmlimportdicttoxmlxml=dicttoxml({"name":"John","age":30})📁 New Files
rust/- PyO3 Rust extension source codejson2xml/dicttoxml_fast.py- Auto-selecting wrapper moduletests/test_rust_dicttoxml.py- 84 comprehensive tests- 🐎
benchmark_rust.py- Performance comparison script - 🏗
.github/workflows/build-rust-wheels.yml- CI for building wheels - 👷
.github/workflows/rust-ci.yml- CI for Rust code quality
⚠ ⚠️ Rust Extension Limitations
👍 The Rust implementation does not yet support:
idsparameteritem_funcparameterxml_namespacesparameterxpath_formatparameter@attrs,@val,@flatspecial dict keys
For these features, use the pure Python implementation or
dicttoxml_fast(which auto-falls back).🔗 Related Projects
- Go version : github.com/vinitkumar/json2xml-go
- Zig version : github.com/nicholasgriffintn/json2xml-zig
📝 Full Changelog
👀 See HISTORY.rst for complete changelog.
Thank you to all contributors! 🙏
- Optional Rust acceleration - Install
-
v5.4.0 Changes
January 14, 2026What's Changed
- ⚡️ feat: update python3.15.0 to alpha 3 by @vinitkumar in #260
- 📄 chore(deps): bump urllib3 from 2.5.0 to 2.6.0 in /docs by @dependabot[bot] in #261
- ⚡️ chore: update GitHub Actions to latest versions by @vinitkumar in #262
- 📚 update documentation and make it more correct by @vinitkumar in #263
- 📄 chore(deps): bump urllib3 from 2.6.0 to 2.6.3 in /docs by @dependabot[bot] in #265
- 👍 feat: add CLI support for json2xml-py by @vinitkumar in #266
Full Changelog : v5.3.1...v5.4.0
-
v5.1.0 Changes
June 12, 2025What's Changed
- feat: try python 3.14 by @vinitkumar in #214
- ⚡️ feat: update to latest rc2 for python 3.13 by @vinitkumar in #215
- ✅ feat: add some new tests by @vinitkumar in #216
- ✅ feat: add some more tests by @vinitkumar in #217
- ✅ feat: add ability for codecov to get test healthiness by @vinitkumar in #218
- ⚡️ feat: update to python 3.13 stable by @vinitkumar in #219
- 📄 chore(deps): bump waitress from 2.1.2 to 3.0.1 in /docs by @dependabot in #220
- 📄 chore(deps): bump tornado from 6.4.1 to 6.4.2 in /docs by @dependabot in #221
- ⬆️ Feat/upgrade tox and ci setup by @vinitkumar in #223
- 📄 chore(deps): bump jinja2 from 3.1.4 to 3.1.5 in /docs by @dependabot in #225
- ⬆️ Feat/upgrade deps by @vinitkumar in #226
- ⚡️ feat: update to python 3.14.5 alpha' by @vinitkumar in #227
- 🛠 fix: upgrade deps by @vinitkumar in #229
- 🛠 fix: add tests for the uncovered lines by @vinitkumar in #230
- ⚡️ feat:updated diagram by @vinitkumar in #231
- feat:try pypy 3.11 by @vinitkumar in #232
- ✅ feat: add latest python 3.14 alpha by @vinitkumar in #234
- 📄 chore(deps): bump tornado from 6.4.2 to 6.5.1 in /docs by @dependabot in #238
- Feat/tox python 3.14 by @vinitkumar in #240
- ✅ feat: add tests for utils as well by @vinitkumar in #241
- 📄 chore(deps): bump requests from 2.32.3 to 2.32.4 in /docs by @dependabot in #239
- 📄 chore(deps): bump h11 from 0.14.0 to 0.16.0 in /docs by @dependabot in #236
- 🛠 fix: escape XML special characters in @attrs values by @vinitkumar in #242
Full Changelog : v5.0.5...v5.1.0
-
v5.0.5 Changes
August 31, 2024What's Changed
- 📄 chore(deps): bump webob from 1.8.7 to 1.8.8 in /docs by @dependabot in #212
- 🛠 fix missing encoding indication in pretty mode by @fmigneault in #213
🆕 New Contributors
- @fmigneault made their first contribution in #213
Full Changelog : v5.0.4...v5.0.5