# Changelog for wireform-proto
## 0.1.0.0 -- 2026-05-16
Initial release.
### Highlights
* `.proto` IDL parser (proto2 + proto3) with full reference resolution.
* Pure-text Haskell code generator (`Proto.CodeGen`) that emits records,
enums, oneofs, maps, services, well-known type imports, and
extension bindings -- plus a serialized `FileDescriptorProto` blob
for each module.
* Annotation-driven Template Haskell deriver (`Proto.TH.Derive`) that
emits wire codecs (`MessageEncode` / `MessageDecode`),
`IsMessage`, and `ProtoMessage` schema metadata for hand-written
Haskell records. JSON instances (`ToJSON` / `FromJSON`) and `Hashable`
are derived separately via `deriving anyclass` on the generated types.
* `Proto.TH.loadProto` Template Haskell splice that runs the parser
and the deriver together for an in-place `data` + instances bundle.
* Inline `[proto| ... |]` quasi-quoter for one-off types
(`Proto.TH.QQ`).
* `Proto.Setup` Cabal `Setup.hs` integration hook for pre-build
protobuf code generation.
* `protoc-gen-wireform` `protoc` plugin (`--wireform_out=DIR`).
* Allocation-disciplined wire-format primitives: unboxed-sum decoder
result (`Proto.Wire.Decode`), two-pass sized encoder
(`Proto.SizedBuilder`, `Proto.Encode.Archetype`), pre-computed
field tags, packed repeated field encode/decode, branchless varint
sizing, lazy submessage decoding.
* Proto3 canonical JSON mapping with `json_name` override, base64
bytes, string-encoded 64-bit integers, and NaN/Infinity sentinels.
Generated types get `ToJSON` / `FromJSON` instances automatically;
the implementation lives in `Proto.Internal.JSON` and
`Proto.Internal.JSON.WellKnown`.
* Well-known types (`Timestamp`, `Duration`, `Any`, `FieldMask`,
`Struct`, `Value`, `ListValue`, `NullValue`, `Empty`, `Wrappers`,
`SourceContext`) generated from the bundled `.proto` files by the
`regen-wkt` executable (`cabal run regen-wkt`). Supplementary logic
( `Proto.Google.Protobuf.*.Util`) ships `packAny`, RFC 3339
formatting, `TypeRegistry`, `FieldMask` ops. Well-known types are
regenerated from the bundled `.proto` files by `cabal run regen-wkt`.
* Proto2 typed extensions (`Proto.Extension.HasExtensions`),
unknown-field round-trip preservation, dynamic / untyped messages
(`Proto.Dynamic`), `.pbtxt` text format I/O
(`Proto.TextFormat`), and a runtime `MessageRegistry`
(`Proto.Registry`).
* Streaming and incremental decoders
(`Proto.Decode.Stream`, `Proto.Decode.Streaming`).
* gRPC service-method codegen. `loadProto` and the other codegen entry
points generate typed service/method descriptor values. Wire framing
and transport live in the `wireform-grpc` package.
* Conformance test driver (`Proto.Conformance`) that exposes the
protocol expected by the upstream
[`conformance_test_runner`](https://github.com/protocolbuffers/protobuf/tree/main/conformance).
Today's baseline against `protocolbuffers/protobuf@v28.2`:
2675 successes, 0 unexpected failures across proto3 + proto2,
binary + JSON suites.