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

# Experimental Specification Features

GraphQL.js v17 adds several experimental GraphQL specification proposals.
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).

## Disabling error propagation

Disabling error propagation lets an execution error resolve the errored response
position to `null` without nulling out non-null parent fields. GraphQL.js exposes
this through the experimental operation directive
`@experimental_disableErrorPropagation`.

The motivations are:

- Preserve useful partial data. A failed field should not necessarily remove
  sibling response data that resolved successfully.
- Keep normalized caches safe. A bubbled ancestor `null` can look like a real
  object update when only one descendant field failed.
- Separate execution errors from true semantic nullability. Schema nullability
  should be able to express whether `null` is a normal domain value, not whether
  a resolver might fail.

This feature is part of a longer nullability and error-handling proposal thread.
The latest proposals to follow are
[Error Behavior](https://github.com/graphql/graphql-spec/pull/1163), which
defines client-selected `onError` modes, and
[Service Capabilities](https://github.com/graphql/graphql-spec/pull/1208), which
pulls the capabilities work out into the introspection mechanism clients use to
discover support, accepted modes, and default behavior.

See [Disabling Error Propagation](/docs/disabling-error-propagation).

## Fragment arguments

Fragment arguments let named fragments declare local variables and let named
fragment spreads pass values for them. 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).