pugixml

Light-weight, simple and fast XML parser for C++ with XPath support

Repository: Downloads: Documentation: Support:

pugixml 1.16 release

pugixml-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 (no i), 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 named pugixml (where i stands 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 pugixml was developed in Subversion, until eventually migrating to Git on github.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 pugixml has 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, pugixml is “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!

Highlights for this release (read the changelog for details) include:

You can download the source package or get the new version from GitHub using the latest tag (https://github.com/zeux/pugixml).