shenyu is a free, open source api development & testing project written in Java and released under Apache-2.0. It has 8,836 GitHub stars, 3,072 forks and 565 open issues, and was last pushed 8 hours ago. On this registry it ranks #23 of 103 tracked projects in API Development & Testing, with 5 head-to-head comparisons available.

What is shenyu?

Apache ShenYu is a Java-native, Apache-licensed API gateway for service proxy, protocol conversion, and API governance across microservices.

What it is

Apache ShenYu is a scalable, high-performance, responsive API gateway solution for microservices, built on Reactor Java and hosted by the Apache Software Foundation under the Apache-2.0 licence. It sits in front of backend services and handles cross-cutting traffic concerns: proxying requests, converting protocols, routing by selector and rule, and enforcing governance policy through an extensible plugin chain. The project lives in the Java ecosystem and ships .NET, Python, Go, and Java clients for API registration.

The concrete thing it replaces is hand-rolled gateway logic scattered across individual services. Instead of each microservice reimplementing auth, rate limiting, routing, and protocol translation, ShenYu centralises that work at the edge. Request arrives, ShenYu runs it through all enabled plugins via chain of responsibility, then routes to upstream. Selector is the first route, coarse-grained at module level. Rule is the second route, fine-grained per request behaviour. Plugins are hot-swappable and dynamically loaded, so operators extend behaviour without restarting the gateway.

Key capabilities

  • Proxy support for Apache Dubbo, Spring Cloud, gRPC, SOFA, TARS, WebSocket, and MQTT.
  • Security plugins covering Sign, OAuth 2.0, JSON Web Tokens, and WAF.
  • API governance via request and response mapping, parameter mapping, Hystrix, and RateLimiter plugins.
  • Observability plugins for tracing, metrics, and logging.
  • Dashboard providing dynamic traffic control and a visual backend for user menu permissions.
  • Extension model supporting plugin hot-swapping and dynamic loading, plus custom plugins via custom-plugin docs.
  • Cluster deployment on NGINX, Docker, and Kubernetes; API registration clients in .NET, Python, Go, and Java.

Who uses it and how

  • Teams running polyglot microservices that need one gateway fronting Dubbo, Spring Cloud, gRPC, SOFA, TARS, WebSocket, and MQTT backends at once.
  • Platform teams needing centralised auth and traffic policy: Sign, OAuth 2.0, JWT, and WAF enforced at edge rather than per service.
  • Operators wanting dynamic traffic control through the ShenYu Dashboard instead of config-file redeploys.
  • Kubernetes and Docker shops deploying gateway clusters alongside NGINX-fronted workloads.
  • Organisations registering non-Java services, since .NET, Python, and Go clients handle API registration.

Getting started

Docker is the documented quick path: create a shenyu network, pull and run apache/shenyu-admin on port 9095, then pull and run apache/shenyu-bootstrap on port 9195 with SHENYU_SYNC_WEBSOCKET_URLS=ws://shenyu-admin-quickstart:9095/websocket. Routing rules are set at runtime by POSTing to http://localhost:9195/shenyu/plugin/selectorAndRules with localKey header, or via the Dashboard.

How it compares

No list of paid products replaced by this project is provided in the facts, and no comparable tools are named either. It stands alone in this registry on the supplied information.

When to use it — and when not to

A self-hoster must operate at least two containers — ShenYu Admin and ShenYu Bootstrap — plus the network linking them, and must manage the admin port 9095, the gateway port 9195, and the WebSocket sync channel between them. Teams without Java or Kubernetes operational capacity, or those wanting a single binary with no admin plane, should look elsewhere. Weakness evident in the facts: the README excerpt is truncated mid-sentence in the Selector & Rule section, and the upstream data is partial — treat architecture details beyond what is quoted here as unverified.

project readme (upstream, from github) — read inline

Light Logo Dark Logo

Scalable, High Performance, Responsive API Gateway Solution for all MicroServices

https://shenyu.apache.org/

EN docs 简体中文文档

github forks github stars github contributors Ask DeepWiki



Architecture


Why named Apache ShenYu

