← Devlogs

Release v0.3.0 — Easter Closed Beta Release Candidate

v0.3.0 is a landmark release and the first Closed Beta Release Candidate, targeted for the Easter period. After the data richness and security work laid down in v0.2.x, this release turns its attention to the radar itself — bringing a completely reworked aircraft icon system with SVG support, real-time data reloading, per-operator coloring, fully configurable aircraft labels, and native Let's Encrypt integration. This is the most visually impactful update to date.


At a Glance

  • SVG Markers — rikgale/VRSCustomMarkers library bundled (84 markers, 291 ICAO codes, CC0)
  • PNG Markers — 54 additional PNG icons by dedevillela (MIT), including rare types and MLAT variants
  • Operator Colors — assign a hex color to any airline ICAO code; aircraft recolor in real time
  • Canvas Pixel Recolor — new PNG colorizer preserves black outlines, zero compression artifacts
  • Configurable Labels — toggle airline colors, operator flag overlay, and more — persisted to localStorage
  • Feed Filter — hide specific aircraft by HEX code, same behavior as the original VRS
  • 100+ Bundled Icons — dedicated silhouettes for B707, F16, MD11, and many more
  • AircraftDB Real-Time Updates — new aircraft now appear on radar within seconds, no restart needed
  • TypeIconMapping Live Reload — icon assignments apply immediately after saving in the Admin Panel
  • Let's Encrypt — native HTTPS with ACME HTTP-01, configurable in General Settings
  • Fixed: Map reload after hiding aircraft list panel, disappearing trail when panning beyond aircraft

Aircraft Icons — Complete Overhaul

SVG Markers

VRS X now ships with the rikgale/VRSCustomMarkers library — 84 SVG silhouettes covering 291 ICAO type codes, licensed CC0. SVG icons are rendered inline directly on the map, with color applied via a direct fill= attribute on each path. This eliminates the filter ID conflicts that plagued earlier approaches and keeps rendering clean at any zoom level.

A priority chain governs which icon is shown for each aircraft:

Admin override → SVG auto-library → WTC/engine matrix → PNG default

SVG icons are displayed at a base size of 26 px (vs. 35 px for PNG), tuned for visual parity on the map. Selected SVG markers highlight in #FFFF00, consistent with the existing PNG -Selected.png behavior.

PNG Markers

54 new PNG icons have been added from the dedevillela set (MIT license), covering aircraft that lack SVG equivalents — including the A225, GLEX, WTC variants, MLAT variants, and more. All new icons are available for manual assignment in the Admin Panel's TypeIconMapping dropdown.

100+ Icons, Built In

Between SVG and PNG sets, VRS X now ships with well over 100 distinct aircraft silhouettes out of the box. Types that previously fell back to a generic shape — B707, F16, MD11, and many others — now have dedicated icons without any configuration required.


Operator Colors

A simple but powerful new feature: assign a hex color to any airline ICAO code directly from the Admin Panel. Aircraft belonging to that operator will automatically render in the chosen color on the radar — applied immediately, no restart required.

Colors can be picked from a palette or entered as a hex value. The coloring is handled by a new canvas pixel recolor engine (pngColorizer.ts) that operates at the pixel level: black outlines remain black, and white fill areas receive the operator color. The result is clean, artifact-free coloring with no compression halos or color bleed.

SVG icons use a direct fill= on their paths — no canvas required, no approximation.


Configurable Labels

Aircraft labels on the radar are now fully configurable. A new Label Settings panel exposes toggles for:

  • Airline colors — enable or disable per-operator marker coloring globally
  • Operator flag — show or hide the airline logo overlay above each marker on the radar

Settings are managed through a new useLabelConfig hook and persisted to localStorage, so your preferences survive page reloads without any server-side state.


Feed Filter

VRS X now supports filtering aircraft by HEX code — a feature present in the original Virtual Radar Server that had been missing until now. Add any number of HEX codes to the filter list, save, and those aircraft will disappear from the radar within seconds. Useful for filtering ground vehicles, test transponders, or any traffic you don't want cluttering the display.


Real-Time Data Reloading

AircraftDB

A long-standing bug caused newly added aircraft to remain invisible on the radar until a full application restart. The root cause: DatabaseLoaded was set to true even when a lookup returned null, so subsequent lookups for the same aircraft skipped the database entirely. This has been resolved — ResetDatabaseLoaded() is now called on IAircraftList after every PreloadLookupCacheAsync() run. New aircraft appear on the radar within seconds of being added.

TypeIconMapping

Icon assignments made in the Admin Panel now take effect immediately. Saving a mapping triggers loadTypeIconMappings() in the frontend module, reloading the full icon map without requiring a page refresh or application restart.


Let's Encrypt (WiP)

Note: Let's Encrypt is a big challenge and may not ship with v0.3.0. I will do my best to deliver it on time — but I want it to be solid before it goes out.

VRS X now includes native Let's Encrypt support via ACME HTTP-01 challenge, configurable directly in General Settings. The feature is disabled by default, and when enabled exposes the following options:

  • Domain — the fully qualified domain name to issue a certificate for
  • Email — contact address for certificate expiry notifications
  • HTTPS port — defaults to 443, but can be set to any port (e.g. 8443) for non-root deployments
  • Staging toggle — use Let's Encrypt's staging environment for testing before going live

Port 80 is required for ACME HTTP-01 validation. VRS X performs a pre-flight check at startup: if port 80 is unavailable (already in use or insufficient permissions), the application logs a clear error and falls back gracefully to HTTP — it does not crash.

Certificate lifecycle is managed by a new LetsEncryptStatusService singleton, exposed via /api/configuration/le-status. The radar frontend displays a green banner when HTTPS is active and a red banner with an error message if the certificate could not be issued or renewed.


Fixed

  • Map reload after hiding aircraft list panel: Resolved an issue where hiding the side panel caused the map to fail to repaint correctly.

  • Disappearing aircraft trail on pan: Fixed a bug where the trail of a tracked aircraft would vanish when the map was panned far enough that the aircraft left the current viewport.