Skip to content
Kong Docs are moving soon! Our docs are migrating to a new home. You'll be automatically redirected to the new site in the future. In the meantime, view this page on the new site!
Kong Logo | Kong Docs Logo
  • Docs
    • Explore the API Specs
      View all API Specs View all API Specs View all API Specs arrow image
    • Documentation
      API Specs
      Kong Gateway
      Lightweight, fast, and flexible cloud-native API gateway
      Kong Konnect
      Single platform for SaaS end-to-end connectivity
      Kong AI Gateway
      Multi-LLM AI Gateway for GenAI infrastructure
      Kong Mesh
      Enterprise service mesh based on Kuma and Envoy
      decK
      Helps manage Kong’s configuration in a declarative fashion
      Kong Ingress Controller
      Works inside a Kubernetes cluster and configures Kong to proxy traffic
      Kong Gateway Operator
      Manage your Kong deployments on Kubernetes using YAML Manifests
      Insomnia
      Collaborative API development platform
  • Plugin Hub
    • Explore the Plugin Hub
      View all plugins View all plugins View all plugins arrow image
    • Functionality View all View all arrow image
      View all plugins
      AI's icon
      AI
      Govern, secure, and control AI traffic with multi-LLM AI Gateway plugins
      Authentication's icon
      Authentication
      Protect your services with an authentication layer
      Security's icon
      Security
      Protect your services with additional security layer
      Traffic Control's icon
      Traffic Control
      Manage, throttle and restrict inbound and outbound API traffic
      Serverless's icon
      Serverless
      Invoke serverless functions in combination with other plugins
      Analytics & Monitoring's icon
      Analytics & Monitoring
      Visualize, inspect and monitor APIs and microservices traffic
      Transformations's icon
      Transformations
      Transform request and responses on the fly on Kong
      Logging's icon
      Logging
      Log request and response data using the best transport for your infrastructure
  • Support
  • Community
  • Kong Academy
Get a Demo Start Free Trial
Contribution guidelines
  • Home icon
  • Style guide and contribution guidelines
  • Documenting Kong-owned plugins
github-edit-pageEdit this page
report-issueReport an issue
  • Kong Gateway
  • Kong Konnect
  • Kong Mesh
  • Kong AI Gateway
  • Plugin Hub
  • decK
  • Kong Ingress Controller
  • Kong Gateway Operator
  • Insomnia
  • Kuma

  • Docs contribution guidelines
  • Contribution guidelines
  • Style guidelines
    • Style guide
    • Word choice and naming
    • Notes and other notices
    • Diagrams
    • Documenting user interfaces
    • Contribution templates
    • Plugin documentation
      • Documenting Kong-owned plugins
      • Documenting partner plugins
  • Markdown rules and formatting
    • Markdown rules
    • Reusable content
    • Variables
    • Single-sourced versions
    • Single-sourced plugins
    • Conditional rendering
  • Community
    • Welcome to the Kong Docs community
    • Community expectations
    • Hackathons
enterprise-switcher-icon Switch to OSS
On this pageOn this page
  • Prerequisites
  • Add a new plugin doc
  • Adding images
  • Adding plugin examples
    • OpenAI Example
  • Test and submit plugin
  • Custom plugins and documentation

Documenting Kong-owned plugins

Plugin documentation is posted on the Plugin Hub. All Kong plugin docs must follow a specific template.

Looking for instructions on submitting a partner plugin? See the Partner Plugins guide.

Prerequisites

  • You have a parallel plugin PR in one of the Kong source code repositories.
  • You plugin has description for every config parameter field in its Lua schema file.
  • You have set up a local clone of the docs repository.

