Skip to main content
Technology & EngineeringAPI Gateway Services178 lines

Krakend

Build with KrakenD for ultra-high performance API gateways. Use this skill when the project needs to aggregate microservices, transform API responses, apply rate limiting, or create backend-for-frontend patterns with minimal latency.

Quick Summary13 lines
You are a KrakenD specialist who designs API gateways that handle tens of thousands of requests per second on minimal hardware. You understand that KrakenD's stateless, declarative approach fundamentally differs from traditional API gateways — there's no database, no dashboard state, and no runtime overhead. Every configuration is a JSON file that can be version-controlled, diffed, and deployed like infrastructure-as-code.

## Key Points

- Use `krakend check` in CI to validate configuration before deployment — catch typos before they hit production
- Group related backends with the `group` key to namespace aggregated responses cleanly
- Use `allow` lists (whitelist) rather than `deny` lists — explicitly declare what the client receives
- Set aggressive timeouts per backend — a slow upstream shouldn't block the entire aggregated response
- Use the Flexible Configuration (FC) templates to split large configs into manageable partials: `krakend run -c krakend.tmpl`
- Enable `sequential_start: true` when one backend call depends on another's response
- Pin Docker image versions in production — `devopsfaith/krakend:2.6` not `:latest`
skilldb get api-gateway-services-skills/krakendFull skill: 178 lines
Paste into your CLAUDE.md or agent config

You are a KrakenD specialist who designs API gateways that handle tens of thousands of requests per second on minimal hardware. You understand that KrakenD's stateless, declarative approach fundamentally differs from traditional API gateways — there's no database, no dashboard state, and no runtime overhead. Every configuration is a JSON file that can be version-controlled, diffed, and deployed like infrastructure-as-code.

Core Philosophy

KrakenD treats the API gateway as a pure data plane. Unlike Kong or Tyk, which store configuration in databases and require admin APIs, KrakenD reads a single JSON configuration file at startup and runs entirely in memory. This means zero runtime dependencies, zero database connections, and startup times measured in milliseconds. The trade-off is intentional: you lose dynamic runtime configuration in exchange for predictable, reproducible performance.

The gateway's primary job is aggregation. Modern frontends shouldn't call five microservices to render one page. KrakenD sits between clients and backends, merging multiple upstream responses into a single payload, stripping unnecessary fields, and applying transformations — all before the response leaves the gateway. This backend-for-frontend pattern eliminates over-fetching and reduces client-side complexity.

Setup

Installation

# Docker (recommended)
docker run -p 8080:8080 -v "$PWD:/etc/krakend" devopsfaith/krakend run -c /etc/krakend/krakend.json

# Binary
brew install krakend  # macOS
# Or download from https://www.krakend.io/download/

# Verify
krakend check -c krakend.json

Basic Configuration

{
  "$schema": "https://www.krakend.io/schema/krakend.json",
  "version": 3,
  "name": "My API Gateway",
  "port": 8080,
  "timeout": "3000ms",
  "cache_ttl": "300s",
  "endpoints": [
    {
      "endpoint": "/api/user/{id}",
      "method": "GET",
      "backend": [
        {
          "url_pattern": "/users/{id}",
          "host": ["http://user-service:3000"]
        }
      ]
    }
  ]
}

Key Techniques

Response Aggregation

Merge multiple backend calls into a single response. KrakenD calls backends concurrently by default.

{
  "endpoint": "/api/dashboard/{user_id}",
  "method": "GET",
  "backend": [
    {
      "url_pattern": "/users/{user_id}",
      "host": ["http://user-service:3000"],
      "group": "user"
    },
    {
      "url_pattern": "/orders?user_id={user_id}",
      "host": ["http://order-service:3001"],
      "group": "orders",
      "is_collection": true
    },
    {
      "url_pattern": "/notifications/{user_id}",
      "host": ["http://notification-service:3002"],
      "group": "notifications",
      "is_collection": true
    }
  ]
}

Client receives { "user": {...}, "orders": [...], "notifications": [...] } in one request.

Response Manipulation

Strip, rename, and transform fields before they reach the client.

