Skip to content

Add support for directives on directive definitions#1206

Open
BoD wants to merge 7 commits into
graphql:mainfrom
BoD:directivesOnDirectives2
Open

Add support for directives on directive definitions#1206
BoD wants to merge 7 commits into
graphql:mainfrom
BoD:directivesOnDirectives2

Conversation

@BoD
Copy link
Copy Markdown
Contributor

@BoD BoD commented Dec 18, 2025

Adds the ability to apply directives to directive definitions and to deprecate directives, with this syntax:

directive @onDirective on DIRECTIVE_DEFINITION

directive @foo @onDirective on OBJECT

directive @baz @deprecated(reason: "...") on OBJECT

extend directive @quux @deprecated(reason: "...")

With @IvanGoncharov's blessing, this PR is a continuation and updated version of #907 which I think can be closed. (There's also prior art in #567).

Motivation

Allow applying directive-exclusive features (e.g. @specifyBy, @deprecated) on directives.

For instance, on Apollo Kotlin we'd like to deprecate some client side directives.

@netlify
Copy link
Copy Markdown

netlify Bot commented Dec 18, 2025

Deploy Preview for graphql-spec-draft ready!

Name Link
🔨 Latest commit a257894
🔍 Latest deploy log https://app.netlify.com/projects/graphql-spec-draft/deploys/69457e3ea85f4f00083836c9
😎 Deploy Preview https://deploy-preview-1206--graphql-spec-draft.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@BoD
Copy link
Copy Markdown
Contributor Author

BoD commented Jan 6, 2026

Related graphql-js PR: graphql/graphql-js#4521

@martinbonnin
Copy link
Copy Markdown
Contributor

Another use case: @ignore

@leebyron leebyron added 📄 Draft (RFC 2) RFC Stage 2 (See CONTRIBUTING.md) and removed 💡 Proposal (RFC 1) RFC Stage 1 (See CONTRIBUTING.md) labels Apr 2, 2026
yaacovCR added a commit to graphql/graphql-js that referenced this pull request Apr 24, 2026
Allow directives on directive definitions, based on [this spec PR](graphql/graphql-spec#1206) which introduces this syntax:

```graphql
directive @onDirective on DIRECTIVE_DEFINITION

directive @foo @onDirective on OBJECT

directive @baz @deprecated(reason: "...") on OBJECT

extend directive @quux @deprecated(reason: "...")
```

Co-authored-by: Martin Bonnin <martin@mbonnin.net>
Co-authored-by: Jerel Miller <jerelmiller@gmail.com>
Co-authored-by: Yaacov Rydzinski <yaacovCR@gmail.com>
@benjie benjie added the 🚀 Next Stage? This RFC believes it is ready for the next stage label May 7, 2026
Comment thread spec/Section 3 -- Type System.md

### Directive Extensions

DirectiveExtension : extend directive @ Name Directives[Const]
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is interesting: should we be able to extend a directive with new arguments? We can extend a type with new fields that themselves have new arguments.

There is even a special Schema Coordinate for directive arguments.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good question!

In my opinion, I think yes it would probably make sense in principle to have that ability, even if for consistency alone.
That being said, I would rather tackle this in a separate change later, and based on demand for it.

Curious to know what others think!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

📄 Draft (RFC 2) RFC Stage 2 (See CONTRIBUTING.md) 🚀 Next Stage? This RFC believes it is ready for the next stage

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants