Skip to content


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
library for reading files with x-y data from powder diffraction, spectroscopy, or other experimental methods
C++ CMake Shell Other
branch: master



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

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
  • 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)

The library comes with two programs for converting supported formats to plain text: command-line xyconv and graphical xyconvert.

The library is written in C++ and has C bindings. It can be used directly through FFI in several other languages, for example in Python.

API is described in the xylib/xylib.h file.

Licence: LGPL


Binary packages:



  • C++ compiler (all popular ones are tested: GCC, Clang, Visual C++)
  • 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.


Examples of supported files: sample-urls.

How to add a new format to xylib (for programmers):

xylib is used by:



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.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
Something went wrong with that request. Please try again.