Installation

Choose the method that works best for you.

1

Build from Source

You need Go 1.23 or newer. The program is one binary and its only dependency is a YAML parser, so the build takes a few seconds and needs no network access beyond the first download.

git clone https://github.com/marcuwynu23/haribon.git
cd haribon
go build -o haribon ./cli

Then either run it straight away:

./haribon start --config haribon-config.yml

or install it somewhere on your PATH:

go install github.com/marcuwynu23/haribon/cli@latest
2

Docker

Pull the official image from GitHub Container Registry.

docker pull ghcr.io/marcuwynu23/haribon:latest

Run the container. It reads /etc/haribon/haribon-config.yml unless you point it somewhere else with HARIBON_CONFIG:

docker run -d -p 4444:4444 \
  -v ./haribon-config.yml:/etc/haribon/haribon-config.yml:ro \
  ghcr.io/marcuwynu23/haribon:latest

The image ships a default config, so it will also start without the volume mount — it just has nothing useful to send traffic to.

3

Docker Compose (Full Observability Stack)

Start Haribon with Loki, Promtail, and Grafana in one command. See Usage for how to wire the log exporter to Loki.

cd samples/docker-compose
docker compose -f docker-compose.observability.yml up -d

Haribon listens on 4444, three sample backends on 4441-4443, Grafana on 3000, and Loki on 3100. The compose file expects data/haribon-config.yml to exist under samples/docker-compose/; copy examples/haribon-config.yml.example there first.

4

Check It Works

Ask Haribon to read your config and report problems before it starts serving anything. The command exits 0 when the file is fine and 1 when it is not, so it is safe to put in a pipeline.

haribon check --config haribon-config.yml

haribon check reads the settings and reports anything contradictory. haribon validate goes further and checks the file against the JSON schema in schema/haribon-config.schema.json, which catches typos in key names. Use check for a quick answer and validate in CI.

Once it is running, these two endpoints tell you what is going on:

curl -s http://localhost:4444/readyz
curl -s http://localhost:4444/metrics

/healthz says the process is up. /readyz says it has at least one backend it considers usable, and returns 503 when it does not.

Configuration File

Create a haribon-config.yml in your project root.

# haribon-config.yml
host: "0.0.0.0"
port: 4444

logging: true

backends:
  - url: "http://localhost:4441"
  - url: "http://localhost:4442"
  - url: "http://localhost:4443"

You can override host and port via environment variables HARIBON_HOST and HARIBON_PORT.