An HTTP router, built with Go, that acts as a reverse proxy with support for custom route definitions
Go Other
Latest commit c077837 Dec 16, 2016 @lmineiro lmineiro committed on GitHub Merge pull request #238 from haldun/master
Setting Content-Type header to application/json in debug
Failed to load latest commit information.
Godeps update pathmux godep entry (#141) Apr 21, 2016
cmd Merge branch 'master' into kube-client Dec 14, 2016
dataclients/kubernetes review fixes Dec 15, 2016
eskip Merge pull request #215 from evangelion1204/path-with-params Dec 4, 2016
eskipfile close routing object in tests Aug 6, 2016
etcd close routing object in tests Aug 6, 2016
filters healthcheck route without predicates Dec 14, 2016
fixtures Implemented TLS support May 18, 2016
innkeeper fix time sensitive tests in routing Aug 2, 2016
logging rename log subscription notification channel Aug 8, 2016
metrics create metrics for total serve time per host and route Nov 6, 2016
net review feedback Feb 10, 2016
oauth close test servers Jun 5, 2016
packaging change dockerfile: support eskip and skipper, change to alpine base i… Dec 9, 2016
predicates set healthcheck predicates Dec 14, 2016
proxy Set content-type header to application/json for debug proxy Dec 16, 2016
routing code formatting Dec 5, 2016
skptesting accept innkeeper update action Jun 23, 2016
.catwatch.yaml added .catwatch.yaml Feb 11, 2016
.gitignore change dockerfile: support eskip and skipper, change to alpine base i… Dec 9, 2016
.travis.yml bump travis go version Nov 6, 2016 Update Jul 29, 2016
LICENSE Update LICENSE Feb 18, 2016
MAINTAINERS update maintainers file Jul 29, 2016
doc.go readme adjustments Feb 24, 2016 change dockerfile: support eskip and skipper, change to alpine base i… Dec 9, 2016
skipper.go fix cli option, extend internal IPs with the IPv6 range Dec 14, 2016
skipper_test.go close routing object in tests Aug 6, 2016

Build Status GoDoc License Go Report Card Coverage



Skipper is an HTTP router built on top of a reverse proxy with the ability to modify requests and responses with filters. You can use it out of the box or add your own custom filters and predicates.

What Skipper Does

  • identifies routes based on the requests' properties, such as path, method, host and headers
  • routes each request to the configured server endpoint
  • allows modification of requests and responds with filters that are independently configured for each route
  • optionally acts as a final endpoint (shunt)
  • updates the routing rules without restarting, while supporting multiple types of data sources — including etcd, Innkeeper and static files

Skipper provides a default executable command with a few built-in filters, however, its primary use case is to be extended with custom filters, predicates or data sources. See more in the Documentation


Skipper's design is largely inspired by Vulcand.

Getting Started


In order to build and run Skipper, only the latest version of Go needs to be installed.

Skipper can use Innkeeper or Etcd as data sources for routes. See more details in the Documentation.


Skipper is 'go get' compatible. If needed, create a Go workspace first:

mkdir ws
cd ws
export GOPATH=$(pwd)
export PATH=$PATH:$GOPATH/bin

Get the Skipper packages:

go get


Create a file with a route:

echo 'hello: Path("/hello") -> ""' > example.eskip

Optionally, verify the file's syntax:

eskip check example.eskip

Start Skipper and make an HTTP request:

skipper -routes-file example.eskip &
curl localhost:9090/hello

Working with the code

Getting the code with the test dependencies (-t switch):

go get -t

Build all packages:

cd src/
go install ./...

Test all packages:

go test ./...


Skipper's godoc page includes detailed information on these topics:

  • The Routing Mechanism
  • Matching Requests
  • Filters - Augmenting Requests
  • Service Backends
  • Route Definitions
  • Data Sources
  • Extending It with Customized Predicates, Filters, and Builds
  • Proxy Packages
  • Logging and Metrics
  • Performance Considerations

Packaging support