This is the multi-page printable view of this section. .

Return to the regular view of this page.

Install

Choose a CheeseWAF package for Linux, Docker, Windows, or macOS.

Pick one install path. Do not mix an NSIS install with a hand-copied Linux tree on the same host unless you know which process owns the ports.

systemd unit, system user, /etc/cheesewaf.

Compose, read-only root, non-root UID 10001.

Single exe, zip, or NSIS. Local controller on loopback.

DMG app or tar.gz CLI.

Release files

Download Alpha pre-releases, or take the same files from Actions artifacts.

FilePlatform
cheesewaf-*-linux-amd64.tar.gzLinux x86_64
cheesewaf-*-linux-arm64.tar.gzLinux ARM64
cheesewaf-*-linux-loong64.tar.gzLinux LoongArch
cheesewaf-*-darwin-amd64.tar.gz / .dmgmacOS Intel
cheesewaf-*-darwin-arm64.tar.gz / .dmgmacOS Apple Silicon
cheesewaf-*-windows-amd64.exeWindows x86_64 CLI
cheesewaf-*-windows-arm64.exeWindows ARM64 CLI
cheesewaf-*-windows-amd64.zipWindows x86_64 portable tree
cheesewaf-*-windows-arm64.zipWindows ARM64 portable tree
CheeseWAF-*-windows-*-setup.exeWindows NSIS installer

After install, continue with Quick start.

1 - Linux (systemd)

Install the CheeseWAF binary, create the system user, and enable the systemd unit.

Use this path on a Linux VM or bare metal host.

Unpack

BASH
tar -xzf cheesewaf-*-linux-amd64.tar.gz
cd cheesewaf-*

Replace amd64 with arm64 or loong64 when that is the CPU.

Install files

BASH
sudo install -m 0755 cheesewaf /usr/local/bin/cheesewaf
sudo ln -sf /usr/local/bin/cheesewaf /usr/local/bin/waf-cli

sudo mkdir -p /etc/cheesewaf /var/lib/cheesewaf /var/log/cheesewaf
sudo cp configs/cheesewaf.yaml /etc/cheesewaf/cheesewaf.yaml

sudo useradd --system --home /var/lib/cheesewaf --shell /usr/sbin/nologin cheesewaf
sudo chown -R cheesewaf:cheesewaf /etc/cheesewaf /var/lib/cheesewaf /var/log/cheesewaf

The Linux tarball includes systemd/cheesewaf.service.

BASH
sudo cp systemd/cheesewaf.service /etc/systemd/system/cheesewaf.service
sudo systemctl daemon-reload
sudo systemctl enable --now cheesewaf
sudo systemctl status cheesewaf

Open http://<host>:9443/setup and continue with Initialize.

Paths

PathRole
/usr/local/bin/cheesewafBinary
/etc/cheesewaf/cheesewaf.yamlConfig
/var/lib/cheesewafData, SQLite, certs
/var/log/cheesewafLogs

Bind the data plane to a public address only after you have a site, an upstream, and a paranoia level you accept.

2 - Docker Compose

Run CheeseWAF in Compose with a read-only root filesystem and a non-root user.

Use this path in a container host. docker compose build produces linux/amd64 or linux/arm64 for the host CPU.

The image runs as UID 10001. The root filesystem is read-only.

Compose file

The repository file is deploy/docker/docker-compose.yml. A minimal copy:

YAML
services:
  cheesewaf:
    image: cheesewaf:latest
    build:
      context: .
      dockerfile: deploy/docker/Dockerfile
    user: "10001:10001"
    restart: unless-stopped
    read_only: true
    cap_drop:
      - ALL
    security_opt:
      - no-new-privileges:true
    tmpfs:
      - /tmp:size=32m,mode=1777,noexec,nosuid,nodev
    ports:
      - "8080:8080"
      - "9443:9443"
    volumes:
      - cheesewaf-data:/var/lib/cheesewaf
      - cheesewaf-logs:/var/log/cheesewaf
    healthcheck:
      test: ["CMD", "/usr/local/bin/cheesewaf-entrypoint", "healthcheck"]
      interval: 30s
      timeout: 5s
      retries: 3

volumes:
  cheesewaf-data:
  cheesewaf-logs:

Build context must be the CheeseWAF repository root when you use that Dockerfile.

Start

BASH
docker compose up -d
docker compose logs -f cheesewaf

Open https://<host>:9443/setup. The container uses a self-signed admin certificate by default. The first-run token is in the startup log.

docker compose down keeps the named volumes. Site config and SQLite live in cheesewaf-data.

3 - Windows

Single-file CLI, portable zip, or NSIS installer. The GUI controller listens on loopback only.

Windows has three shapes. They are not three different WAFs.

A. Single-file CLI

  1. Download cheesewaf-*-windows-amd64.exe or the arm64 file.
  2. Run:
POWERSHELL
.\cheesewaf-*-windows-amd64.exe serve --config .\cheesewaf.yaml --data-dir .\data
.\cheesewaf-*-windows-amd64.exe status
.\cheesewaf-*-windows-amd64.exe stop

The forwarding process does not need the installer. The Web UI assets live in web/dist next to the executable in zip / DMG / tar packages.

B. Portable zip

  1. Unpack cheesewaf-*-windows-amd64.zip to a directory such as D:\CheeseWAF.
  2. Run:
POWERSHELL
.\cheesewaf.exe serve --config .\configs\cheesewaf.yaml --data-dir .\data
.\cheesewaf.exe status
.\cheesewaf.exe stop

C. NSIS installer

  1. Run CheeseWAF-*-windows-amd64-setup.exe or the arm64 setup.
  2. Follow the wizard.
  3. Uninstall keeps data\ by default.

The installer may register a Windows service (sc.exe create CheeseWAF …). Treat that as best-effort.

Local controller

cheesewaf-gui is not a second admin console. It only starts, stops, and opens the real management UI.

  • Bind address: 127.0.0.1:17943
  • Shows PID and running state
  • Opens the Web console and the config folder
  • Optional current-user autostart (HKCU\Run)
POWERSHELL
.\cheesewaf-gui.exe --config .\configs\cheesewaf.yaml --data-dir .\data

The browser opens http://127.0.0.1:17943/.

4 - macOS

Install CheeseWAF from a DMG, or run the tar.gz CLI.

DMG

  1. Download cheesewaf-*-darwin-arm64.dmg (Apple Silicon) or cheesewaf-*-darwin-amd64.dmg (Intel).
  2. Open the image and drag CheeseWAF into Applications.
  3. Launch CheeseWAF from Launchpad or Applications.

The app starts the local controller. Use it to start, stop, and open the Web console.

Runtime data is under ~/Library/Application Support/CheeseWAF.

CLI tarball

If you only want the command line:

BASH
tar -xzf cheesewaf-*-darwin-arm64.tar.gz
cd cheesewaf-*
./cheesewaf serve --config ./configs/cheesewaf.yaml --data-dir ./data

Then open http://127.0.0.1:9443/setup.