-
v1.16 Stable
released this
2026-06-15 15:38:00 -05:00 | 2 commits to master since this releasepugixml-1.16 is out. This is an anniversary release: pugixml turns 20 this year!
In early 2006, I was evaluating existing XML parsers to parse large COLLADA files quickly and nothing fit the bill; existing DOM parsers were very slow and often cumbersome to use, existing SAX parsers required a tricky parsing flow for documents with many internal references with unspecified order. The most promising existing parser was
pugxml(noi), which had a nice API and an interesting parsing approach - but still left a lot of performance on the table so I thought I could quickly patch it up and call it a day. The project was namedpugixml(whereistands for improved) in late May 2006.The first version was assigned a number 0.1 in July, and was used in a few internal projects. It was tiny: 1800 lines of code (plus 700 line header), no tree modification, no Unicode support, no XPath, no compact mode, slower parser. But it was quite useful and so the first version 0.2 was released to the public in November. Originally
pugixmlwas developed in Subversion, until eventually migrating to Git ongithub.com. Over the following years it quickly gained important features that were missing in the original release; code got faster through continuous tuning; some APIs were adjusted or removed. The library started gaining wider adoption.In 2010, v1.0 came out. This represented a major stability point: it was the last release to remove or break any APIs, and since then
pugixmlhas remained API-stable and also maintained binary compatibility. Since then, other important improvements have been introduced; for example, in 2015 a major new compilation mode,PUGIXML_COMPACT, allowed to significantly reduce the DOM memory consumption at a small performance cost with no change in API/ABI.Development continues to this day, 20 years later; in some sense,
pugixmlis “complete” - the library has worked great for the last decade and all critical functionality is there. But it still requires continued maintenance, as new compilers and language features introduce new problems, some latent bugs are occasionally found, and occasional new minor features are being added. What started as a quick excursion turned into a life-long project - here’s to the next decade!
Behavior changes:
- Elements that have a single empty PCDATA child are now printed as empty element tags (unless
format_no_empty_element_tagsis used)
Improvements:
PUGIXML_CHARCONV_FLOAToption can be enabled to switch floating point conversions to<charconv>; this requires C++17, makes the conversions locale-independent and can improve performance- Add
xml_node::ensure_childandxml_node::ensure_attributethat return the child/attribute with the specified name, adding one if it does not exist - Improve performance of searching for nodes and attributes by name
- Loading a document from an empty buffer no longer performs memory allocations
XPath improvements:
- Improve performance of queries that evaluate or compare attribute values, like
@attr > 5 - Improve performance of queries that select nodes and attributes by name
Bug fixes:
- Fix stack overflow when removing subtrees with extremely deep nesting
- Fix integer overflows that could lead to crashes when loading very large (1+ GB) documents on 32-bit platforms in
PUGIXML_WCHAR_MODE - Fix null pointer dereference when copying
xpath_variable_setobjects that contain string variables with unassigned values
CMake improvements:
- Apple frameworks built with
PUGIXML_BUILD_APPLE_FRAMEWORKnow include framework headers PUGIXML_INSTALL_SOURCEoption can be used to installpugixml.cpp(useful for header-only mode)
Compatibility improvements:
- Add project files and NuGet packages for Visual Studio 2026
- Fix compatibility with C++20 modules when including
pugixml.hppin the global module fragment - Fix clang/gcc warnings
-Wextra-semi-stmt,-Wsign-conversion,-Wuninitialized(GCC16) - Fix compilation for Embarcadero C++ XE5
- Work around several static analysis false positives
Thanks to @e-kwsm, @luzpaz, @bilbothebaggins, @mosfet80, @Treata11, @sankhesh, @jgressma, @ravstrix, @seanm and @nolange for contributions!
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Elements that have a single empty PCDATA child are now printed as empty element tags (unless
-
v1.15 Stable
released this
2025-01-10 12:15:31 -06:00 | 78 commits to master since this releaseImprovements:
- Many
xml_attribute::andxml_node::functions now transparently supportstd::string_viewandstd::stringwhen C++17 support is detected.
CMake improvements:
- Improve pkg-config file generation for NixOS
PUGIXML_BUILD_APPLE_FRAMEWORKCMake option can be used to build pugixml as.xcframeworkPUGIXML_INSTALLCMake option can be used to disable installation targets
Compatibility improvements:
- Fix clang/gcc warnings
-Wzero-as-null-pointer-constant,-Wuseless-cast,-Wshorten-64-to-32 - Fix unreferenced function warnings in
PUGIXML_NO_STLconfiguration - Fix CMake 3.31 deprecation warnings
- Stop using deprecated
throw()whennoexceptis available
Note: due to a packaging issue, release archives below contain quickstart guide with version "1.14"; this is a minor error that does not affect the contents of the package or guide otherwise. An updated version is live on pugixml.org.
Thanks to @richardapeters, @ilya-lavrenov, @PhilipBotha, @nathaniel-brough, @SoapGentoo, @kmilos, @aral-matrix, @dantargz, @r-barnes, @hughsie and @Treata11 for contributions!
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Many
-
v1.14 Stable
released this
2023-09-07 13:55:13 -05:00 | 146 commits to master since this releaseImprovements:
xml_attribute::set_nameandxml_node::set_namenow have overloads that accept pointer to non-null-terminated string and size- Implement
parse_merge_pcdataparsing mode in which PCDATA contents is merged into a single node when original document had comments that were skipped during parsing xml_document::load_filenow returns a more consistent error status when given a path to a folder
Bug fixes:
- Fix assertion in XPath number→string conversion when using non-English locales
- Fix
PUGIXML_STATIC_CRTCMake option to correctly select static CRT when using MSVC and recent CMake
Compatibility improvements:
- Fix GCC 2.95/3.3 builds
- Fix CMake 3.27 deprecation warnings
- Fix XCode 14 sprintf deprecation warning when compiling in C++03 mode
- Fix clang/gcc warnings -Wweak-vtables, -Wreserved-macro-identifier
Thanks to @DavidKorczynski, @jiangqucheng, @SoapGentoo, @asmaloney, @ArchXUser, @stefanroellin and @vineethkuttan for contributions!
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
v1.13 Stable
released this
2022-10-28 18:53:25 -05:00 | 197 commits to master since this releaseMaintenance release.
Release highlights:
xml_attribute::set_value,xml_node::set_valueandxml_text::setnow have overloads that accept pointer to non-null-terminated string and size- Fix error handling in
xml_document::save_filethat could result in the function succeeding while running out of disk space - Fix memory leak during error handling of some out-of-memory conditions during
xml_document::load
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
v1.12.1 Stable
released this
2022-02-10 10:36:19 -06:00 | 232 commits to master since this releasePatch release.
This is identical to v1.12 except that it updates PUGIXML_VERSION macro to 1.12. It can be used in applications where PUGIXML_VERSION is needed, but this update is not critical otherwise.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
Source code (ZIP)
-
v1.12 Stable
released this
2022-02-08 22:09:10 -06:00 | 233 commits to master since this releaseMaintenance release.
Release highlights:
- Fix xml_document move construction (for C++11) and xml_node iterator signatures (for C++20)
- Add support for VS2022
- Reorganize CMake settings to have
PUGIXML_prefix and allow more configuration via CMake options, like choosing compact/wchar_t modes.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
v1.11.4 Stable
released this
2020-12-22 10:41:08 -06:00 | 283 commits to master since this releasePatch release.
This patch reintroduces pugixml target for CMake when find_package is used, which was accidentally removed from v1.11.
It's recommended that pugixml::pugixml target is used instead, but this patch restores pugixml target for existing applications / libraries that depend on it.The previous patch, v1.11.3, did not handle repeated attempts to call find_package; this patch fixes that particular corner case.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
Source code (ZIP)
-
v1.11.3 Pre-release
released this
2020-12-18 11:52:06 -06:00 | 285 commits to master since this releasePatch release.
This patch reintroduces pugixml target for CMake when find_package is used, which was accidentally removed from v1.11.
It's recommended that pugixml::pugixml target is used instead, but this patch restores pugixml target for existing applications / libraries that depend on it.The previous patch, v1.11.2, was not compatible with CMake 3.10; this patch restores compatibility with earlier CMake versions when using imported targets.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
Source code (ZIP)
-
v1.11.2 Pre-release
released this
2020-12-14 21:47:56 -06:00 | 287 commits to master since this releasePatch release.
This patch reintroduces pugixml target for CMake when find_package is used, which was accidentally removed from v1.11.
It's recommended that pugixml::pugixml target is used instead, but this patch restores pugixml target for existing applications / libraries that depend on it.The previous patch, v1.11.1, was only compatible with CMake 3.18 and up; this patch restores compatibility with earlier CMake versions when using imported targets.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
Source code (ZIP)
-
v1.11.1 Pre-release
released this
2020-12-04 18:31:20 -06:00 | 289 commits to master since this releasePatch release.
This patch reintroduces
pugixmltarget for CMake whenfind_packageis used, which was accidentally removed from v1.11.
It's recommended thatpugixml::pugixmltarget is used instead, but this patch restorespugixmltarget for existing applications / libraries that depend on it.Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
Source code (ZIP)