Aggregator for every deprecated surface element the rewrite carries: directive arguments, input fields, and whole directives. The per-directive reference page is the canonical migration guide; this page is the index.

Source of truth

Two distinct sources feed this page:

  • SDL @deprecated() markers on directive arguments and input fields. The rewrite’s directives.graphqls carries them inline; the GraphQL spec only allows the marker on FIELD_DEFINITION, ARGUMENT_DEFINITION, INPUT_FIELD_DEFINITION, and ENUM_VALUE, so this is the machine-detectable surface.

  • Whole-directive deprecations, which the GraphQL spec cannot mark inline (the @deprecated directive is not allowed on a directive definition). These are documented prose-side on the directive’s reference page and aggregated below in a separate section.

The DeprecationsDocCoverageTest verifier asserts every SDL @deprecated() marker has a row in the table below; whole-directive deprecations are an explicit hand-maintained list (the verifier covers them via a small allow-list).

The rewrite’s @deprecated(reason:) markers do not carry a structured removal version, and the project does not currently version the directive surface as a separate cadence. "Status" carries the practical signal (discouraged, transitional, removed) and "Migration" names the replacement.

Deprecated arguments and input fields

Site Status Since Migration

@asConnection(connectionName:)

Discouraged transition mechanism

Rewrite v1

Drop the override and let the generator synthesize {ParentType}{FieldName}Connection. Each connection field should own its own Connection type; sharing one across fields conflates distinct semantic contexts (different parents, filters, orders) at the type level.

Removed

Surfaces that completed the deprecation cycle. A schema still carrying one does not build, so these rows exist to name the replacement rather than to warn.

Site Removed in Migration

ExternalCodeReference.name

Rewrite v1

Use className: with the fully qualified class name. name: was a short alias resolved through the Maven plugin’s <namedReferences> mappings; both the argument and that plugin parameter are gone, so a schema carrying name: now fails to load with an unknown-field error from the schema parser. See How-to: External code references.

Deprecated whole directives and directive locations

The GraphQL spec does not allow @deprecated on a directive definition, nor on a single directive location (a scope in the on clause). Deprecations the spec cannot mark inline, whether the whole directive or one of its locations, are documented in the directive’s own reference page and listed here for visibility.

Directive Status Since Migration

@table (on INPUT_OBJECT)

Ignored, warns per usage; will be rejected. OBJECT / INTERFACE unaffected

Rewrite v1

Remove @table from input types. The directive is accepted there and then ignored: its name: argument is never read and the input classifies exactly as it would without it, so a schema still carrying it builds with warnings rather than errors. Note that an input whose @table named a different table from its consumer’s is not migrated silently-but-correctly; the declared table is discarded and the warning is the only signal. An input’s fields resolve against each consuming field’s table, so filters and lookup arguments need no directive. For a @mutation(typeName: INSERT) or UPDATE field, the write target is derived from the return (a @table return, or a carrier payload’s @table-element data field); for an encoded-ID / scalar return, name it with @mutation(table: "…") on the field. For a @mutation(typeName: DELETE) field, name the write target with @mutation(table: "…") on the field.

@index

Backward-compatibility alias

Rewrite v1

Replace @index(name: "X") with @order(index: "X"). The two forms generate identical code; only the directive name and parameter key change. @order also offers fields: and primaryKey: modes that @index cannot express.

@record

Ignored (parsed, drives nothing)

Rewrite v1

Remove it. The backing Java class is now inferred from the producing field’s reflected type: an @service method return (or parameter, for inputs), a @table resolution, or a parent-accessor chain. A reachable type still carrying @record emits a build warning (redundant, shadowed-by-@table, or disagrees-with-reflection). The directive stays declared so existing schemas keep parsing.

Rejected, not deprecated

These directives parse but the rewrite refuses to generate against them. They are not deprecations (a deprecated surface still works); they are explicit rejections that fail the build with a structured diagnostic. Listed here because users sometimes confuse the categories:

  • @notGenerated is rejected. Remove it from the schema; the rewrite has no equivalent escape hatch.

@table on an INPUT_OBJECT is not in this category: it is a live deprecation (the first row of the table above), accepted and ignored with a build warning, and only a future release will move it here.

See also