• v0.0.13 d272d11ab0

    olemd released this 2026-09-29 14:35:54 +02:00 | 10 commits to main since this release

    SkyView v0.0.13 - Correct Beast Decoding and Stability Fixes

    This release fixes the Mode S / ADS-B decoder. Before it, Beast sources placed some aircraft hundreds of kilometres off, reported roughly half the real altitude, and discarded more than half of all messages. Output now matches dump1090 on the same feed. The release also includes a security fix and a set of database, configuration and packaging fixes.

    If you switched to a VRS JSON source because Beast data looked wrong, you can switch back.

    Measured against dump1090 (same live Beast feed)

    v0.0.12 v0.0.13
    Messages decoded ~42% 99.7%
    Positions more than 5 km off yes (one aircraft ~680 km off) none
    Positions rejected by validation 13 in 3 min 0
    Altitude roughly half the real value median 25 ft from dump1090
    Squawk almost never available 17/17 matching

    Decoder fixes

    • CPR position decoding (#35, #24)
      • Odd frames used the even-frame zone size, which shifted positions by about 110 km at Nordic latitudes.
      • Negative zone indices were discarded.
      • Pairs that straddle a longitude-zone boundary or are too old to pair are now rejected.
      • The position is taken from the newest frame.
      • Surface positions now use the 90° surface grid, resolved against the receiver location.
    • ADS-B altitude was decoded with the wrong bit layout, which roughly halved it (18,800 ft instead of 38,000 ft).
    • Mode S surveillance replies (DF0/4/5/16/20/21) (#24)
      • These replies were all discarded as CRC failures.
      • The aircraft address is now recovered from the CRC residue. A reply is accepted only if its address was recently confirmed by a message with a clean CRC, so corrupted replies cannot create phantom aircraft.
      • Mode S altitude (AC13) and squawk (ID13) are now decoded correctly.
    • Beast framing: escaped 0x1A bytes in the timestamp and signal fields misaligned frames. This affected about 0.3% of frames.
    • Memory: CPR state for aircraft that stopped transmitting is now released.

    Position validation (#24)

    • Positions from different receivers a few milliseconds apart are no longer rejected as "impossible speed", and slightly out-of-order timestamps are no longer rejected either.
    • A bad first position no longer blocks all correct positions after it. Three consistent positions replace it.

    Security

    • All dynamic values inserted into the page with innerHTML are now sanitized to prevent XSS.

    Database

    • SQLite pragmas were never applied: WAL, synchronous mode, cache size and foreign keys were all off. The driver ignored the parameter format in the connection string.
    • auto_vacuum and page-size changes now take effect.
    • The server now runs schema migrations on startup. Previously a database not prepared by skyview-data had no tables, and every history write failed.

    Configuration

    • settings are now applied. history_limit, stale_timeout and update_rate were read but never used. Defaults follow docs/CONFIGURATION.md: 1000 history points and a 60 s stale timeout. Out-of-range values are adjusted, with a warning in the log.
    • A missing or invalid -config file is now fatal. Previously the server silently started with a default localhost:30005 source.
    • IPv6 source addresses now work.

    Build and packaging

    • cmd/skyview/main.go and update-database.sh were never committed, because an over-broad .gitignore pattern hid them. A fresh clone can now build all binaries.
    • The container build works again. Previously it built from the repository root, which has no Go files. Images now carry OCI labels and /etc/build-info with the build date and git revision.
    • skyview -version reports the build version.
    • WebSocket compression is enabled.

    Upgrade notes

    • The effective stale timeout changes from 15 s to 60 s unless stale_timeout is set.
    • Services started with a wrong -config path will now fail to start instead of running with defaults. The Debian service uses /etc/skyview-adsb/config.json, which the package installs.

    Known limitations

    • Altitude in Gillham (100 ft) coding, used by old transponders and above 50,175 ft, is reported as unknown.
    • ADS-B GNSS-height positions (TC 20-22) may show an incorrect altitude.
    • The man page for skyview still lists -port and -debug. The actual flags are -server, -sources, -verbose and -version.

    Package

    • Debian package: skyview-adsb_0.0.13_amd64.deb (7.5 MB, amd64)
    • SHA-256: e1287e272b72c040ce1a0fb1292fd692c32d4c93142afa6820d05a986eefebbc
    sudo dpkg -i skyview-adsb_0.0.13_amd64.deb
    

    Container image:

    BUILDAH_FORMAT=docker podman build \
      --build-arg BUILD_DATE="$(date -u +%Y-%m-%dT%H:%M:%SZ)" \
      --build-arg GIT_REVISION=v0.0.13 \
      -t skyview:v0.0.13 .
    

    🤖 Generated with Claude Code

    Downloads