Architecture
The Watch never opens a direct TAK server connection. All network operations flow through the paired iPhone via Apple's WCSession framework. This preserves Watch battery and simplifies security — the Watch is a sensor and quick-input terminal.
┌──────────────┐ WCSession ┌──────────────┐ TLS/Mesh ┌────────────┐
│ Apple Watch │◄──────────────►│ iPhone │◄────────────►│ TAK Server │
│ │ │ │ │ / Mesh │
│ • Vitals │ sendMessage │ • Broadcasts │ └────────────┘
│ • Chat │ transferUser │ vitals in │
│ • Emergency │ Info (queued) │ CoT SA │
│ • Compass │ │ • Relays chat│
│ • Dead Man │ │ • Sends │
│ • Status │ │ emergency │
└──────────────┘ └──────────────┘
Features
❤️ Health & Vitals
Passive monitoring — no workout session required, minimal battery impact. Readings are event-driven (HealthKit background delivery) and sent to the phone on each new sample.
| Vital | Source | Frequency |
|---|---|---|
| Heart Rate | HKAnchoredObjectQuery + background delivery | Every few minutes (Watch decides) |
| SpO2 (Blood Oxygen) | HKObserverQuery | Periodic (Watch decides) |
| Steps | HKStatisticsQuery (cumulative today) | On each SpO2/HR update |
| Active Calories | HKStatisticsQuery (cumulative today) | On each SpO2/HR update |
The phone injects vitals into the CoT SA broadcast as a <health> XML extension. Other TAK clients see your team's vitals in real time.
<health>
<vitals heart_rate="72" spo2="98" steps="4521"
active_calories="312" source="Apple Watch"
timestamp="2026-04-06T15:30:00Z"/>
</health>
Per-vital sharing controls on the phone let you choose exactly which vitals are broadcast.
💬 Chat
Read and reply to messages directly from your wrist. The Watch receives the latest messages from the phone and displays them in a scrollable list. Reply via dictation, scribble, or suggested responses.
- Unread message count badge on the main menu
- Group channels and direct messages
- Messages sent via WCSession to phone, which broadcasts to server/mesh
🚨 Emergency Beacon
Trigger an emergency alert from your wrist that broadcasts to all connected TAK servers and mesh peers. Designed for reliability:
- Guaranteed delivery — uses
transferUserInfowhich queues the message and delivers when the phone is reachable, even if temporarily disconnected - Rate limited — 5-second minimum interval prevents accidental double-tap
- Cancel from Watch or phone
- Visual indicator when emergency is active
Watch → Phone (transferUserInfo, guaranteed):
{
"action": "initiateEmergency",
"emergencyType": "911"
}
Phone broadcasts CoT:
<event uid="..." type="b-a-o-tbl" ...>
<detail>
<emergency type="911 Alert" cancel="false"/>
</detail>
</event>
🧭 Compass
Real-time heading display using the Watch's magnetometer. Shows cardinal direction and numeric bearing. Useful for quick field orientation without pulling out your phone.
- True heading (magnetic declination corrected)
- Cardinal direction indicator (N, NE, E, SE, S, SW, W, NW)
- Rotating compass rose
🏴 Quick Status
Send predefined status codes to your team with a single tap. Status is broadcast as a CoT message visible to all connected clients.
💀 Dead Man's Switch
Automatic safety check — if the Watch detects no movement or interaction for a configurable period, it triggers an automatic emergency alert. Designed for solo operators in hazardous environments.
- Configurable timeout period
- Warning prompt before triggering — tap to dismiss and reset timer
- If no response → automatic emergency broadcast via phone
- Visual indicator when enabled
Timeline:
[Activity detected] → Timer resets
[No activity for N minutes] → Warning vibration + screen prompt
[No response for 30 seconds] → Auto-trigger emergency
[User taps "I'm OK"] → Timer resets, no alert sent
Watch App Screens
| Screen | Purpose | Key Info |
|---|---|---|
| Main Menu | Navigation hub | Connection status, unread badge, emergency indicator |
| Chat | Read/reply messages | Latest messages, dictation input |
| Emergency | Trigger/cancel alert | Emergency type selection, active status |
| Status | Quick status codes | One-tap status broadcast |
| Compass | Heading display | Bearing, cardinal direction, compass rose |
| Health | Vitals monitoring | HR, SpO2, steps, calories, last reading time |
| Dead Man | Safety timer | Enable/disable, timeout config, status |
Battery Considerations
- No workout session — passive HealthKit queries only, no continuous sensor drain
- Event-driven updates — Watch sends to phone only when new data arrives, no polling timer
- No direct network connections — all comms via WCSession (low power)
- Background delivery — HealthKit wakes the app briefly for new readings, then suspends
Supported Devices
Apple Watch Series 5 and newer running watchOS 10.0 or later. Requires a paired iPhone running TAK Can.