API support matrix
kaas registers 36 Kafka API keys. This table is generated from the
ApiSpec registry (crates/kaas-codec/src/api/registry.rs) — the same table
that builds the ApiVersions response — so the version ranges below are the
wire truth, not documentation aspiration. "Flexible" is the first version
using KIP-482 flexible encoding (see Wire protocol & framing).
| Key | API | Versions | Flexible | KIPs | Reference |
|---|---|---|---|---|---|
| 0 | Produce | v3–v9 | v9+ | KIP-98 · KIP-360 · KIP-32 | Produce |
| 1 | Fetch | v4–v12 | v12+ | KIP-98 · KIP-227 | Fetch |
| 2 | ListOffsets | v1–v7 | v6+ | KIP-32 | ListOffsets |
| 3 | Metadata | v1–v10 | v9+ | KIP-516 | Metadata |
| 8 | OffsetCommit | v2–v8 | v8+ | — | OffsetCommit |
| 9 | OffsetFetch | v1–v8 | v6+ | KIP-447 | OffsetFetch |
| 10 | FindCoordinator | v0–v4 | v3+ | — | FindCoordinator |
| 11 | JoinGroup | v2–v9 | v6+ | KIP-345 · KIP-394 · KIP-800 | JoinGroup |
| 12 | Heartbeat | v0–v4 | v4+ | KIP-345 | Heartbeat |
| 13 | LeaveGroup | v0–v5 | v4+ | KIP-345 · KIP-800 | LeaveGroup |
| 14 | SyncGroup | v0–v5 | v4+ | KIP-345 | SyncGroup |
| 15 | DescribeGroups | v0–v5 | v5+ | — | DescribeGroups |
| 16 | ListGroups | v0–v4 | v3+ | — | ListGroups |
| 17 | SaslHandshake | v0–v1 | — | — | SaslHandshake |
| 18 | ApiVersions | v0–v4 | v3+ | KIP-482 | ApiVersions |
| 19 | CreateTopics | v0–v7 | v5+ | KIP-516 | CreateTopics |
| 20 | DeleteTopics | v0–v5 | v4+ | — | DeleteTopics |
| 21 | DeleteRecords | v0–v2 | v2+ | KIP-107 | DeleteRecords |
| 22 | InitProducerId | v0–v4 | v2+ | KIP-98 · KIP-360 | InitProducerId |
| 24 | AddPartitionsToTxn | v0–v3 | v3+ | KIP-98 | AddPartitionsToTxn |
| 25 | AddOffsetsToTxn | v0–v3 | v3+ | KIP-98 · KIP-447 | AddOffsetsToTxn |
| 26 | EndTxn | v0–v3 | v3+ | KIP-98 | EndTxn |
| 27 | WriteTxnMarkers | v0–v1 | v1+ | KIP-98 | WriteTxnMarkers |
| 28 | TxnOffsetCommit | v0–v3 | v3+ | KIP-447 | TxnOffsetCommit |
| 29 | DescribeAcls | v0–v3 | v2+ | KIP-290 | DescribeAcls |
| 30 | CreateAcls | v0–v3 | v2+ | KIP-290 | CreateAcls |
| 31 | DeleteAcls | v0–v3 | v2+ | KIP-290 | DeleteAcls |
| 32 | DescribeConfigs | v0–v4 | v4+ | — | DescribeConfigs |
| 35 | DescribeLogDirs | v0–v1 | — | — | DescribeLogDirs |
| 36 | SaslAuthenticate | v0–v2 | v2+ | — | SaslAuthenticate |
| 37 | CreatePartitions | v0–v3 | v2+ | KIP-195 | CreatePartitions |
| 42 | DeleteGroups | v0–v2 | v2+ | — | DeleteGroups |
| 44 | IncrementalAlterConfigs | v0–v1 | v1+ | KIP-339 | IncrementalAlterConfigs |
| 47 | OffsetDelete | v0–v0 | — | — | OffsetDelete |
| 48 | DescribeClientQuotas | v0–v1 | v1+ | KIP-546 | DescribeClientQuotas |
| 49 | AlterClientQuotas | v0–v1 | v1+ | KIP-546 | AlterClientQuotas |
Apache 3.7 keys kaas does not serve
Clients discover the served surface via ApiVersions, so an absent key is a clean "unsupported", not an error path. Each absence is either a tracked follow-up or a documented non-goal:
| Key | API | Status |
|---|---|---|
| 23 | OffsetForLeaderEpoch | KIP-101 partial — storage-side lookup returns the (-1,-1) sentinel; key unregistered. Open follow-up. |
| 33 | AlterConfigs (legacy) | Superseded by IncrementalAlterConfigs (key 44) but still served by Apache 3.7. Open follow-up. |
| 50 | DescribeUserScramCredentials | KIP-554 partial — credential rotation is operator-side only; no codec module, no dispatch. Open follow-up. |
| 51 | AlterUserScramCredentials | KIP-554 partial — same as key 50. Open follow-up. |
| 60 | DescribeCluster | Not yet registered; AdminClient falls back to Metadata. Open follow-up. |
Inter-broker/KRaft keys (LeaderAndIsr, StopReplica, UpdateMetadata, ControlledShutdown, the quorum/Envelope family), delegation-token keys, and tiered-storage-only surfaces are deliberately absent — see Non-goals.