---
title: Experimental Specification Features
sidebarTitle: Experimental Specification Features
---

# Experimental Specification Features

GraphQL.js v17 beta supports several GraphQL specification proposals. This page
lists experimental features available in the v17 beta line; not every feature
listed here is new to v17. These features are intentionally explicit: syntax
usually requires a parser option or schema directive, and execution behavior
usually requires a specific executor.

GraphQL.js-specific runtime APIs, such as abort signals, execution hooks, and
the harness API, are documented separately because they are not GraphQL language
features.

## Incremental delivery

Incremental delivery adds `@defer`, `@stream`, and execution results with
initial and subsequent payloads.

The relevant GraphQL.js APIs are `GraphQLDeferDirective`,
`GraphQLStreamDirective`, and `experimentalExecuteIncrementally()`.
GraphQL.js does not include the directives in `specifiedDirectives`; a schema
that uses them should add them explicitly and execute matching operations with
`experimentalExecuteIncrementally()`. If you add them programmatically with the
`GraphQLSchema` `directives` config property, include `specifiedDirectives` as
well. Providing `directives` replaces the default directive list, whose default
value is `specifiedDirectives`.

See [Defer and Stream](/docs/defer-stream).

## Fragment arguments

Fragment arguments add fragment-local variable definitions and fragment-spread
arguments. GraphQL.js exposes the syntax through the
`experimentalFragmentArguments` parser option. The AST surface includes
`FragmentArgumentNode`, and execution supports the resulting values.

See [Fragment Arguments](/docs/fragment-arguments).

## Directives on directive definitions

The directives-on-directives proposal adds `DIRECTIVE_DEFINITION` as a
directive location and allows directive metadata to be attached to directive
definitions and directive extensions.

GraphQL.js exposes the syntax through
`experimentalDirectivesOnDirectiveDefinitions`. The AST surface includes
`DirectiveLocation.DIRECTIVE_DEFINITION` and `DirectiveExtensionNode`.
Directive deprecation metadata is surfaced on `GraphQLDirective`,
introspection, and schema printing.

See [Directives on Directives](/docs/directives-on-directives).