Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time


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/4
  • 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)
  • Freiberg Instruments XSYG (from lexsyg)
  • Bruker SPC/PAR

Examples of supported files are collected in sample-urls.


The library is written in C++11 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 >= 1.46.1 (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.
  • Johannes Friedrich added xsyg (lexsyg) format.
  • Sebastian Kreutzer added Bruker SPC binary format.


  • 1.6 (2020-09-08)
    • added XSYG format from Freiberg Instruments' lexsyg (Johannes Friedrich)
    • added Bruker SPC binary format (Sebastian Kreutzer)
    • 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


library for reading files with x-y data from powder diffraction, spectroscopy, or other experimental methods







Contributors 4