Repository navigation
Highlight: Schema Registry headers survive jq
kite consume --json now always prints valid UTF-8 JSON. A key, value, or header value that isn't valid UTF-8 now goes into a sibling _b64 field (standard padded base64). Before, kite wrote those raw bytes and jq and other JSON tools silently replaced them with U+FFFD. This covers Confluent Schema Registry's binary __value_schema_id header (0x01 + 16-byte GUID) as well as Avro/Protobuf payloads.
{"key":"o-1","headers":[{"key":"__value_schema_id","value_b64":"AW2jNtjx0w+YTEfQPuihShI="}],"value":"{\"order_id\":1}"}kite produce --jsonacceptskey_b64,value_b64, and array-headervalue_b64. Sokite consume --json | jq ... | kite produce --jsoncopies schema-ID headers and binary payloads byte for byte.- Text output is unchanged: valid UTF-8 stays in
key,value, and headervalue. - The bytes on Kafka don't change, so Confluent serializers and deserializers still see the same binary schema IDs.
- Invalid base64, or a record with both
valueandvalue_b64, is rejected with the line number.
Behavior change: for records whose bytes aren't UTF-8, scripts now find .value_b64 (or .key_b64) instead of .value. Decode with base64 -d, e.g. jq -r .value_b64 | base64 -d. The header object form on produce ({"h":"v"}) is still string-only; use the array form for binary headers.
Also
kite updatefinds the latest release through the GitHubreleases/latestredirect instead of api.github.com, so it no longer runs into the 60 requests/hour API limit.
What's Changed
- kite update: resolve the latest tag via the releases/latest redirect, not api.github.com by @devin-ai-integration[bot] in #88
- --json: base64 fields that aren't valid UTF-8 (key_b64/value_b64/header value_b64) so output is jq-safe by @devin-ai-integration[bot] in #89
- release prep: bump version to 0.4.0, point install examples at v0.4.0, add release notes by @devin-ai-integration[bot] in #90
Full Changelog: v0.3.1...v0.4.0