Skip to content

NylonModern Edge Proxy for Programmable Infrastructure

Built in Rust • Powered by Pingora • Extensible with Plugins

Nylon

Quick start

bash
curl -fsSL https://nylon.sh/install | bash

One binary • Linux aarch64 / x86_64 • No external dependencies

Configure in minutes

1. Define runtime

Create config.yaml for listeners, Pingora tuning, and ACME storage.

yaml
http:
  - 0.0.0.0:8080
config_dir: ./config
pingora:
  daemon: false
  threads: 4

2. Add services & routes

Describe backends, plugins, and routing rules inside config/.

yaml
services:
  - name: backend
    service_type: http
    endpoints:
      - ip: 127.0.0.1
        port: 3000
routes:
  - route:
      type: host
      value: localhost
    paths:
      - path:
          - /
          - /{*path}
        service:
          name: backend

3. Run it

Bring everything online and hot reload as you iterate.

bash
nylon run -c config.yaml

Built for real workloads

API gateways

Inject auth, rate limiting, caching, and observability logic without touching upstream services.

Edge platforms & SaaS

Serve thousands of domains with automated TLS, granular routing, and templated configs.

Real-time applications

Harness WebSocket callbacks, broadcast rooms, and streaming response filters.

Migration buffers

Rewrite payloads, split traffic, and de-risk backend migrations with per-route middleware.

Programmable pipeline

Request Filter
Routing
Response Filter
Body Filter
Logging
go
plugin.AddPhaseHandler("authz", func(phase *sdk.PhaseHandler) {
  phase.RequestFilter(func(ctx *sdk.PhaseRequestFilter) {
    if ctx.Request().Header("X-API-Key") != ctx.GetPayload()["api_key"] {
      res := ctx.Response()
      res.RemoveHeader("Content-Length")
      res.SetHeader("Transfer-Encoding", "chunked")
      res.SetStatus(401)
      res.BodyText("Unauthorized")
      ctx.End()
      return
    }
    ctx.Next()
  })

  phase.Logging(func(ctx *sdk.PhaseLogging) {
    req, res := ctx.Request(), ctx.Response()
    log.Printf("%s %s -> %d (%dms)", req.Method(), req.Path(), res.Status(), res.Duration())
    ctx.Next()
  })
})

Go SDK is available today. Additional language SDKs (Rust, Zig, …) are in active development.

Operational muscle

Hot reloads & zero downtime

bash
# Update configs without dropping connections
nylon service reload

Automated certificates

yaml
tls:
  - type: acme
    provider: letsencrypt
    domains:
      - api.example.com
      - app.example.com
    acme:
      email: [email protected]

Template everything

yaml
middleware:
  - plugin: RequestHeaderModifier
    payload:
      set:
        - name: x-request-id
          value: "${uuid(v7)}"
        - name: x-forwarded-for
          value: "${request(client_ip)}"

Ready to build?

Ship faster with Nylon

The programmable proxy your edge, SaaS, and real-time workloads deserve.

Released under the MIT License.