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.

ExternalCodeReference.name

Phased out

Rewrite v1

Use className: instead. name: was a Norwegian-language alias kept for backward compatibility with legacy schemas; className: is the canonical key on ExternalCodeReference (used by @service, @error, and other directive sites that reference external Java code).

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)

Deprecated; OBJECT / INTERFACE unaffected

Rewrite v1

Remove @table from input types. The mutation’s write/read target is derived from the consuming field’s resolved target table, so the directive on the input is redundant. For a @mutation(typeName: DELETE) field, name the write target with @mutation(table: "…") on the field instead. A build warning fires per @table-on-input usage, except encoded-ID / scalar-return INSERT/UPSERT, where the input’s @table is still the only write-target signal until that derivation lands.

@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, a @tableMethod return, 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.

See also