A management UI for Frank!Gateway, an Apache APISIX-based API gateway built by WeareFrank. FederatedGateWay lets you configure and monitor the gateway through a browser instead of editing YAML files by hand.
- Design and manage routes, upstreams, consumers and services via a form-based UI
- Validate APISIX config files against the live schema
- Topology in React flow build from the config your editing
Prerequisite: Docker Desktop
Both the gateway and the console are published as ready-to-run images, so you don't need to clone this repo just to run it — grab the compose file on its own:
curl -O https://raw.githubusercontent.com/wearefrank/frank-gateway-console/master/docker-compose.yamlOption A — Just the gateway
docker compose upStarts Frank!Gateway (APISIX) and Prometheus. Routes are configured by editing the inline YAML under configs: in docker-compose.yaml.
Option B — Gateway + management console
docker compose --profile ui upAdds the FederatedGateWay console, so you can configure and monitor everything from a browser instead.
| Service | URL | Included in |
|---|---|---|
| APISIX (proxy) | http://localhost:9880 | A & B |
| APISIX Control API | http://localhost:9882 | A & B |
| Prometheus | http://localhost:9090 | A & B |
| Console UI | http://localhost:8080 | B only |
Note: When routing traffic to services on your host machine, use
host.docker.internalinstead of127.0.0.1in your upstream nodes.
Both images are on GHCR, so you can drop them into infrastructure you already manage instead of using this repo's compose file or Helm chart directly.
- Gateway:
ghcr.io/wearefrank/frank-gateway:master - Console:
ghcr.io/wearefrank/federated-gateway-console:latest
services:
apisix:
image: ghcr.io/wearefrank/frank-gateway:master
ports:
- "9880:9080" # HTTP proxy
- "9882:9092" # Control API
- "9881:9091" # Prometheus metrics
volumes:
- ./apisix.yaml:/usr/local/apisix/conf/apisix.yaml
- ./config.yaml:/usr/local/apisix/conf/config.yaml
console:
image: ghcr.io/wearefrank/federated-gateway-console:latest
ports:
- "8080:8080"
environment:
- APISIX_HOST=http://apisix # point at the apisix service above
- PROMETHEUS_URL=http://prometheus:9090
volumes:
- console_data:/data # persists the console's own connection settings
volumes:
console_data:Reference the images as values (this is exactly what helm/values.yaml in this repo does):
# values.yaml
frankgateway:
image: ghcr.io/wearefrank/frank-gateway:master
console:
image: ghcr.io/wearefrank/federated-gateway-console:latest# templates/console.yaml (excerpt)
containers:
- name: console
image: {{ .Values.console.image }}
env:
- name: APISIX_HOST
value: "http://{{ .Release.Name }}-frankgateway"
- name: PROMETHEUS_URL
value: "http://{{ .Release.Name }}-prometheus:9090"
ports:
- containerPort: 8080See helm/templates/console.yaml for the full working version, including the PVC used to persist /data.
Prerequisites: Java 25, Maven, Node.js 22+
1. Start the gateway:
docker compose up2. Start the backend:
cd Back-End
./mvnw spring-boot:run
# Runs on http://localhost:80803. Start the frontend:
cd front-end
npm install
npm run dev
# Runs on http://localhost:51734. Open http://localhost:5173/config and set the host to http://127.0.0.1, control port 9882, metrics port 9881.
A sample Helm chart is available in the helm/ directory. It is provided as a starting point.
helm install federated-gateway ./helmBy default the gateway runs over plain HTTP. To enable HTTPS or the FSC/NLX plugin (for connecting to the Dutch government NLX network), create a .env file next to the compose file. See .env.example in the Frank!Gateway repository for the variables and format.
- Server certificate and key - required for the gateway to accept HTTPS connections from clients
- Client certificate chain - required for mutual TLS, used by the FSC/NLX plugin to authenticate the gateway to other NLX parties
- Self-signed CA - used to trust certificates from internal or custom upstream services