library for reading files with x-y data from powder diffraction, spectroscopy, or other experimental methods
Switch branches/tags
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.



xylib is a portable library for reading files that contain x-y data from powder diffraction, spectroscopy and other experimental methods.

It comes with two programs that can convert supported formats to plain text: command-line xyconv and graphical xyconvert.

Supported formats:

  • plain text, delimiter-separated values (e.g. CSV)
  • Crystallographic Information File for Powder Diffraction (pdCIF)
  • Siemens/Bruker UXD
  • Siemens/Bruker RAW ver. 1/2/3
  • Philips UDF
  • Philips PC-APD RD raw scan V3/V5
  • PANalytical XRDML
  • Rigaku DAT
  • Sietronics Sieray CPI
  • DBWS/DMPLOT data file
  • Canberra CNF (from Genie-2000 software; aka CAM format)
  • Canberra AccuSpec MCA
  • XFIT/Koalariet XDD
  • Vamas ISO14976 (only experiment modes: SEM or MAPSV or MAPSVDP are supported; only REGULAR scan_mode is supported)
  • Princeton Instruments WinSpec SPE (only 1-D data is supported)
  • Ron Unwin's Spectra XPS format (VGX-900 compatible)

Examples of supported files are collected in sample-urls.


The library is written in C++ and has C bindings.

R bindings: rxylib (CRAN) by Sebastian Kreutzer.

Python bindings: pip-installable, generated by SWIG, details below.

Other languages (suggestions): you may access C API through FFI (here is an example), or extend xylib.i to wrap the C++ interface using SWIG.

The API is documented in the xylib/xylib.h file. Adding new formats -- in

Licence: LGPL 2+

xylib is used by:


Converts a file from one of the supported formats to plain text:

xyconv myfile.bin plain.txt

It has a few options, see xyconv -h for details.



The GUI is designed for quick converting of many files at once.


Binary packages:


To compile the source code you need:

  • C++ compiler (all popular ones are tested: GCC, Clang, MSVC, icc)
  • Boost libraries (only headers).
  • optionally, zlib and bzlib libraries (for reading compressed files)
  • optionally, wxWidgets 3.0 (for xyconvert - GUI converter)

Two build systems are provided: either use CMake or, on Unix, ./configure && make. To skip building the GUI use option -D GUI=OFF for CMake or --without-gui for configure. If you are using git, autoreconf -i is needed before ./configure.

Python bindings require SWIG, Boost headers and a C++ compiler. It may be enough to just type:

pip install xylib-py --user

If the Boost headers cannot be found, run pip with options --global-option=build_ext --global-option=-I/path/to/boost_1_60_0. See the file for usage examples.



Feel free to send e-mail to the authors, or to the fityk-dev mailing list.


  • Google - the library was started as Google Summer of Code 2007 project by Peng ZHANG, mentored by Marcin Wojdyr from Fityk organization.
  • Michael Richardson provided VAMAS specification and sample files.
  • David Hovis provided a WinSpec file format specification and sample files.
  • Pablo Bianucci provided his code for reading WinSpec format and sample files.
  • Martijn Fransen provided very useful specifications of Philips formats.
  • Vincent Favre-Nicolin provided PSI_DMC and ILL_D1A5 samples; reading his ObjCryst library was also helpful.
  • Janos Vegh sent us his VAMAS reading routines (long time ago, before this project started).
  • Andreas Breslau added Bruker V3 (RAW1.01) support.
  • Bjørn Tore Lønstad provided Bruker RAW V3 format specification and samples.
  • Hector Zhao patched VAMAS code.
  • Jim Fitzgerald (author of FitzPeaks) provided code for reading Canberra (Genie) CNF files.
  • Matthias Richter added Ron Unwin's Spectra XPS format and SpecsLab2 xy format.


  • 1.6 (unreleased) - added PANalytical XRDML
  • 1.5 (2016-12-17) - improved CNF reading (thanks to Jim and Miha) - changes to reading SpecsLab2 xy - support text files with lines terminated by CR only - more robust reading of CSV files
  • 1.4 (2015-03-31)
    • included xyConvert (GUI converter)
    • support filenames with non-ascii characters
  • 1.3 (2014-01-24)
    • bug fixes only
  • 1.2 (2013-08-01)
    • added SpecsLab2 xy format (Matthias Richter)
  • 1.1 (2012-11-05)
    • added XPS format from Ron Unwin's Spectra program (Matthias Richter)
    • fixed bug in reading energy calibration from Canberra formats
  • 1.0 (2012-07-25)
    • added option decimal-comma for text format
    • fixed bug in CSV format
  • 0.9 (2012-05-20)
    • added CSV format, or more acurately: delimiter-separated values format. Supports popular delimiters (TAB ,;|:/), quoting (") and escape character (\). Non-numeric fields are read as NaNs.
    • added Canberra CNF format
  • 0.8 (2011-01-18)
    • fixed a couple of bugs in pdCIF implementation
  • 0.7 (2010-10-09)
    • added χPLOT (CHIPLOT) format (extension .chi)
    • fixed bug in reading VAMAS files with transmission data (Hector Zhao)
  • 0.6 (2010-04-29)
    • fixed reading of Bruker v3 files
    • changes in API, added C API
  • 0.5 (2010-01-04)
    • added support for compressed files *.gz (requires zlib) and *.bz2 (bzlib)
  • 0.4 (2009-06-11)
    • added file caching (for details see xylib/cache.h)
    • changes to parsing text files in which numeric data is mixed with text
  • 0.3 (2008-06-03)
    • added Bruker binary RAW1.01 format
    • fixed bug in reading one-column ascii files
  • 0.2 (2008-03-09)
    • initial public release