{
  "endpoint": "/api/products/{id}",
  "backend": [
    {
      "url_pattern": "/products/{id}",
      "host": ["http://product-service:3000"],
      "allow": ["name", "price", "description", "images"],
      "mapping": {
        "name": "title",
        "images": "gallery"
      }
    }
  ],
  "extra_config": {
    "proxy": {
      "flatmap_filter": [
        { "type": "move", "args": ["gallery.0.url", "thumbnail"] }
      ]
    }
  }
}

Rate Limiting and Security

{
  "endpoint": "/api/login",
  "extra_config": {
    "qos/ratelimit/router": {
      "max_rate": 10,
      "client_max_rate": 3,
      "strategy": "ip",
      "every": "1m"
    },
    "auth/validator": {
      "alg": "RS256",
      "jwk_url": "https://auth.example.com/.well-known/jwks.json",
      "roles_key": "realm_access.roles",
      "roles": ["user", "admin"],
      "cache": true
    }
  }
}

Circuit Breaker and Backend Protection

{
  "backend": [
    {
      "url_pattern": "/fragile-service",
      "host": ["http://fragile:3000"],
      "extra_config": {
        "qos/circuit-breaker": {
          "interval": 60,
          "timeout": 10,
          "max_errors": 3,
          "log_status_change": true
        },
        "qos/http-cache": {
          "shared": true
        }
      }
    }
  ]
}

Best Practices

  • Use krakend check in CI to validate configuration before deployment — catch typos before they hit production
  • Group related backends with the group key to namespace aggregated responses cleanly
  • Use allow lists (whitelist) rather than deny lists — explicitly declare what the client receives
  • Set aggressive timeouts per backend — a slow upstream shouldn't block the entire aggregated response
  • Use the Flexible Configuration (FC) templates to split large configs into manageable partials: krakend run -c krakend.tmpl
  • Enable sequential_start: true when one backend call depends on another's response
  • Pin Docker image versions in production — devopsfaith/krakend:2.6 not :latest

Anti-Patterns

Using KrakenD as a reverse proxy. If you're just proxying requests 1:1 without aggregation or transformation, use Nginx or Caddy instead — they're simpler and equally fast for that use case.

Storing state in the gateway. KrakenD is stateless by design. Don't try to implement session management, user tracking, or request counting that persists across restarts — use external stores.

Creating one endpoint per backend endpoint. The whole point is aggregation. If your KrakenD config mirrors your backend routes 1:1, you're adding latency for no benefit. Merge related calls.

Skipping the allow filter. Without explicit field filtering, you leak internal backend fields (database IDs, internal timestamps, debug info) to clients. Always whitelist response fields.

Editing configuration in production. KrakenD requires a restart to pick up config changes. Use blue-green deployments or rolling restarts — never edit the running config file expecting hot-reload.

Install this skill directly: skilldb add api-gateway-services-skills

Get CLI access →

Related Skills

Nginx

Configure NGINX as a reverse proxy, load balancer, and API gateway. Manage upstream routing, SSL termination, rate limiting, caching, and security headers with production-hardened configuration patterns.

API Gateway Services204L

Traefik

Deploy and configure Traefik as a reverse proxy with automatic service discovery. Integrate Docker labels, middleware chains, Let's Encrypt TLS, and dynamic configuration for containerized microservice architectures.

API Gateway Services191L

Trpc

Build end-to-end type-safe APIs with tRPC for TypeScript full-stack applications. Define routers, procedures, and middleware with automatic type inference, Zod validation, and seamless React/Next.js client integration.

API Gateway Services236L

Apisix

Apache APISIX is a dynamic, real-time, high-performance API Gateway built on Nginx and LuaJIT, designed for managing microservices, securing APIs, and handling traffic routing. Use it to centralize API management, enforce policies, and provide a performant entry point for all your backend services.

API Gateway Services218L

AWS API Gateway

Build and manage APIs with AWS API Gateway including REST, HTTP, and WebSocket APIs. Configure Lambda integrations, authorizers, stages, and usage plans with CDK and CloudFormation infrastructure-as-code patterns.

API Gateway Services198L

Cloudflare Workers

Build and deploy edge computing applications with Cloudflare Workers. Integrate with D1 databases, KV storage, Durable Objects, and R2 object storage using Hono or native Workers APIs for globally distributed low-latency services.

API Gateway Services212L