ShenYu (神禹) is the honorific name of Chinese ancient monarch Xia Yu (also known in later times as Da Yu), who left behind the touching story of the three times he crossed the Yellow River for the benefit of the people and successfully managed the flooding of the river. He is known as one of the three greatest kings of ancient China, along with Yao and Shun.

  • Firstly, the name ShenYu is to promote the traditional virtues of our Chinese civilisation.

  • Secondly, the most important thing about the gateway is the governance of the traffic.

  • Finally, the community will do things in a fair, just, open and meritocratic way, paying tribute to ShenYu while also conforming to the Apache Way.


Features

  • Proxy: Support for Apache® Dubbo™, Spring Cloud, gRPC, SOFA, TARS, WebSocket, MQTT
  • Security: Sign, OAuth 2.0, JSON Web Tokens, WAF plugin
  • API governance: Request, response, parameter mapping, Hystrix, RateLimiter plugin
  • Observability: Tracing, metrics, logging plugin
  • Dashboard: Dynamic traffic control, visual backend for user menu permissions
  • Extensions: Plugin hot-swapping, dynamic loading
  • Cluster: NGINX, Docker, Kubernetes
  • Language: provides .NET, Python, Go, Java client for API register

Quick Start (docker)

Create network for Shenyu

> docker network create shenyu

Run Apache ShenYu Admin

> docker pull apache/shenyu-admin
> docker run -d --name shenyu-admin-quickstart -p 9095:9095 --net shenyu apache/shenyu-admin

Run Apache ShenYu Bootstrap

> docker pull apache/shenyu-bootstrap
> docker run -d --name shenyu-quickstart -p 9195:9195 -e "shenyu.local.enabled=true" -e SHENYU_SYNC_WEBSOCKET_URLS=ws://shenyu-admin-quickstart:9095/websocket --net shenyu apache/shenyu-bootstrap

Set router

{
  "name" : "Shenyu",
  "data" : "hello world"
}
  • Set routing rules (Standalone)

Add localKey: 123456 to Headers. If you need to customize the localKey, you can use the sha512 tool to generate the key based on plaintext and update the shenyu.local.sha512Key property.

curl --location --request POST 'http://localhost:9195/shenyu/plugin/selectorAndRules' \
--header 'Content-Type: application/json' \
--header 'localKey: 123456' \
--data-raw '{
    "pluginName": "divide",
    "selectorHandler": "[{\"upstreamUrl\":\"127.0.0.1:8080\"}]",
    "conditionDataList": [{
        "paramType": "uri",
        "operator": "match",
        "paramValue": "/**"
    }],
    "ruleDataList": [{
        "ruleHandler": "{\"loadBalance\":\"random\"}",
        "conditionDataList": [{
            "paramType": "uri",
            "operator": "match",
            "paramValue": "/**"
        }]
    }]
}'

If the backend service handling the request is running on your host machine, please set upstreamUrl to host.docker.internal:8080 or specify IP address if reachable from the container in the above command.

Add --network host to docker run command instead of --net shenyu also works correctly.

{
  "name" : "Shenyu",
  "data" : "hello world"
}

Plugin

Whenever a request comes in, Apache ShenYu will execute it by all enabled plugins through the chain of responsibility.

As the heart of Apache ShenYu, plugins are extensible and hot-pluggable.

Different plugins do different things.

Of course, users can also customize plugins to meet their own needs.

If you want to customize, see custom-plugin .


Selector & Rule

According to your HTTP request headers, selectors and rules are used to route your requests.

Selector is your first route, It is coarser grained, for example, at the module level.

Rule is your second route and what do you think your request should do. For example a method level in a module.

The selector and the rule match only once, and the match is returned. So the coarsest granularity should be sorted last.


Data Caching & Data Sync

Since all data have been cached using ConcurrentHashMap in the JVM, it's very fast.

Apache ShenYu dynamically updates the cache by listening to the ZooKeeper node (or WebSocket push, HTTP long polling) when the user changes configuration information in the background management.


Prerequisite

  • JDK 17+

Stargazers over time

Stargazers over time


Contributor and Support


Known Users

In order of registration, More access companies are welcome to register at https://github.com/apache/shenyu/issues/68 (For open source users only) .

All Users : Known Users

Frequently asked questions

Is shenyu free to use?

shenyu is open source under the Apache-2.0 licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does shenyu do?

Apache ShenYu is a Java native API Gateway for service proxy, protocol conversion and API governance.

What is shenyu written in?

shenyu is primarily written in Java. Its source is publicly available at https://github.com/apache/shenyu, and it has 8,836 GitHub stars.