Add a new plugin doc

  1. In your local clone of the docs repository, create a new branch for your plugin.

  2. Create a subdirectory for the plugin within the _app/_hub/kong-inc directory. For example, _app/_hub/kong-inc/your-plugin.

  3. Copy the contents of the /docs/templates/kong-plugin-template directory into your own plugin’s directory.

    You should now have a directory that looks like this:

     _app
       _hub
         kong-inc
           example-plugin
             how-to
               _index.md
             _changelog.md
             overview
               _index.md
             _metadata
               _index.yml
             versions.yml
    
  4. Populate the files in the directory with your own info:

    • _metadata/_index.yml: Sets the metadata for the plugin. Follow the instructions in the file to fill it out.

    • overview/_index.md: Introduction for your plugin. This is where you explain how the plugin works and why someone would want to use it.

    • _changelog.md: A changelog for your plugin. For the first entry, just note when the plugin was published.

    • how-to/_index.md: Markdown documentation on how to use the plugin. You can create any number of files in the how-to folder, e.g. how-to/_getting-started.md, how-to/_metrics.md, etc.

    • versions.yml: Set the Kong Gateway version that the plugin is introduced in. This will generate a doc for every subsequent gateway version, starting with the one you specify.

  5. Add an icon for your plugin into the /app/assets/images/icons/hub directory.

    Plugin icons are required for publication on the Kong plugin hub. Icons should be a PNG or SVG file, 120x120 pixels in size.

    The filename of your image should be kong-inc_plugin-name. For example, kong-inc_oas-validation.

  6. Create a basic example for your plugin in the plugin toolkit repository.

    This example will be validated against the plugin’s schema, so make sure to include all required configuration parameters.

Adding images

If you have any diagrams or screenshots that you want to add to your plugin documentation:

  1. Add to the images into the app/_assets/images/docs/plugins directory.

    Make sure that any screenshots follow the screenshot guidelines.

  2. Insert images into any of the markdown files for your plugin using the following format:

     ![Authentication flow diagram](/assets/images/docs/plugins/my-plugin-auth-flow.png)
     > *Figure 1: Diagram showing an OAuth2 authentication flow with Keycloak.*
    

Adding plugin examples

You can use plugin_example to easily define and format examples using the plugin.

The example accepts all plugin config, and you can configure it to output any combination of targets and formats that you need.

Possible targets:

  • service
  • route
  • consumer
  • consumer_group
  • global

Possible formats:

  • curl
  • konnect
  • yaml
  • kubernetes
  • terrafrom

Here’s an example of how to format plugin_example using OpenAI and AI Semantic Cache:

{% plugin_example %}
title: OpenAI Example
plugin: kong-inc/ai-semantic-cache
name: ai-semantic-cache
config:
  embeddings:
    auth:
      header_name: Authorization
      header_value: Bearer OPENAI_API_KEY
  model:
    provider: openai
    name: text-embedding-3-large
    options:
      upstream_url: https://api.openai.com/v1/embeddings
  vectordb:
    dimensions: 3072
    distance_metric: cosine
    strategy: redis
    threshold: 0.1
    redis:
      host: redis-stack.redis.svc.cluster.local
      port: 6379
targets:
  - route
formats:
  - curl
  - konnect
  - yaml
  - kubernetes
  - terraform
{% endplugin_example %}

And here’s how that example would render:

OpenAI Example

Enable on a route
Kong Admin API
Konnect API
Kubernetes
Declarative (YAML)

Make the following request:

curl -X POST http://localhost:8001/routes/{routeName|Id}/plugins \
    --header "accept: application/json" \
    --header "Content-Type: application/json" \
    --data '
    {
  "name": "ai-semantic-cache",
  "config": {
    "embeddings": {
      "auth": {
        "header_name": "Authorization",
        "header_value": "Bearer OPENAI_API_KEY"
      }
    },
    "model": {
      "provider": "openai",
      "name": "text-embedding-3-large",
      "options": {
        "upstream_url": "https://api.openai.com/v1/embeddings"
      }
    },
    "vectordb": {
      "dimensions": 3072,
      "distance_metric": "cosine",
      "strategy": "redis",
      "threshold": 0.1,
      "redis": {
        "host": "redis-stack.redis.svc.cluster.local",
        "port": 6379
      }
    }
  }
}
    '

Replace ROUTE_NAME|ID with the id or name of the route that this plugin configuration will target.

Make the following request, substituting your own access token, region, control plane ID, and route ID:

curl -X POST \
https://{us|eu}.api.konghq.com/v2/control-planes/{controlPlaneId}/core-entities/routes/{routeId}/plugins \
    --header "accept: application/json" \
    --header "Content-Type: application/json" \
    --header "Authorization: Bearer TOKEN" \
    --data '{"name":"ai-semantic-cache","config":{"embeddings":{"auth":{"header_name":"Authorization","header_value":"Bearer OPENAI_API_KEY"}},"model":{"provider":"openai","name":"text-embedding-3-large","options":{"upstream_url":"https://api.openai.com/v1/embeddings"}},"vectordb":{"dimensions":3072,"distance_metric":"cosine","strategy":"redis","threshold":0.1,"redis":{"host":"redis-stack.redis.svc.cluster.local","port":6379}}}}'

