flat: Principled and efficient bit-oriented binary serialization.

[ bsd3, data, library, parsing, serialization ] [ Propose Tags ]
Versions [RSS] 0.2, 0.2.2, 0.3, 0.3.2, 0.3.4, 0.4, 0.4.2, 0.4.4, 0.5, 0.5.2, 0.6
Change log CHANGELOG
Dependencies array (>=, base, bytestring (>=0.10.6), containers, deepseq (>=1.4), dlist, filepath (==, ghc-prim, hashable, HUnit (==, memory (>=0.14.10 && <=0.14.14), mono-traversable, pretty (>=1.1.2), primitive, QuickCheck (==2.10), semigroups, tasty (==, text, unordered-containers, vector [details]
License BSD-3-Clause
Copyright Copyright: (c) 2016-2020 Pasqualino `Titto` Assini
Author Pasqualino `Titto` Assini
Maintainer tittoassini@gmail.com
Revised Revision 1 made by phadej at 2021-10-18T06:36:21Z
Category Data, Parsing, Serialization
Home page http://quid2.org
Source repo head: git clone https://github.com/Quid2/flat
Uploaded by PasqualinoAssini at 2020-05-24T22:31:13Z
Distributions LTSHaskell:0.6, NixOS:0.6, Stackage:0.6
Reverse Dependencies 5 direct, 1 indirect [details]
Downloads 7048 total (143 in the last 30 days)
Rating 2.25 (votes: 2) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2020-05-24 [all 1 reports]

Readme for flat-0.4.4

[back to package description]

Build Status Hackage version Stackage Nightly Stackage LTS

Haskell implementation of Flat, a principled, language-independent and efficient binary data format.


For some hard data, see this comparison of the major haskell serialisation libraries.


  • Transfer time (serialisation time + transport time on the network + deserialisation at the receiving end): flat is usually faster for all but the highest network speeds
  • Size: flat produces significantly smaller binaries than all other libraries (3/4 times usually)
  • Serialization: store, persist and flat are faster
  • Deserialization: store, flat, persist and cereal are faster



Get the latest stable version from hackage.

Other Stuff You Might Like

ZM - Language independent, reproducible, absolute types

To decode flat encoded data you need to know the type of the serialised data.

This is ok for applications that do not require long-term storage and that do not operate in open distributed systems.

For those who do, you might want to supplement flat with something like ZM.

Ports for other languages

TypeScript-JavaScript and Purescript ports are under development.

Get in touch if you would like to help porting flat to other languages.