Skip to content

EthanMBoos/Tower

Repository files navigation

Tower

Version codecov License: MIT Node.js TypeScript Electron Platform

One interface for air, ground, and marine robotics. Tower is a command and control client that manages multi-domain fleets from a single application — no special versions, no forks, no environment-specific builds.

Tower Preview

Why Tower?

Most C2 systems are built for a single domain: drone GCS software doesn't handle ground robots, marine systems can't visualize UAVs, and mixing platforms means running multiple apps with incompatible data formats.

Tower uses a core protocol + extension architecture. The gateway uses an envelope protocol — common fields for position, heading, and status, plus extension payloads for vehicle-specific data. Each vehicle type is added via a manifest and codec — not a fork. The UI receives the same data structures whether it's a Skydio drone, a Clearpath Husky, or a BlueBoat. Adding a new platform means writing an extension, not maintaining a separate codebase.

Domain Rendering Example Platforms
Air 3D altitude-aware (Deck.gl) Skydio, fixed-wing, VTOL, custom UAVs
Ground 2D symbol layers (MapLibre) Clearpath Husky, Spot, custom UGVs
Marine 3D with hull occlusion BlueBoat, custom USVs

All three render simultaneously on the same map. Plan a mission with a drone providing overwatch, a ground robot for inspection, and a surface vessel for perimeter patrol — all coordinated through one interface.

Core Capabilities

  1. 3D Mission Planning — Draw tactical elements (no-go zones, routes, search areas) with terrain-aware 3D rendering
  2. Unified Fleet Management — Monitor and command air, ground, and marine vehicles from one interface
  3. LLM-Assisted Operations — Chat interface with full mission context for planning assistance
  4. Imitation Learning Tooling — Capture operator demonstrations for training autonomous behaviors

See also: Tower-Field — 2D variant for non-expert operators: high-contrast UI, large touch targets, guided workflows.

Quick Start

Prerequisites

  • Node.js 22+
  • Git

Installation

git clone https://github.com/EthanMBoos/Tower.git
cd Tower
npm install
npm start

For development with hot reload:

npm run dev

Usage

Drawing on the map:

  • Right-click to open the Mission Objects menu
  • Select a feature type (no-go zone, Search Zone, Route, etc.)
  • Click to place vertices, double-click to finish
  • Configure altitude settings in the property panel

Map controls:

  • Toggle 3D/2D terrain (top-right)
  • Toggle satellite imagery (top-right)
  • Drag-rotate enabled in 3D mode

Building

npm run make:mac    # macOS (.dmg, .zip)
npm run make:win    # Windows (.exe)
npm run make:linux  # Linux (.deb, .rpm)

Packages output to out/make/.

Tech Stack

Layer Technologies
App Electron 40, React 19, TypeScript 5.9
State Zustand 5
Maps MapLibre GL 5.x, Deck.gl 9.x
Drawing @deck.gl-community/editable-layers
Build Vite 8, Electron Forge

Documentation

Document Purpose
ARCHITECTURE.md System design, architecture decisions, data flows
EXTENSIBILITY.md Adding new vehicle types via gateway extensions
TECH_STACK.md All technologies, packages, and dependencies
PATTERNS.md Coding conventions, design patterns, best practices
COMPONENTS.md React component hierarchy and specifications
UI_DESIGN_PHILOSOPHY.md UI rationale, layout philosophy, power-user design principles
HOOKS_AND_MODULES.md Custom hooks and core module documentation
LLM_INTEGRATION.md LLM chat infrastructure, context injection, and capability roadmap
VEHICLE_SYSTEM.md Vehicle/fleet management architecture
COMMS_PIPELINE.md Go gateway, WebSocket bridge, protocol abstraction, backpressure design
IMITATION_LEARNING_DATA.md Operator demonstration capture for imitation learning datasets

Contributing

Contributions welcome! Key unsolved areas:

  • UI extensibility — Dynamic overlays and drawing tools from manifests (see EXTENSIBILITY.md for phased approach)
  • Offline maps — Tile generation and self-hosting for deployments without internet
  • LLM evals — Prompt optimization, model comparison, and output grading infrastructure
  • Performance — Comms pipeline throughput and rendering optimizations
  • Extension examples — ROS2 integration + radio node setup for various platforms
  • Developer tooling — Telemetry replay, protocol inspection, metrics dashboards, simulation mode
npm run dev          # Development with HMR
npm test             # Run unit tests
npm run test:e2e     # Run E2E tests

Name & History

The name "Tower" is shared with DroidPlanner/Tower, an Android ground control station for ArduPilot UAVs over MAVLink, started by Arthur Benemann as DroidPlanner in 2013 and renamed to Tower in 2015. That project has been dormant since roughly 2015 and is unrelated to this one — different stack (Java/Android vs. Electron/React), different scope (single-domain UAV GCS vs. multi-domain fleet C2). This project is in early days and makes no claim to that lineage; the name is reused in respect of the original work.

License

MIT

About

A high-performance C2 interface for heterogenous robotic fleets. Powered by Electron, React, and Deck.gl for 3D tactical awareness.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages