Open-Source Wikis

/

Traefik

/

Fun facts

traefik/traefik

Fun facts

A few odds and ends from the source tree.

Codename: cheese

The Makefile's default codename for builds is cheddar:

CODENAME ?= cheddar

Earlier Traefik releases were also named after cheeses (raclette, beaufort, brie, …). The cheese tradition long predates this v3 source tree but the codename variable still ships in every binary you build, baked in by -X github.com/traefik/traefik/v3/pkg/version.Codename=$(CODENAME).

Two embedded interpreters

Traefik can load middlewares written in Go or compiled to WebAssembly without recompiling the binary:

  • pkg/plugins/middlewareyaegi.go runs Go middleware through Yaegi, Traefik's own Go interpreter.
  • pkg/plugins/middlewarewasm.go runs Wasm middleware through Wazero.

The two systems live side by side, sharing pkg/plugins/manager.go. Few reverse proxies ship two embedded interpreters in the same process.

The "I have to go..." log line

When the process receives SIGINT or SIGTERM, pkg/server/server.go logs:

I have to go...
Stopping server gracefully

It is a small, persistent piece of personality that has survived years of refactors.

Architecture diagram is committed art

The docs/content/assets/img/traefik-architecture.png image referenced from the README is checked into the repo, alongside the cheese-themed gopher logo. The README credits the gopher logo to Peka and notes that it was inspired by Takuya Ueda's gopher stickers — the original Go gopher being Renee French's design.

Two HTTP reverse proxies, three protocols, four configuration formats

A non-exhaustive count of internal "pluralities":

  • HTTP reverse proxies: pkg/proxy/fast and pkg/proxy/httputil. pkg/proxy/smart_builder.go decides which to use.
  • Network protocols at the edge: TCP, UDP, and QUIC (HTTP/3).
  • Configuration formats: TOML, YAML, JSON (via the file provider), CLI flags, and environment variables — every shape feeds the same static.Configuration struct.
  • Interpreted middleware languages: Go (Yaegi) and Wasm (any language that compiles to WASI).

The healthcheck is itself a Traefik subcommand

cmd/healthcheck builds the traefik healthcheck subcommand. Running the binary with that argument hits 127.0.0.1:<ping port>/ping so Docker's HEALTHCHECK can call the same image. It re-uses the static configuration to figure out where to look.

Oldest commit is older than the Go module path it lives under

The first commit (initial commit, 2015-08-28) predates Go modules entirely. The go.mod at the repo root uses module path github.com/traefik/traefik/v3 — the /v3 segment is a Go modules convention for major-version 3+, retrofitted onto a project that started life under a different package layout. If you git log pkg/provider/file/file.go, you can trace the file provider's lineage back nearly to that very first commit.

Cheddar, the version variable

pkg/version/version.go exposes three variables that are stamped at link time:

var (
    Version   = "dev"
    Codename  = "cheddar" // beta cheese
    BuildDate = "I don't remember exactly"
)

The default BuildDate is the only place in the source where Traefik admits to forgetting things, and the Codename's // beta cheese comment is the only known cheese-themed inline note in the public Go ecosystem.

Built by Factory AutoWiki from public repository content. It is a generated preview for codebase exploration, not source-maintained documentation.

Fun facts – Traefik wiki | Factory