Safeguard
Developer Tools•

Event schema compatibility modes and a safe upgrade order

BACKWARD, FORWARD, FULL and NONE explained, which side to upgrade first, and why schema checks are also a guard against bad or unexpected data.

Safeguard Security Team
3 min read

A schema compatibility mode decides whether a new event schema can be read by old consumers, new consumers, or both. In a registry using BACKWARD, upgrade consumers first. With FORWARD, upgrade producers first. FULL allows either order. NONE turns the checks off and shifts the risk to you.

The modes

The Confluent Schema Registry documentation defines them.

  • BACKWARD: consumers on the new schema can read data written with the previous schema.
  • FORWARD: consumers on the previous schema can read data written with the new schema.
  • FULL: both of the above.
  • NONE: compatibility checks are disabled.
  • Transitive variants: check the new schema against all earlier versions, not just the latest.

The default is BACKWARD, and it is non-transitive, so a new schema is compared only with the latest version.

Upgrade order

The same page gives the order. For BACKWARD, upgrade consumers before producers begin writing the new schema. For FORWARD, upgrade producers first, then consumers. For FULL, they can be upgraded independently. With NONE, no checks happen, so plan the rollout by hand.

It also lists a special case: Kafka Streams supports only the BACKWARD and FULL families, and the page says to upgrade Streams applications before the upstream producers.

Why this is a security topic

Schemas are an input contract. A consumer that reads a field it does not expect, or a field whose meaning changed, can misbehave in ways that look like bugs but behave like vulnerabilities: a role field that now holds a different value set, an amount field whose unit changed, a nullable field that used to be required.

Compatibility checks catch the structural cases. They do not catch meaning changes, so reviews still need a human question: does any consumer make a security decision from this field?

Practical rules

  1. Pick the mode on purpose and write it in the topic or subject documentation.
  2. Prefer the transitive variant when old data stays in the log for a long time and consumers may replay from the start.
  3. Do not set NONE to unblock a deploy. Add the field as optional instead.
  4. Restrict who can register or change schemas. Write access to the registry is a form of write access to every consumer's input.
  5. Still validate in the consumer. A schema says the shape is right, not that the values are sane.

Replay and long retention

Event logs can be replayed months later. A consumer built today must read what was written under older schemas. That is the argument for transitive modes and for keeping deserialization code that handles old versions.

Related reading

Access control on the log itself is a separate layer. See Kafka ACLs for least privilege.

Safeguard can help here in a small way. Its SBOM and dependency scanning covers the broker client libraries and service frameworks your code pulls in, and reachability analysis shows which advisories your services actually call. You can try a free scan at gold.safeguard.sh/scan.

Quick check

Which side upgrades first under BACKWARD?

Consumers, before producers start writing data in the new schema.

Does a compatible schema mean safe data?

No. It checks structure, not values. Consumers should still validate what they read.

Sources

Last reviewed: 19 October 2026.

Never miss an update

Weekly insights on software supply chain security, delivered to your inbox.

Self-healing security runs on Safeguard.

Your first fix PR is minutes away.

No sales call required, even your agent can complete the purchase over MCP.