Piqi – universal schema language: JSON, XML, Protocol Buffers data validation and conversion
OCaml Protocol Buffer Makefile Shell C C++
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
deps Fix build with ocaml >= 4.02 and ocamlfind < 1.5 Jan 24, 2015
doc Update piqi(1) manpage Jan 25, 2015
editors/vim first commit Jul 6, 2010
examples doc: change protobuf links from googlecode to github Jun 4, 2016
make Remove third-party convenience dependencies from the repo Oct 12, 2014
piqi Run travis-ci scripts on top of ocaml-travisci-skeleton Apr 5, 2015
src Switch to tail-recursive versions of List functions Jun 28, 2015
tests Fix incorrection piq validation when parsing options (alavrik/piqi-oc… Jun 1, 2016
.gitignore Optimize build: don't build ocaml stuff by default Jan 12, 2014
.travis-ci.sh Update opam file Jun 2, 2016
.travis.yml More travis-ci tweaks May 31, 2016
CHANGES piqi-0.6.13 release Jun 1, 2016
INSTALL doc: update windows cross-compilation instructions Jun 4, 2016
LICENSE first commit Jul 6, 2010
Makefile Add "make test" goal Apr 5, 2015
NOTICE Switch to tail-recursive versions of List functions Jun 28, 2015
README.md Bring NOTICE and copyright information up-to-date Oct 13, 2014
THANKS Add Ignas Vyšniauskas to THANKS Mar 21, 2014
TODO Remove tests dependency on environment Sep 2, 2014
VERSION Bump version number to 0.6.13-dev Jun 1, 2016
configure Fix build with ocaml >= 4.02 and ocamlfind < 1.5 Jan 24, 2015
opam Update opam file Jun 2, 2016


Build Status

Piqi is a universal schema language and a collection of tools built around it.

The Piqi language can be used to define schemas for JSON, XML, Google Protocol Buffers and some other data formats.

piqi is a command-line program that exposes some of the tools:

  • for validating, pretty-printing and converting data between JSON, XML, Protocol Buffers and Piq formats.

  • for working with the schemas, such as converting definitions between Piqi (.piqi) and Protocol Buffes (.proto), and "compiling" Piqi definitions into one of the supported portable data representation formats (JSON, XML, Protocol Buffers).

Other Piqi sub-projects include:

  • A multi-format (JSON, XML, Protocol Buffers) data serialization system for Erlang and OCaml.

  • Piq -- a human-friendly typed data representation language. It is designed to be more convenient for viewing and editing data compared to JSON, XML, CSV, S-expressions and other formats.

  • Piqi-RPC -- an RPC-over-HTTP system for Erlang. It provides a simple way to expose Erlang services via JSON, XML and Protocol Buffers over HTTP.

The Piqi project was inspired by Google Protocol Buffers and designed to be largely compatible with it. Like Protocol Buffers, Piqi relies on type definitions and supports schema evolution. The main differences is that Piqi has a richer data model, high-level modules, standard mappings to JSON and XML, and comes with a powerful data representation format (Piq). Also, Piqi is a lot more extensible.

Full project description and documentation can be found at http://piqi.org


See INSTALL for the installation instructions.

Bug tracker

If you found a bug or have any suggestions please submit a GitHub issue: https://github.com/alavrik/piqi/issues


Participation and patches are very welcome! Check TODO list for ideas.

The best way to submit a contribution is to open a pull request on GitHub against the master branch.

Mailing list

For discussions about the usage, development, and future of Piqi there is the Piqi Google Group: http://groups.google.com/group/piqi


Apache License Version 2.0


src/                  "piqi" command-line utility
piqilib/              common library used by piqi command-line tool and piqi-ocaml
piqi/                 Piqi self-specification
doc/                  project documentation

make/                 makefiles and build scripts
deps/                 third-party dependencies downloaded and built by `make deps`