See the Konnect API reference to learn about region-specific URLs and personal access tokens.

First, create a KongPlugin resource:

echo "
apiVersion: configuration.konghq.com/v1
kind: KongPlugin
metadata:
  name: ai-semantic-cache-example
plugin: ai-semantic-cache
config:
  embeddings:
    auth:
      header_name: Authorization
      header_value: Bearer OPENAI_API_KEY
  model:
    provider: openai
    name: text-embedding-3-large
    options:
      upstream_url: https://api.openai.com/v1/embeddings
  vectordb:
    dimensions: 3072
    distance_metric: cosine
    strategy: redis
    threshold: 0.1
    redis:
      host: redis-stack.redis.svc.cluster.local
      port: 6379
" | kubectl apply -f -

Next, apply the KongPlugin resource to an ingress by annotating the ingress as follows:

kubectl annotate ingress INGRESS_NAME konghq.com/plugins=ai-semantic-cache-example

Replace INGRESS_NAME with the name of the ingress that this plugin configuration will target. You can see your available ingresses by running kubectl get ingress.

Note: The KongPlugin resource only needs to be defined once and can be applied to any service, consumer, or route in the namespace. If you want the plugin to be available cluster-wide, create the resource as a KongClusterPlugin instead of KongPlugin.

Add this section to your declarative configuration file:

plugins:
- name: ai-semantic-cache
  route: ROUTE_NAME|ID
  config:
    embeddings:
      auth:
        header_name: Authorization
        header_value: Bearer OPENAI_API_KEY
    model:
      provider: openai
      name: text-embedding-3-large
      options:
        upstream_url: https://api.openai.com/v1/embeddings
    vectordb:
      dimensions: 3072
      distance_metric: cosine
      strategy: redis
      threshold: 0.1
      redis:
        host: redis-stack.redis.svc.cluster.local
        port: 6379

Replace ROUTE_NAME|ID with the id or name of the route that this plugin configuration will target.

Test and submit plugin

  1. Run the docs site locally per the instructions in the docs README.

    You should find your Hub contribution listed at localhost:3000/hub.

  2. Once you are happy with your listing, push your branch to the GitHub repository:

     git push --set-upstream origin [name_of_your_new_branch]
    
  3. Make a pull request against the docs.konghq.com repository to add your documentation to the Plugin Hub.

The Kong docs team will review your PR, suggest improvements and adjustments as necessary, and once approved, will merge and deploy your Plugin Hub addition!

Custom plugins and documentation

If you want to write a custom plugin for your own needs, start by reading the Plugin Development Guide.

If you already wrote a plugin, and are thinking about making it available to the community, we strongly encourage you to host it on a publicly available repository (like GitHub), and distribute it via LuaRocks. A good resource on how to do so is the distribution section of the Plugin Development Guide.

To give visibility to your plugin, you can create a post in the Announcements category of Kong Nation.

If you’re interested in becoming a technical partner and publishing your plugin on the Kong Plugin Hub, please reach out to our Kong Partners team.

Thank you for your feedback.
Was this page useful?
Too much on your plate? close cta icon
More features, less infrastructure with Kong Konnect. 1M requests per month for free.
Try it for Free
  • Kong
    Powering the API world

    Increase developer productivity, security, and performance at scale with the unified platform for API management, service mesh, and ingress controller.

    • Products
      • Kong Konnect
      • Kong Gateway Enterprise
      • Kong Gateway
      • Kong Mesh
      • Kong Ingress Controller
      • Kong Insomnia
      • Product Updates
      • Get Started
    • Documentation
      • Kong Konnect Docs
      • Kong Gateway Docs
      • Kong Mesh Docs
      • Kong Insomnia Docs
      • Kong Konnect Plugin Hub
    • Open Source
      • Kong Gateway
      • Kuma
      • Insomnia
      • Kong Community
    • Company
      • About Kong
      • Customers
      • Careers
      • Press
      • Events
      • Contact
  • Terms• Privacy• Trust and Compliance
© Kong Inc. 2025