A modern, real-time flight radar for the GeoFS flight simulator. RadarThing tracks live traffic, records flight history, overlays weather and airport data, and gives pilots and controllers a cleaner operating picture than the original GeoFS radar.
- Open radarthing.com.
- Install the GeoFS script from radarthing.com/userscript, or paste the console loader shown on the homepage into GeoFS DevTools.
- Open GeoFS and fly normally.
- Your aircraft appears on the radar automatically while the script is running.
Tampermonkey installs are persistent. Console installs use the same hosted loader, but they need to be run again after a full GeoFS page reload.
- Real-time aircraft stream from the RadarThing SSE service.
- Click-to-track aircraft with detailed sidebar data.
- Search and filtering by callsign, flight number, airport, or GeoFS user.
- Multi-aircraft selection with side-by-side tracking.
- Most-tracked flights panel showing what other users are watching.
- Follow mode for keeping a selected aircraft centered.
- Radar Mode map styling for a cleaner controller view.
- Aircraft class icons for light, regional, heavy, business, military, and helicopter traffic.
- Heading Mode for measuring headings between points on the map.
- Remote aircraft commands for supported clients, including speed, altitude, heading, vertical speed, squawk, flaps, NAV/HDG mode, waypoint selection, autopilot toggles, and IDENT requests.
- Flight plan drawing with waypoint speed and altitude details.
- Waypoint ETAs and remaining route distance for active flights.
- Conflict alerts with a recent review log.
- Keyboard shortcut reference built into the radar dock.
- Display unit preferences for speed and altitude.
- Map layer presets for saving radar layer, weather, OpenAIP, and conflict-monitor setups.
- METAR, D-ATIS, NOTAM, AIRMET, SIGMET, and precipitation layers.
- Airport markers, frequencies, and live ATC indicators.
- Airport charts for taxi diagrams, SIDs, STARs, and approaches.
- Chart overlays directly on the map where supported.
- Community chart uploads with moderation.
- US airport charts are free; advanced global chart and weather access is part of RadarThing PRO.
- Automatic flight recording with routes, duration, distance, max altitude, and max speed.
- Flight replay from the dashboard or shared radar URLs.
- Live route viewing before a flight has ended.
- Shareable flight cards for completed flights.
- Pilot dashboard with totals, streaks, top routes, airports, aircraft, account export, and subscription management.
- Pilot profiles and a leaderboard for flights, distance, time, streaks, and approved image contributions.
- Pilot challenges with automatic and manually reviewed goals.
- Virtual airline support with callsign matching, members, admins, and VA-specific aircraft images.
- Community aircraft image uploads and moderation.
- Discord waypoint reminders through the RadarThing bot.
Core tracking is free. RadarThing PRO unlocks more aviation data and analytics.
| Free | PRO |
|---|---|
| Live aircraft tracking | Everything in Free |
| Search, filters, multi-select, and follow mode | Full NOTAM access with decoded text |
| Flight recording and replay | AIRMET and SIGMET overlays |
| Remote autopilot commands | Global airport charts and procedures |
| Basic flight stats | Full flight history and advanced analytics |
| Precipitation overlay | Radar Mode and chart-focused workflows |
| Live ATC indicators and audio | Shareable flight cards |
| Aircraft image uploads | Subscription management through Stripe |
Editable userscript source files live in:
userscript.jsseabus.jsjth.jsuserscript-src/radarthing-runtime.jsuserscript-src/config.jsonscripts/build-userscript.mjs
Generated userscript files are built into public/userscript/ and radarthing.user.js. Do not hand-edit or commit those generated artifacts. Rebuild them from source instead:
bun run build:userscriptThe public install flow is:
/userscriptredirects Tampermonkey users to/userscript/radarthing.user.js.- The installer loads
/loader. - The loader reads
/userscript/latest.json. - The current runtime bundle is loaded, with a stable bundle fallback.
App: Next.js 15, React 19, TypeScript, Tailwind CSS, shadcn-style UI components
Data: Convex for users, flight history, charts, aircraft images, virtual airlines, challenges, and moderation data
Realtime: SSE traffic stream served by the companion ../radar-sse service
Mapping: Leaflet with custom aircraft markers, weather overlays, chart overlays, and map layer presets
Auth and billing: Clerk, Stripe, UploadThing, Resend, and PostHog
Install dependencies:
bun installRun checks:
bun lint
bun typecheck
bun run checkFormat code:
bun run format:writeSupporting services:
bun run cf # Cloudflare tunnel
bun run stripe # Stripe webhook listenerConvex development:
bunx convex devAfter changing files in convex/, run Convex locally and deploy the Convex changes with the project deploy process.
Production Convex backups are exported by the Convex Backup GitHub Actions workflow and uploaded to UploadThing.
UploadThing free apps do not allow private files, so backups are encrypted locally before upload and stored as .zip.enc files. Treat BACKUP_ENCRYPTION_KEY like a production database password: keep it in a password manager. If this key is lost, existing encrypted backups cannot be restored.
Backup filenames are target-aware and human-readable, for example:
radarthing-prod-db-only-2026-05-07_08-00-00Z.zip.enc
radarthing-prod-db-and-files-2026-05-07_08-00-00Z.zip.enc
Required GitHub Actions repository secrets:
CONVEX_DEPLOY_KEY
UPLOADTHING_TOKEN
BACKUP_ENCRYPTION_KEY
Generate the encryption key with:
openssl rand -base64 48Trigger a manual backup from GitHub:
- Open the repository on GitHub.
- Go to Actions.
- Select Convex Backup.
- Click Run workflow.
The workflow runs daily at 08:00 UTC and prunes encrypted UploadThing backups older than 30 days.
Run the backup locally:
bun run backup:convex -- --label prod --retention-days 30Sync production data into the default Convex dev deployment for local testing:
bun run sync:convex:prod-to-devThe sync script exports a backup of the current dev deployment first, then
replaces the default dev deployment with production data via
convex import --replace-all. It refuses to run if CONVEX_DEPLOY_KEY is set.
Include Convex file storage:
bun run backup:convex -- --label prod --include-file-storage --retention-days 30Decrypt a downloaded backup:
BACKUP_ENCRYPTION_KEY="<same key used for backups>" bun run backup:convex -- \
--decrypt ./radarthing-prod-db-only-2026-05-07_08-00-00Z.zip.enc \
--output ./radarthing-prod-db-only-2026-05-07_08-00-00Z.zipRestore with Convex after decrypting, preferably into a non-production deployment first:
bunx convex import ./radarthing-prod-db-only-2026-05-07_08-00-00Z.zipEnvironment variables are validated in src/env.js using T3 Env. Server-side variables include Clerk, Stripe, UploadThing, and Resend keys. Client-side variables must use the NEXT_PUBLIC_ prefix. Add new variables to .env.example when introducing them.
Found a bug or have a suggestion? Open an issue on GitHub or join the RadarThing Discord from the homepage.