v0.9.0

BigBodyCobain/Shadowbrokerv0.9.0Mar 13, 2026by BigBodyCobain

AI Summary

A major update focusing on stability and user experience, introducing an in-app auto-updater, granular ship controls, and fixing entity selection issues.

Key Highlights

  • In-app Auto-Updater for one-click updates without manual downloads
  • Granular Ship Layer Controls with 4 independent toggles (Military, Cargo, Civilian, Cruise)
  • Stable Entity Selection using MMSI/callsign instead of volatile array indices
  • Dismissable Threat Alerts with stable content hashing
  • Faster Data Loading with background enrichment and duplicate fetch elimination

New Features

  • In-App Auto-Updater with backup and restart capabilities
  • Granular Ship Layer Controls with live counts
  • Stable Entity Selection for map markers
  • Dismissable Threat Alerts
  • Faster Data Loading (GDELT enrichment, duplicate fetch elimination)
  • Bug fixes for viewport filtering, carrier tracker crashes, and ETag collisions

Full Release Notes

## What's New in v0.9.0

### In-App Auto-Updater
One-click updates directly from the dashboard — no more manual downloads. Click **CHECK UPDATES** → confirmation dialog → **AUTO UPDATE**. The backend downloads the latest release zip, backs up your files, extracts over the project, and auto-restarts. Your `.env`, databases, and cache files are never touched. A **MANUAL DOWNLOAD** fallback link is always available if anything goes wrong.

### Granular Ship Layer Controls
Ships are now split into 4 independent toggles in the sidebar:
- **Military / Carriers** — naval vessels and aircraft carriers
- **Cargo / Tankers** — commercial shipping
- **Civilian Vessels** — everything else
- **Cruise / Passenger** — passenger ships

Each toggle shows its own live count. Default: military, cargo, and passenger ON; civilian OFF.

### Stable Entity Selection
Ship and flight markers now use **MMSI/callsign** as identifiers instead of volatile array indices. Selecting a ship or plane stays locked on even when data refreshes every 60 seconds. No more "phantom deselection" when the backend sends updated data.

### Dismissible Threat Alerts
Click the **×** on any threat alert bubble to dismiss it for the current session. Uses stable content hashing (title + coordinates) so dismissed alerts stay hidden even across 60-second data refresh cycles.

### Faster Data Loading
- **GDELT military incidents** now load instantly with background title enrichment (previously blocked for 2+ minutes)
- Eliminated duplicate startup fetch jobs for faster boot
- Docker healthcheck timing tuned to prevent false restarts during preload

---

## Bug Fixes
- Removed viewport bbox filtering that caused 20-second delays when panning
- Fixed carrier tracker crash on GDELT 429/TypeError responses
- Removed fake intelligence assessment generator — all data is now real OSINT only
- Fixed ETag collision (full payload hash instead of first 256 chars)
- Added concurrent `/api/refresh` guard to prevent duplicate data fetches

---

## Community Contributors

- **@imqdcr** — Ship toggle split into 4 categories + stable MMSI/callsign entity IDs for map markers
- **@csysp** — Dismissible threat alert bubbles with stable content hashing + stopPropagation crash fix ([#48](https://github.com/BigBodyCobain/Shadowbroker/pull/48))
- **@suranyami** — Parallel multi-arch Docker builds + runtime BACKEND_URL fix ([#35](https://github.com/BigBodyCobain/Shadowbroker/pull/35), [#44](https://github.com/BigBodyCobain/Shadowbroker/pull/44))

---

## Upgrade
Download `ShadowBroker_v0.9.0.zip`, extract over your existing install, and run `start.bat` (Windows) or `start.sh` (macOS/Linux). Your `.env`, databases, and caches are preserved.

Or if you're already running v0.8.0+, just click **CHECK UPDATES** in the top-right corner of the dashboard!