EzFD documentation

EzFD is a self-hosted, real-time, multi-operator logger for ARRL Field Day, Winter Field Day, and special event stations. Every operator logs into one shared log, and every QSO appears on every other device within milliseconds.

Start with whichever describes you.

I'm just here to operate

Guide What it covers
Quick start You have a join code and a radio. Nothing to install, nothing to administer

I want to run an event

Guide What it covers
Getting started From an empty server to a logged QSO — install included
Operating The logging screen in depth — entry, QSY, dupes, offline
Field Day Classes, the exchange, scoring, bonuses, submitting your entry
Rules reference The scoring rules for both contests, transcribed from the official documents
Special event stations One callsign across many operators, and how the checkout works
Rig control and CW CAT via Hamlib, automatic band/mode tracking, macro keying
Digital modes WSJT-X and JTDX auto-logging, ADIF import
Troubleshooting Symptom, cause, fix

I run the server

Guide What it covers
Deployment One-command install on a VPS or with Docker Compose, TLS, updates
Administration ezfd-admin.sh, backups, restores, recovery
Configuration Every environment variable
Offline field servers A machine at the site with no internet — installing at home, the clock, mDNS, merging back

I want to work on the code

Guide What it covers
Development Local setup, the test suite, conventions
Architecture How the real-time, offline and coordination pieces fit
Database Schema reference and the constraints that matter
HTTP API Every endpoint

Keeping up

Guide What it covers
Changelog What changed, newest first, and which guide covers each change

Worth reading in both directions: before an update, to see what is about to change; and after one, when a score or an export has moved and you want to know why. Every entry links to the guide covering it.

Reading these in the app

Every guide here is also served by a running EzFD instance at /docs — linked from the footer of the home page and from Docs in the logging header. That matters for a field server with no internet, where the operator who needs the troubleshooting page is exactly the one who can't reach GitHub.

The app renders the same files from this directory, so there is one copy of each guide and no second version to drift. Its sidebar is grouped by the headings on this page and ordered by these tables, so this file decides both what the app lists and where — a guide moved between sections here moves in the app too. Each guide also carries previous and next links following the same order, so the whole set can be read straight through.

Conventions used here

Commands prefixed $ run on your own machine; commands prefixed # run as root on the server. Callsigns in examples are illustrative.

Times are UTC throughout the application, because contest logs are. Where a field accepts a local time, this documentation says so explicitly.