What are plugins?
Kong is a Lua application designed to load and execute Lua or Go modules, which
we commonly refer to as plugins. Kong provides a set of standard Lua
plugins that get bundled with Kong Gateway. The set of plugins you
have access to depends on your installation: open-source, enterprise, or either
of these Kong Gateway options running on Kubernetes.
Custom plugins can also be developed by the Kong Community, and are supported
and maintained by the plugin creators. If they are published on the Kong Plugin
Hub, they are called Community or Third-Party plugins. For the full explanation
of what this means, see the Terminology section.
Why use plugins?
Plugins provide advanced functionality and extend the use of the Kong Gateway,
which allows you to add new features to your implementation. Plugins can be configured to run in
a variety of contexts, ranging from a specific Route to all Upstreams, and can
execute actions inside Kong before or after a request has been proxied to the
upstream API, as well as on any incoming responses.
Plugin compatibility with deployment types
Kong Gateway can be deployed in a variety of ways, and not all plugins
are fully compatible with each mode. See Plugin Compatibility
for a comparison.
- An extension to the Kong Gateway, written in Lua or Go.
- Kong plugin
- A plugin developed, maintained, and supported by Kong.
- Third-party or Community plugin
- A custom plugin developed, maintained, and supported by an external developer,
not by Kong. Kong does not test these plugins, or update their version
compatibility. If you need more information or need to have a third-party plugin
updated, contact the maintainer through the Support link in a plugin
- The Kong entity representing an external upstream API or microservice.
- The Kong entity representing a way to map downstream requests to upstream
- An entity that makes requests for Kong to proxy. It represents either a user
or an external service.
- A unique string associated with a Consumer; also referred to as an API key.
- The Kong entity that refers to your own API/service sitting behind Kong,
to which client requests are forwarded.
Each plugin has its own internal versioning scheme. These versions differ from
Kong Gateway versions.
For plugins developed and maintained by Kong, plugin versioning generally has
no impact on your implementation, other than to find out which versions of Kong
contain which plugin features. Kong plugins are bundled with the
Kong Gateway, so compatible plugin versions are already associated
with the correct version of Kong.
Because third-party plugins are not maintained by Kong and are not bundled with
the Kong Gateway, version compatibility is a bigger concern. See each
individual plugin’s page for its tested compatibility.
If the versions on the plugin page are outdated, contact the maintainer through
the Support link in the plugin documentation’s sidebar.
Developing custom plugins
Kong provides an entire development environment for developing plugins,
including Lua and Go SDKs, database abstractions, migrations, and more.
Plugins consist of modules interacting with the request/response objects or
streams via a Plugin Development Kit (or PDK) to implement arbitrary logic.
Kong provides PDKs for two languages: Lua and Go. Both of these PDKs are sets
of functions that a plugin can use to facilitate interactions between plugins
and the core (or other components) of Kong.
To start creating your own plugins, check out the PDK documentation:
- Kong Gateway (OSS)
- Kong Gateway (Enterprise)
Contributing custom plugins
If you are interested in sharing your custom plugin with other Kong users, you
must also submit plugin reference documentation to the Kong Plugin Hub. See the
for adding documentation.