CHANGELOG: note v0.9.0
+v0.9.0
+===
+
+This is a v1.0 release candidate. The only breaking change in this release is
+that the kmsg package is now a dedicated module.
+
+### Why have a module for kmsg?
+
+The kmsg package is almost entirely autogenerated from the Kafka protocol.
+Unfortunately, the Kafka protocol is mostly designed for an object oriented
+language (i.e., Java), so some changes to the Kafka protocol that are
+non-breaking are breaking in the kmsg package. In particular, the Kafka changes
+a non-nullable field to a nullable field, the kmsg package must change from a
+non-pointer to a pointer. This is a breaking change. Even more rarely,
+sometimes Kafka changes a field's type by renaming its old version to
+"SomethingOld" and having a new version take the place of "Something". I would
+prefer the kmsg avoid "SomethingNew" to avoid deprecating the old field, so I
+also choose to rename fields.
+
+One option is to have absolutely everything be a pointer in the kmsg package,
+but this would create a lot of garbage and make using the API even worse. As
+well, I could just add newly named fields, but this makes things worse as time
+goes on, because the newer fields would be the ones with the worse names.
+
+In Go, if kmsg were stabilized, any protocol change would need to be a major
+version bump. We cannot get away with minor bumps and a big doc comment saying
+"deal with it", because we run into a transitive dependency issue: if user A
+uses franz-go at v1.1.0, and they also use a library that uses franz-go at
+v1.0.0, and there is an incompatible kmsg change, then the user's compilation
+breaks.
+
+So, we choose to have a dedicated module for kmsg which is unversioned. This
+avoids some transitive dependency issues.
+
+If you use the kmsg package directly, the only update you should need to do is:
+
+```
+go get -u github.com/twmb/franz-go/pkg/kmsg@latest
+```
+
+### Other potentially notable changes
+
+- [`f82e5c6`](https://github.com/twmb/franz-go/commit/f82e5c6) consumer: document that a nil / closed context is supported for polling
+- [`8770662`](https://github.com/twmb/franz-go/commit/8770662) very minor bugfix for producing: only opt in to more than 1req if idempotent
+- [`5c0a2c7`](https://github.com/twmb/franz-go/commit/5c0a2c7) bench: add -prometheus flag
+
v0.8.7
===
