# Envelop > The missing GraphQL plugin system: a lightweight library for customizing the GraphQL execution layer with composable, shareable plugins that work with any GraphQL server framework or schema. ## Documentation (Envelop v4) - [Introduction](https://the-guild.dev/graphql/envelop/docs.md): Envelop is a lightweight library for customizing the GraphQL execution layer with composable, shareable plugins that work with any GraphQL server framework or schema. - [First Steps](https://the-guild.dev/graphql/envelop/docs/getting-started.md) - [Integrations and Examples](https://the-guild.dev/graphql/envelop/docs/integrations.md) - [@envelop/core](https://the-guild.dev/graphql/envelop/docs/core.md) - [Sharing Envelops](https://the-guild.dev/graphql/envelop/docs/composing-envelop.md) - [Tracing](https://the-guild.dev/graphql/envelop/docs/tracing.md) - [Introduction](https://the-guild.dev/graphql/envelop/docs/plugins.md): How Envelop plugins hook into the parse, validate, execute and subscribe phases, and how to combine them into your own GraphQL setup. - [Building Plugins](https://the-guild.dev/graphql/envelop/docs/plugins/custom-plugin.md) - [Lifecycle](https://the-guild.dev/graphql/envelop/docs/plugins/lifecycle.md) - [Testing](https://the-guild.dev/graphql/envelop/docs/plugins/testing.md) - [TypeScript Support](https://the-guild.dev/graphql/envelop/docs/plugins/typescript.md) - [Migrating from v3 to v4](https://the-guild.dev/graphql/envelop/docs/guides/migrating-from-v3-to-v4.md) - [Securing Your GraphQL API](https://the-guild.dev/graphql/envelop/docs/guides/securing-your-graphql-api.md) - [Adding Authentication with Auth0](https://the-guild.dev/graphql/envelop/docs/guides/adding-authentication-with-auth0.md) - [Monitoring and Tracing](https://the-guild.dev/graphql/envelop/docs/guides/monitoring-and-tracing.md) - [Using GraphQL Features from the Future](https://the-guild.dev/graphql/envelop/docs/guides/using-graphql-features-from-the-future.md) - [Resolving Subscription DataLoader Caching Issues](https://the-guild.dev/graphql/envelop/docs/guides/resolving-subscription-data-loader-caching-issues.md) - [Adding a GraphQL Response Cache](https://the-guild.dev/graphql/envelop/docs/guides/adding-a-graphql-response-cache.md) - [Integrating with Databases](https://the-guild.dev/graphql/envelop/docs/guides/integrating-with-databases.md) ## Plugins - [useSentry](https://the-guild.dev/graphql/envelop/plugins/use-sentry.md): @envelop/sentry — This plugin collects errors and performance tracing for your execution flow, and reports it to Sentry. - [useStatsD](https://the-guild.dev/graphql/envelop/plugins/use-statsd.md): @envelop/statsd — This plugin tracks the complete execution flow, and reports metrics using StatsD (based on hot-shots). - [useSchema](https://the-guild.dev/graphql/envelop/plugins/use-schema.md): @envelop/core — This plugin is the simplest plugin for specifying your GraphQL schema. You can specify a schema created from any tool that emits GraphQLSchema object. - [useSchemaByContext](https://the-guild.dev/graphql/envelop/plugins/use-schema-by-context.md): @envelop/core — This plugin is the simplest plugin for specifying your GraphQL schema. You can specify a schema created from any tool that emits GraphQLSchema object, and you can choose to load the schema based on th - [useValidationRule](https://the-guild.dev/graphql/envelop/plugins/use-validation-rule.md): @envelop/core — This plugin is the simplest plugin for adding a validation rule to your GraphQL schema. You can specify any function that conforms to the ValidationRule type. - [useErrorHandler](https://the-guild.dev/graphql/envelop/plugins/use-error-handler.md): @envelop/core — This plugin triggers a custom function when execution encounters an error. - [useMaskedErrors](https://the-guild.dev/graphql/envelop/plugins/use-masked-errors.md): @envelop/core — Prevent unexpected error messages from leaking to the GraphQL clients. - [useEngine](https://the-guild.dev/graphql/envelop/plugins/use-engine.md): @envelop/core — This plugin can be used to customize the GraphQL Engine. - [useExtendContext](https://the-guild.dev/graphql/envelop/plugins/use-extend-context.md): @envelop/core — Easily extends the context with custom fields. - [useImmediateIntrospection](https://the-guild.dev/graphql/envelop/plugins/use-immediate-introspection.md): @envelop/immediate-introspection — Context building can be costly and require calling remote services. For simple GraphQL operations that only select introspection fields building a context is not necessary. - [useLogger](https://the-guild.dev/graphql/envelop/plugins/use-logger.md): @envelop/core — Logs parameters and information about the execution phases. You can easily plug your custom logger. - [usePayloadFormatter](https://the-guild.dev/graphql/envelop/plugins/use-payload-formatter.md): @envelop/core — Allow you to format/modify execution result payload before returning it to your consumer. - [useGraphQLJit](https://the-guild.dev/graphql/envelop/plugins/use-graphql-jit.md): @envelop/graphql-jit — This plugins replaces the original execute of GraphQL with graphql-jit. - [useParserCache](https://the-guild.dev/graphql/envelop/plugins/use-parser-cache.md): @envelop/parser-cache — This plugins adds simple LRU caching to your parse, to improve performance by caching the parsed result. - [useValidationCache](https://the-guild.dev/graphql/envelop/plugins/use-validation-cache.md): @envelop/validation-cache — This plugins adds simple LRU caching to your validate, to improve performance by caching the validation result. - [useDataLoader](https://the-guild.dev/graphql/envelop/plugins/use-data-loader.md): @envelop/dataloader — This plugin helps you to create a new DataLoader instance every time your context is being built. The created instance is injected into the context with the name you wish to use. - [useApolloTracing](https://the-guild.dev/graphql/envelop/plugins/use-apollo-tracing.md): @envelop/apollo-tracing — This plugin tracks execution and resolvers and reports it using apollo-tracing format (based on GraphQL extensions). - [useApolloDataSources](https://the-guild.dev/graphql/envelop/plugins/use-apollo-datasources.md): @envelop/apollo-datasources — This plugin integrates Apollo DataSources into Envelop. - [useOpenTelemetry](https://the-guild.dev/graphql/envelop/plugins/use-open-telemetry.md): @envelop/opentelemetry — This plugins integrates Open Telemetry tracing with your GraphQL execution. It also collects GraphQL execution errors and reports it as Exceptions. - [useGenericAuth](https://the-guild.dev/graphql/envelop/plugins/use-generic-auth.md): @envelop/generic-auth — This plugin allows you to implement custom authentication flow by providing a custom user resolver based on the original HTTP request. The resolved user is injected into the GraphQL execution context, - [useAuth0](https://the-guild.dev/graphql/envelop/plugins/use-auth0.md): @envelop/auth0 — This plugin validates an JWT token created by Auth0, and injects the Auth0 user properties into your GraphQL context. With this plugin, you can implement authentication and authorization in a simple w - [useGraphQLModules](https://the-guild.dev/graphql/envelop/plugins/use-graphql-modules.md): @envelop/graphql-modules — This plugins integrates graphql-modules execution lifecycle into the GraphQL execution flow. - [useRateLimiter](https://the-guild.dev/graphql/envelop/plugins/use-rate-limiter.md): @envelop/rate-limiter — This plugins uses graphql-rate-limit in order to limit the rate of calling queries and mutations. - [useDisableIntrospection](https://the-guild.dev/graphql/envelop/plugins/use-disable-introspection.md): @envelop/disable-introspection — This plugin injects the NoSchemaIntrospectionCustomRule validation rule exported from the graphql module to the validation phase for disabling introspection. - [useFilterAllowedOperations](https://the-guild.dev/graphql/envelop/plugins/use-filter-allowed-operations.md): @envelop/filter-operation-type — This plugins injects a validation rule into the validation phase that only allows the specified operation types (e.g. subscription, query or mutation). - [usePreloadAssets](https://the-guild.dev/graphql/envelop/plugins/use-preload-assets.md): @envelop/preload-assets — Inject a function for registering assets that should be preloaded on the client. The registered assets will be added under the extensions.preloadAssets key on the execution result. - [usePersistedOperations](https://the-guild.dev/graphql/envelop/plugins/use-persisted-operations.md): @envelop/persisted-operations — This plugin allow you to enforce execution of persisted (hashed) operation, using a custom store. - [useHive](https://the-guild.dev/graphql/envelop/plugins/use-graphql-hive.md): @graphql-hive/envelop — Hive Console + GraphQL Envelop - [useNewRelic](https://the-guild.dev/graphql/envelop/plugins/use-newrelic.md): @envelop/newrelic — Instrument your GraphQL application with New Relic reporting. Take advantage of Distributed tracing to monitor performance and errors whilst ultimately getting to the root cause of issues. - [useLiveQuery](https://the-guild.dev/graphql/envelop/plugins/use-live-query.md): @envelop/live-query — The easiest way of adding live queries to your GraphQL server! - [useFragmentArguments](https://the-guild.dev/graphql/envelop/plugins/use-fragment-arguments.md): @envelop/fragment-arguments — This plugins replaces the default GraphQL parser with an extended version that supports setting arguments on fragments. - [useApolloServerErrors](https://the-guild.dev/graphql/envelop/plugins/use-apollo-server-errors.md): @envelop/apollo-server-errors — This plugin exposes the same error structure as apollo-server. Use this plugin if you are moving to Envelop, and wish to get a compatibility layer for your errors, to make sure the clients receive the - [useOperationFieldPermissions](https://the-guild.dev/graphql/envelop/plugins/use-operation-field-permissions.md): @envelop/operation-field-permissions — Disallow executing operations that select certain fields. Useful if you want to restrict the scope of certain public API users to a subset of the public GraphQL schema, without triggering execution (e - [useExtendedValidation](https://the-guild.dev/graphql/envelop/plugins/use-extended-validation.md): @envelop/extended-validation — Extended validation plugin adds support for writing GraphQL validation rules, that has access to all execute parameters, including variables. - [usePrometheus](https://the-guild.dev/graphql/envelop/plugins/use-prometheus.md): @envelop/prometheus — This plugin tracks the complete execution flow, and reports metrics using Prometheus tracing (based on prom-client). - [useContextValuePerExecuteSubscriptionEvent](https://the-guild.dev/graphql/envelop/plugins/use-context-value-per-execute-subscription-event.md): @envelop/execute-subscription-event — Utilities for hooking into the ExecuteSubscriptionEvent>) phase. - [useResourceLimitations](https://the-guild.dev/graphql/envelop/plugins/use-resource-limitations.md): @envelop/resource-limitations — A rate-limit implementation based on resource limitations and static calculation of the score (similar to GitHub GraphQL API) - [useResponseCache](https://the-guild.dev/graphql/envelop/plugins/use-response-cache.md): @envelop/response-cache — - Skip the execution phase and reduce server load by caching execution results in-memory. - Customize cache entry time to live based on fields and types within the execution result. - Automatically in - [useApolloFederation](https://the-guild.dev/graphql/envelop/plugins/use-apollo-federation.md): @envelop/apollo-federation — This plugin integrates Apollo Federation Gateway into Envelop. - [maxAliasesPlugin](https://the-guild.dev/graphql/envelop/plugins/graphql-armor-max-aliases.md): @escape.tech/graphql-armor-max-aliases — Limit the number of aliases allowed in a GraphQL query. - [maxDepthPlugin](https://the-guild.dev/graphql/envelop/plugins/graphql-armor-max-depth.md): @escape.tech/graphql-armor-max-depth — Limit the depth allowed in a GraphQL query. - [maxDirectivesPlugin](https://the-guild.dev/graphql/envelop/plugins/graphql-armor-max-directives.md): @escape.tech/graphql-armor-max-directives — Limit the number of directives allowed in a GraphQL query. - [maxTokensPlugin](https://the-guild.dev/graphql/envelop/plugins/graphql-armor-max-tokens.md): @escape.tech/graphql-armor-max-tokens — Limit the number of tokens allowed in a GraphQL document. - [blockFieldSuggestions](https://the-guild.dev/graphql/envelop/plugins/graphql-armor-block-field-suggestions.md): @escape.tech/graphql-armor-block-field-suggestions — Block graphql field suggestion. - [useInngest](https://the-guild.dev/graphql/envelop/plugins/use-inngest.md): envelop-plugin-inngest — An envelop plugin that sends GraphQL response data to Inngest to help build event-driven applications.