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, TLS, updates
Administration ezfd-admin.sh, backups, restores, recovery
Configuration Every environment variable
Changelog What changed, newest first — read before and after an update

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

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.

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.