Installation & Service Setup
fjord runs as a standalone daemon (fjordd) managed by an rc.d service script. It interacts with your host's container engines—Podman, AppJail, or both—via local Unix sockets and standard CLI utilities.
1. Host Prerequisites
Follow the directions to set up Podman and/or AppJail in the Daemonless Quick Start guide for packages, kernel settings, and PF firewall anchors. That guide is the single source of truth for host setup; this page only adds what fjord needs on top of it:
-
Podman: fjord talks to Podman over
/var/run/podman/podman.sock(requiresocijail0.6.0 or newer). Enable and startpodman_service:sysrc podman_service_enable=YES service podman_service start -
AppJail: fjord drives
appjail-directorinstead of callingappjaildirectly (requires AppJail 5.5.0 or newer). Installpy-director:pkg install -y sysutils/py-director
fjord is verified on FreeBSD 15.1 (amd64 and arm64).
Automated Diagnostics
If you install fjordd before configuring all prerequisites, the first-run wizard and the System dashboard will identify missing packages, dead sockets, or unconfigured PF anchors and display exact shell remediation commands.
2. Installing fjord
Every release ships a static fjordd for FreeBSD amd64 with the UI embedded, plus a source tarball (vendored modules, prebuilt UI) for other targets:
fetch https://github.com/daemonless/fjord/releases/latest/download/fjordd
fetch https://raw.githubusercontent.com/daemonless/fjord/main/packaging/fjordd.rc
install -m 755 fjordd /usr/local/sbin/fjordd
install -m 755 fjordd.rc /usr/local/etc/rc.d/fjordd
The port from the daemonless ports overlay installs fjordd and its rc script, and depends on the podman toolchain (podman, podman-compose, ocijail, conmon, catatonit). Install those from packages first, or make builds each of them from source. It builds against the ports tree in /usr/ports.
pkg install -y git podman sysutils/podman-compose catatonit conmon ocijail
git clone https://github.com/daemonless/freebsd-ports
cd freebsd-ports/sysutils/fjord && make install clean
For the AppJail engine add pkg install -y appjail sysutils/py-director.
Needs go and npm (also the path for arm64 today):
pkg install -y git go npm
git clone https://github.com/daemonless/fjord && cd fjord
(cd ui && npm ci && npm run build)
go build -o fjordd ./cmd/fjordd
install -m 755 fjordd /usr/local/sbin/fjordd
install -m 755 packaging/fjordd.rc /usr/local/etc/rc.d/fjordd
3. Starting the Service
Enable and start the fjordd daemon via FreeBSD's service framework:
sysrc fjordd_enable=YES
service fjordd start
Verify service execution:
service fjordd status
Open http://<host-ip>:3567 in your browser. The initial setup wizard will verify your host readiness, prompt for your default App Data storage directory, and load the default application catalog.
Configuration Reference (Environment Variables)
Application-level options—including App Data datasets, custom Folder Sets, catalog feeds, and default engine selections—are configured through the web interface and persisted to /var/db/fjord/settings.json.
Daemon network endpoints and storage paths are controlled via environment variables passed through rc.conf:
# Example: Bind fjord to localhost on port 3567
sysrc fjordd_env="FJORD_LISTEN=127.0.0.1:3567"
| Environment Variable | Default Value | Description |
|---|---|---|
FJORD_LISTEN |
:3567 |
TCP listen address and port for the HTTP/WebSocket server. |
FJORD_STACKS_DIR |
/var/db/fjord/stacks |
Filesystem path where stack directories and compose files are maintained. |
FJORD_STORAGE_BASE |
/var/db/fjord/containers |
Default App Data location for container state until explicitly changed in Settings. |
FJORD_ENGINE |
podman |
Default engine assigned to new stack deployments (podman or appjail). |
FJORD_PODMAN_SOCKET |
/var/run/podman/podman.sock |
Path to the Libpod API Unix socket. |
FJORD_HOST_ADDR |
127.0.0.1 |
Host address probed during pre-flight port conflict detection. |
FJORD_CATALOG_URL |
(unset) | Custom catalog URL loaded on initial installation if replacing the default. |
Security & Network Exposure (Production Hosts)
fjordd executes with administrative privileges in order to interact with /var/run/podman/podman.sock, create ZFS datasets, and launch FreeBSD jails.
No authentication yet: fjord currently operates in local trusted mode without an integrated authentication layer. Anyone with network access to the HTTP port can create, modify, and delete container workloads with host root equivalence.
For production or remote hosts:
- Bind to localhost: Set
FJORD_LISTEN=127.0.0.1:3567infjordd_env. - Access via Encrypted Tunnel: Route traffic to fjord using an SSH local port forward:
ssh -L 3567:127.0.0.1:3567 user@freebsd-host - VPN / Overlay Mesh: Place the host on a private WireGuard or Tailscale network and bind fjord to the VPN interface IP.