Releases: vinitkumar/json2xml
Security patch release
What's Changed
- Update README.rst by @vinitkumar in #268
- fix: upgrade urllib3 to patched version by @vinitkumar in #269
Full Changelog: v6.0.1...v6.0.2
v6.0.1 - Easy Rust Installation & Updated Benchmarks
json2xml 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 json2xml and json2xml-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 - Native Rust Extension for 29x Faster Performance
json2xml 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)
from json2xml.dicttoxml_fast import dicttoxml
xml = dicttoxml({"name": "John", "age": 30})
# Option 2: Direct Rust import (fastest, requires json2xml-rs)
from json2xml_rs import dicttoxml
xml = dicttoxml({"name": "John", "age": 30})
# Option 3: Pure Python (always available)
from json2xml.dicttoxml import dicttoxml
xml = 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 testsbenchmark_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! 🙏
v5.4.0
What'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
Xpath Support and Python freethreaded in CI
What's Changed
- prod release by @vinitkumar in #249
- Add Python 3.14t (freethreaded) to testing matrix by @vinitkumar in #251
- Migrate from mypy to ty for type checking by @vinitkumar in #252
- check arm build ubuntu by @vinitkumar in #253
- Modernize Python code to 3.10+ with pyupgrade by @vinitkumar in #254
- feat: improvements to ruff and new python 3.15 by @vinitkumar in #255
- chore(deps): bump starlette from 0.47.2 to 0.49.1 in /docs by @dependabot[bot] in #257
- feat: add xPath support by @vinitkumar in #259
Full Changelog: v5.2.1...v5.3.1
Release with security fixes
What's Changed
- Fixes #245
- Updates many deps in main dependencies and test dependencies
- Feat/remove py by @vinitkumar in #247
Full Changelog: v5.2.0...v5.2.1
Security release and other fixes
What's Changed
- 🔒 Security: Fix Jinja2 and py library vulnerabilities by @vinitkumar in #243
- chore(deps): bump urllib3 from 2.3.0 to 2.5.0 by @dependabot[bot] in #244
Full Changelog: v5.1.0...v5.2.0
v5.1.0
What'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
What'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
Make new Json2xml Python3.10+ only
What's Changed
- Fix/drop python 38 python39 from identifier by @vinitkumar in #211
We ensure that it won't be able to installed on old Python < 3.10 (So Python3.8, Python3.9)
Full Changelog: v5.0.3...v5.0.4