In heavy development — not yet on Hackage

One ecosystem.
Every format and protocol.

Stop gluing together forty unrelated packages. wireform gives you serialization, codegen, streaming, messaging, and lake-format analytics on a single, SIMD-accelerated core — with one consistent set of APIs across every format.

40+
format packages
1
shared core
1
deriver vocabulary
0
codegen binaries needed
Supported formats
Protocol Buffers Avro Thrift MessagePack CBOR BSON XML HTML5 YAML TOML Parquet Arrow ORC Iceberg Kafka gRPC Cap'n Proto FlatBuffers Bond ASN.1 Ion EDN Bencode Fory CSV NDJSON Delta Lake Hudi Lance

What's in the box

Every package draws on the same optimized core and the same annotation deriver. Pick one format or all of them — you only build what you import.

Schema & IDL
Protobuf · Avro · Thrift · Bond · Cap’n Proto · FlatBuffers · ASN.1
Binary values
CBOR · MessagePack · BSON · Ion · Bencode · Fory
Text & markup
XML · HTML5 · YAML · TOML · CSV · EDN
Analytics & lake
Parquet · Arrow · ORC · Iceberg · Delta · Hudi · Lance
Messaging
Kafka · gRPC · HTTP/1·2 · WebSocket
Validation
CEL · protovalidate
One deriver, every backend

Derive once, serialize everywhere

Define your type once and add the formats you need. The same annotation vocabulary — field overrides, rename, map keys — drives every backend, so a pattern learned in one format carries straight over to the next.

data Person = Person { name :: !Text, age :: !Int }
  deriving stock (Show, Eq, Generic)
  deriving anyclass (ToMsgPack, FromMsgPack,
                     ToCBOR,   FromCBOR,
                     ToYAML,   FromYAML)
Schema languages

Generate types from any IDL

Point wireform-gen at a schema file and get idiomatic Haskell — or use a Template Haskell splice and skip the CLI. No protoc binary, no generated files to commit.

-- Template Haskell: read the .proto at compile time
$(loadProto "proto/person.proto")

-- Or the wireform-gen CLI for 8 schema languages:
--   wireform-gen proto  -i api.proto       -o gen/
--   wireform-gen avro   -i user.avsc       -o gen/
--   wireform-gen thrift -i service.thrift  -o gen/
Documents

Real XML and HTML processing

A fast, spec-compliant XML parser with XPath queries and XSLT, and a full HTML5 tree builder with CSS selectors and a streaming rewriter.

-- CSS selectors on parsed HTML, like the browser
let headings = querySelectorAll doc "article.post > h2"

-- XPath-style queries over the XML DOM
let titles = query "//book/title" catalog
Lake formats

Analytics without leaving Haskell

Read and write Parquet, Arrow, and ORC. Query Iceberg, Delta, Hudi, and Lance tables through native readers with predicate pushdown and column projection. No Spark, no Python bridge, no extra runtimes.

-- Column projection + predicate pushdown, in pure Haskell
let iter = decodeProjectedFilteredIter
             pf
             (Just ["user_id", "event_type", "timestamp"])
             (col "status" .== lit "active")
Streaming & RPC

Kafka and gRPC, built in

A full native Kafka client — producers, consumers, transactions, consumer groups — plus a Kafka Streams DSL. A from-scratch gRPC implementation with bidirectional streaming.

-- Produce, then process inside a transaction
withTransaction producer $ \tx ->
  for_ events (produce tx "orders")

Add wireform to your project

No external tools, no codegen binaries, no extra runtimes. One core, one deriver, forty-plus formats — all native Haskell.

Read the getting started guide →