This document describes how data is organized in Starship HUD and how different objects relate to each other.
The Ship is the top-level container for everything. Each ship has its own:
- System states (reactor, shields, life support, etc.)
- Panels (bridge station displays)
- Assets (weapons, drones, probes)
- Contacts (NPCs and other vessels)
- Crew (personnel aboard)
- Cargo (inventory)
- Scenarios (pre-scripted events)
- Events (ship log entries)
You can run multiple ships in one Starship HUD instance, though most campaigns use one.
Key Fields:
name- Ship's name (e.g., "ISV Constellation")ship_class- Ship type (e.g., "Corvette")registry- Registration numberdescription- Flavor textattributes- Custom key/value data
System States represent the ship's internal systems—everything from the reactor to life support to individual subsystems.
Key Fields:
name- System name (e.g., "Main Reactor")status- Current status (operational, degraded, critical, etc.)value- Numeric value (e.g., power output percentage)max_value- Maximum possible valueunit- Unit of measurement (e.g., "MW", "%")depends_on- List of parent system IDs
Computed Fields:
effective_status- Status after accounting for parent dependencieslimiting_parent- Which parent is capping this system's status
Panels are the displays players see. Each panel:
- Belongs to a station group (Command, Engineering, etc.)
- Contains multiple widgets in a grid layout
- Has role visibility (player, GM, or both)
Key Fields:
name- Panel name (e.g., "Main Engineering")station_group- Which station this belongs torole_visibility- Who can see this panelgrid_columns/grid_rows- Grid dimensions (default 24 x 48)
Widget Instances are the individual widgets placed on panels.
Key Fields:
widget_type- Type of widget (e.g., "health_bar")x/y- Position on the gridwidth/height- Size in grid unitsconfig- Widget-specific configurationbindings- Data connections (which system, asset, etc.)label- Custom label override
Assets are deployable equipment: weapons, drones, and probes.
Key Fields:
name- Asset name (e.g., "PDC Array Port")asset_type- Category (energy_weapon, torpedo, drone, probe, etc.)status- Operational statusammo_current/ammo_max- Ammunition countsis_armed/is_ready- Readiness statemount_location- Where it's mounted (port, starboard, dorsal, etc.)depends_on- Parent system IDs
Contacts are NPC dossiers—other ships, people, or entities the crew knows about.
Key Fields:
name- Contact nameaffiliation- Faction or organizationthreat_level- friendly, neutral, suspicious, hostile, unknownrole- What they donotes- Background informationtags- Categorization tags
Sensor Contacts are what appears on radar—detected objects in space.
Key Fields:
label- Designation (e.g., "Contact Alpha")contact_id- Link to dossier (if identified)confidence- How certain the detection is (0-100)threat_level- Assessed threatbearing_deg/range_km- Position relative to shipvector- Movement direction/speedsignal_strength- Detection strengthvisible- Whether players can see this contact
Sensor contacts can link to contact dossiers once identified.
Crew members are personnel aboard the ship.
Key Fields:
name- Crew member namerole- Their job (e.g., "Chief Engineer")status- Duty status (fit_for_duty, light_duty, incapacitated, critical, deceased, missing)player_name- If a PC, the player's nameis_npc- Whether this is an NPCcondition_tags- Current conditions (injured, fatigued, etc.)
Cargo is ship inventory—supplies, equipment, trade goods.
Key Fields:
name- Item namecategory- Type (supplies, equipment, trade goods, etc.)quantity- How manyunit- Unit of measurementdescription- Noteslocation- Where it's storedvalue- Worth (for trade goods)
Events are ship log entries—things that have happened.
Key Fields:
type- Event category (status_change, transmission, alert, etc.)severity- info, warning, criticalmessage- What happeneddata- Additional structured datatransmitted- Whether this was broadcast ship-wide
Transmissions are incoming messages from outside the ship.
Key Fields:
sender_name- Who sent itchannel- Communication channel (distress, hail, internal, broadcast, encrypted)encrypted- Whether it needs decryptionsignal_strength- How clear the signal is (0-100)text- Message content
Scenarios are pre-scripted event sequences for GMs.
Key Fields:
name- Scenario namedescription- What this scenario representsactions- List of actions to executeposition- Sort order in the UI
Action Types:
set_status- Change a system's statusadjust_value- Change a system's numeric valuespawn_task- Create a tasksend_transmission- Queue a messageemit_event- Add to ship logdelay- Wait before next action
Tasks are work items for the crew to complete.
Key Fields:
title- Task namedescription- What needs to be donestation- Which station handles thisstatus- pending, active, succeeded, failed, expiredtime_limit- Seconds allowed (optional)on_success/on_failure/on_expire- Consequence actions
Posture State tracks the ship's alert level and rules of engagement.
Postures:
green- Normal operationsyellow- Elevated alertred- Combat readygeneral_quarters- Battle stationssilent_running- Minimal emissions
Rules of Engagement:
weapons_safeties- on / offcomms_broadcast- open / encrypted / silenttransponder- active / masked / offsensor_emissions- standard / reduced / passive_only
Ship
├── System States
│ └── depends_on → other System States (cascade effects)
├── Panels
│ └── Widget Instances
│ └── bindings → System States, Assets, etc.
├── Assets
│ └── depends_on → System States
├── Contacts (dossiers)
├── Sensor Contacts
│ └── contact_id → Contact (when identified)
├── Crew
├── Cargo
├── Events (ship log)
├── Transmissions
├── Scenarios
│ └── actions → affect System States, create Tasks, etc.
├── Tasks
│ └── on_success/failure/expire → affect System States
├── Posture State
└── Holomap Layers
└── Holomap Markers
Widgets connect to data through bindings. Common binding fields:
| Binding | Used By | Purpose |
|---|---|---|
system_state_id |
Status Display, Health Bar | Single system |
system_state_ids |
System Dependencies, Environment | Multiple systems |
asset_id |
Asset Display | Single asset |
dataset_id |
Data Table | Custom data source |
station_group |
Task Queue | Filter by station |
optimal → operational → degraded → compromised → critical → destroyed
↑
offline ←───────────────────────────────────────────────────────┘
Any non-destroyed system can go offline and return to its previous status.
friendly | neutral | suspicious | hostile | unknown
info | warning | critical
pending → active → succeeded
↘ failed
↘ expired
fit_for_duty | light_duty | incapacitated | critical | deceased | on_leave | missing
- Status States - Visual language for status
- Widget Reference - All widget types and their bindings
- Scenarios - How scenarios use the data model