Skip to content

Building and Contributing

Alain De Carolis edited this page Oct 31, 2026 · 1 revision

Building and contributing

Building from source

BUILDING.md has the prerequisites per platform. The short form on Debian or Ubuntu:

git clone --recursive https://github.com/adecarolis/wfweb.git
cd wfweb
qmake wfweb.pro
make -j$(nproc)

--recursive matters: the FT8/FT4 decoder (resources/ft8ts) and the RADE codec (resources/radae_nopy) are submodules. Already cloned without it: git submodule update --init.

Build wfweb.pro, not wfview.pro: the latter is the upstream desktop project.

The Standalone bundle needs no toolchain: tools/build-static.sh dist/ and serve dist/ over HTTPS (or tools/serve-static.py locally). See Standalone.

Layout, in one paragraph

The C++ under src/ and include/ is wfview's radio engine plus wfweb's web server (webserver.cpp), rigctld, logbook, and the server-side modems (FreeDV, RADE, Direwolf, AX.25). The browser page lives in three sibling directories: resources/web/ (Server only), resources/web-standalone/ (Standalone only: the Web Serial transport, the in-browser CI-V codec, the WASM modems) and resources/web-shared/ (everything both use: the theme, the CW keyer and decoder, the JS8 panel, the packet stack, the recorder, the jitter buffer). Rig definitions are the .rig files under rigs/; the Standalone build gets them as civ/rig-caps.js, generated by tools/extract-rig-caps.py.

Tests

pytest tests/ runs the suite: unit tests of the pure C++ helpers, node simulations of the browser modules (CW keyer and paddle, jitter buffer, MIDI), the packet modem loopback, and server tests against a mocked IC-7300. The two-rig bench (tools/virtualrig on the server, /?virtual=1&id=N in Standalone) runs whole QSOs in FT8, JS8, CW and packet between two virtual rigs with no radio and nothing on the air.

Nothing in the tests keys a real radio, and nothing you contribute should either.

Contributing

  • Rig reports and menu settings are the most useful thing a non-programmer can add: this wiki's Rig Compatibility and Troubleshooting pages are open to edit.
  • Rig files. A radio that misbehaves on one command usually needs one line in its .rig file. Quote the CI-V frame from the debug log and the manual's page in the issue or the pull request.
  • Pull requests go against dev. Keep the upstream delta small: wfweb tracks wfview master and keeps its changes to the web server, the page, and the headless build. Engine fixes that are not web-specific are better sent upstream to wfview, where everyone gets them.
  • The project's callsign handling is deliberately shared: one station callsign in the gear dialog feeds CW, FT8/FT4, JS8, FreeDV Reporter, APRS, the AX.25 link and the logbook. Do not add a per-mode one.

Upstream

wfweb exists because of wfview by Elliott Liggett W6EL, Phil Taylor M0VSE and contributors, whose engine does the radio work. If wfweb is useful to you, support them: https://www.patreon.com/wfview.

Clone this wiki locally