ZYRN TOPO Documentation

Complete reference for every feature in ZYRN TOPO — a 100% offline topographic mapping application for Android, Linux, Windows, and Web. No account required. No subscription. Your data stays on your device.

Getting Started

Install, permissions, and your first map.

Map Interface

Layers, 3D terrain, controls, and compass.

Team Sync

P2P, LAN, Reticulum, BLE, drone, ATAK.

Offline Maps

Tile caching, bulk download, storage.

SAR Operations

Periods, resources, clues, and gear.

Bridge Tools

LAN relay, Reticulum, ATAK/soRD bridges.


Installation

ZYRN TOPO runs on four platforms. Choose the one that fits your device.

Android

  1. Install from Google Play (search "ZYRN TOPO") or sideload the APK from the Gumroad download.
  2. On first launch, the app requests permissions: Location (required for GPS), Camera, Microphone, Bluetooth, and Notifications. Grant each as needed — you can always update these in Android Settings.
  3. The app works immediately — no sign-in, no setup wizard.

Linux

Download the .deb or .tar.gz from Gumroad.

# Debian/Ubuntu .deb install
sudo dpkg -i zyrntopo_x.x.x_amd64.deb
# Or extract tar.gz anywhere
tar xzf zyrntopo-x.x.x.tar.gz && ./zyrntopo-x.x.x/zyrntopo

Windows

Install via the Microsoft Store or download the NSIS installer from Gumroad. The installer creates a Start Menu shortcut and optional desktop icon.

Web / PWA

Open zyrntopoapp.pages.dev in any modern browser. For offline use, install it as a PWA: in Chrome/Edge click Install app in the address bar; in Firefox/Safari use Add to home screen.

First Launch

On first launch ZYRN TOPO prompts for all required permissions in sequence using native OS dialogs. On Android these include Location, Camera, Microphone, Bluetooth, and Notifications. On Web, the browser asks for Location and Notifications.

You can skip any permission dialog. The app will still work — only the corresponding feature (GPS, camera, etc.) will be unavailable until you grant it in Settings.

Your map starts centered at a default view. Tap the GPS button (bottom-right) to jump to your current location.

Basic Navigation

The interface has three main areas:

  • Map canvas — the full-screen map. Pan with one finger (touch) or mouse drag. Pinch or scroll to zoom. Rotate with two fingers.
  • Top bar — map title, layer switcher, GPS button, search, and the More drawer trigger.
  • More drawer — opens from the hamburger menu: Map Objects, Folders, Operational Periods, Team Members, Team Sync, Gear, Settings, Offline Tiles, and Import/Export.

Long-press anywhere on the map to open the context menu: drop a marker here, start a line from here, or view point info.


Base Layers

Tap the layer icon (stack icon in top bar) to open the layer panel. Five base layers are included:

LayerBest forOffline
OpenStreetMapStreets, trails, points of interest worldwide
OpenTopoMapTopographic contours, elevation, terrain features
Esri SatelliteHigh-resolution aerial imagery
CartoDB VoyagerClean terrain view with labels
CartoDB DarkDark-themed base for night operations

Every tile you view is automatically cached — switching to any layer while offline will show the last-cached tiles for that area.

You can also add custom tile sources: tap Custom Sources at the bottom of the layer panel, enter a tile URL template (https://example.com/{z}/{x}/{y}.png), a name, and tap Add.

Overlays

Overlays layer on top of any base map. Multiple overlays can be active simultaneously, each with adjustable opacity.

  • Contour Lines — topographic contour intervals from OpenTopoMap
  • Hillshade — shaded relief from Wikimedia/Maptiler DEM data
  • Slope Angle — OpenSnowMap slope classification (useful for avalanche assessment)
  • BLM Public Lands — US Bureau of Land Management boundary and ownership
  • USFS MVUM — US Forest Service Motor Vehicle Use Map — roads, trails, and OHV designations

Use the opacity slider next to each overlay to blend it with the base layer. Overlays are also cached automatically.

3D Terrain View

Tap the 3D badge in the layer panel or the top bar to switch to 3D terrain mode, powered by MapLibre GL with WebGL rendering.

  • Real DEM elevation data from Mapterhorn tile service
  • Drapes any base layer over the 3D terrain mesh
  • Hillshade and sky atmosphere included
  • Two-finger drag to pitch the view; two-finger rotate to spin
  • Use the pitch slider to adjust terrain tilt
  • Terrain exaggeration can be increased in Settings
For the best offline 3D experience, do a bulk tile download (see Bulk Download) before heading out — DEM tiles are downloaded alongside map tiles.

Controls & Compass

All map controls are accessible from the map canvas:

  • Zoom buttons (+/−) — bottom-right corner
  • Compass rose — tap to reset rotation to North-up; long-press to enable heading-up mode (map rotates with your bearing)
  • Center crosshair — a fixed crosshair at the map center for precise location reading
  • Context menu — long-press the map anywhere for: drop marker here, start line from here, view point info, navigate here

Night Mode

Tap the moon icon to cycle through three states: Off → Dim → Dark. Night mode applies a CSS filter to the map canvas to reduce brightness and blue light without affecting the UI. It works on all base layers and overlays and is preserved across sessions.

Coordinate Display

Your current GPS position is always shown in the bottom status bar. Choose your preferred format in Settings → Coordinate Format:

FormatExample
Decimal Degrees (DD)39.0835° N, 108.5601° W
Degrees Minutes Seconds (DMS)39°05'00" N, 108°33'36" W
Degrees Decimal Minutes (DDM)39° 05.010' N, 108° 33.606' W
UTM12S 741234 4328765
MGRS12SVJ4123428765

Tap any displayed coordinate to copy it to the clipboard.


Markers & Waypoints

Drop a marker by long-pressing the map and selecting Drop Marker Here, or tap GPS marker to drop one at your current location. A details panel opens immediately.

Marker properties

  • Name — any text label
  • Notes — multi-line description or clue notes
  • Icon — choose from 50+ typed icons: trailhead, summit, camp, water, warning, medical, wildlife, and more
  • Color — full color picker with preset swatches
  • Folder — assign to any existing folder
  • SAR attributes — mark as clue, assign to operational period, set find status

Tap an existing marker to open its info card. From there: edit, delete, navigate to, copy coordinates, or zoom-in.

Lines & Routes

Tap Draw in the top bar then select Line. Tap the map to place vertices. A live distance display shows the running total. When done, tap Finish.

  • Each line segment shows distance in your preferred units
  • Edit mode: drag existing vertices, insert new ones, or delete
  • Assign name, color, and folder
  • Freehand mode: tap-and-hold while drawing to record a continuous freehand path

Polygons & Areas

Select Polygon in the Draw menu. Tap to place polygon vertices; the shape closes automatically when you tap Finish. Area is calculated and shown in the info panel (acres, sq km, sq mi).

Buffer zones — tap an existing object and choose Buffer Zone to create a polygon offset by a specified distance.

Sectors / wedges — from the context menu choose Draw Sector to create a pie-wedge search area with configurable bearing and radius.

Range Rings

Long-press a marker or tap More → Range Rings to draw concentric search rings around a point. Configure:

  • Number of rings — 1 to 10
  • Spacing — distance between each ring (meters or feet)
  • Custom radii — override with specific values per ring
  • Bearing offset — rotate the ring set for directional probability

Range rings are stored as a single object and can be edited or deleted from the Objects panel.

Folders & Organization

Open More → Folders to manage folders. Folders help group objects by purpose — e.g., "Day 1 Search", "Water Sources", "Hazards".

  • Create folder with name and color
  • Assign any marker, line, or polygon to a folder
  • Toggle folder visibility — hides/shows all objects inside on the map
  • Export a single folder as GeoJSON

Operational Periods

Open More → Operational Periods. Operational periods (OPs) are standard SAR planning containers — typically one per 12 or 24 hour shift.

  • Create an OP with a name, start time, and active status
  • Assign any map object to an OP
  • Objects belonging to an inactive OP can be filtered out of view
  • Export a single OP as GeoJSON
For ICS-compatible SAR operations, create one OP per official operational period and assign all that period's assignments and finds to it before exporting for the Situation Unit.

GPS Modes

The GPS button (bottom-right of map) cycles through three states:

  1. Off — no GPS. Button is gray.
  2. Follow — map re-centers on your position every few seconds. Button is blue.
  3. Heading-up — map rotates to match your bearing AND follows your position. Button is blue with rotation indicator.

An accuracy circle is displayed around your position marker. In poor GPS conditions (dense canopy, canyon) the circle will be large — always verify position against known landmarks.

ZYRN TOPO uses the device's built-in GPS. Accuracy depends entirely on hardware quality and sky visibility. Always carry a dedicated GPS device as backup on critical operations.

Track Recording

Tap the track icon (footprints, top bar) to start recording. A live track is drawn on the map in real time. The bottom status bar shows:

  • Elapsed time
  • Distance traveled
  • Current speed (mph or km/h)

Tap Stop to end the recording. The track is saved as a line object in your map objects list and can be exported as GPX or GeoJSON.

Measurement Tools

Tap More → Measure to open the measure tool. Tap points on the map to build a measurement path:

  • Point-to-point distance with running total
  • Bearing between last two points
  • Area measurement — close the shape to get area in acres or sq km
  • Elevation profile — tap two points to see the elevation chart along the path

Tap Clear to reset without saving the measurement.


Auto Tile Caching

Every map tile you view is automatically saved to the device's Cache API storage. This happens invisibly in the background — just browse the areas you plan to visit while connected, and they will be available offline.

  • All base layers and overlays are cached independently
  • Stale-while-revalidate: cached tiles serve instantly, the network copy refreshes the cache in the background
  • When offline, cached tiles continue to serve indefinitely
  • DEM terrain tiles (for 3D) are cached automatically alongside base layers
  • Retina-aware: on HiDPI displays the {r}=@2x URL substitution is matched between the cache write and the live <img> request, so cache hits actually land

Bulk Tile Download

Open More → Offline Tiles → Download. The downloader fetches in two tiers so you can both pan around offline AND zoom in to detail:

  • Overview tier — zooms 1–9 across the viewport. Few tiles, lets you zoom all the way out offline.
  • Detail tier — zooms 10 to the layer's max (capped at 17). The bulk of the data.
  1. Navigate to the area you want to cache.
  2. Tap Download Current Layer (just the active base + overlays) or Download All Layers (every base layer + every overlay).
  3. A confirmation shows the estimated number of tiles. Tap Confirm to begin.
  4. A progress bar appears. You can cancel at any time — partial downloads are preserved.
Large area downloads at high zoom levels can fetch thousands of tiles. Use Wi-Fi and check your data plan. A 10×10 km area at zoom 14–16 is typically 200–600 MB per layer.

Cache Management

Open More → Offline Tiles → Manage to view and clear cache:

  • Tile cache size — total storage used by cached map tiles
  • Clear tile cache — removes all tiles; map objects and settings are unaffected
  • Clear app cache — clears app-level cache (does not delete map objects)
Map objects (markers, lines, polygons) are stored in IndexedDB (via localForage), which is separate from the tile cache. Clearing tiles never deletes your map data.

Team Sync — Overview

Team Sync lets multiple ZYRN TOPO users share a live map — markers, lines, and polygons propagate to all connected peers in real time, along with each user's GPS position. Open via More → Team Sync.

How it works

  • Objects are synced with a last-write-wins CRDT — the most recent edit always wins
  • GPS positions broadcast every 4 seconds; peers appear as colored circles on the map
  • Peer identity is ephemeral per session (no accounts)
  • Five transport modes are available depending on connectivity
ModeInternetLAN onlyOfflineRange
P2P (Nostr)Global
LAN HubLAN (~150m WiFi)
ReticulumOptionalLoRa/WiFi mesh
BLE Nearby~100m BLE
MAVLink DroneWiFi/serial

Team Sync — P2P (Internet)

Uses Trystero over Nostr relays — serverless peer-to-peer WebRTC. No server infrastructure to maintain; peers discover each other via public Nostr relay nodes.

  1. In Team Sync, enter your display name and role, pick a color.
  2. Select Internet / P2P mode (default).
  3. Enter or generate a 6-character session code and share it with teammates (QR code button or copy).
  4. Tap Join Session. Teammates enter the same code.
P2P mode requires each device to have an internet connection to reach the Nostr relay for peer discovery. The actual map data flows peer-to-peer directly after discovery — no relay stores your data.

Team Sync — LAN Hub

For use when all devices are on the same WiFi network — ideal for incident command posts and field ops with a local hotspot. Run relay.mjs on any Node.js device on the network:

node bridge/relay.mjs [port]
# Default port: 8080
# Example output:
#   URL:  ws://192.168.1.45:8080

In Team Sync, switch to Advanced → LAN Hub transport and enter ws://<relay-ip>:8080.

Bonus: relay.mjs automatically joins the ATAK CoT multicast group (239.2.3.1:6969). If soRD or any ATAK-compatible device is broadcasting detections on the same network, they flow to all connected ZYRN clients with no extra configuration.

Team Sync — Reticulum & LXMF

Reticulum is a cryptographic mesh networking stack supporting LoRa radios, WiFi, TCP/IP, and more. ZYRN bridges Reticulum to its WebSocket protocol via reticulum_bridge.py, and includes full LXMF support so you can exchange messages with Sideband and other LXMF-compatible apps.

On Linux desktop, the bridge starts automatically when you launch ZYRN TOPO — no manual command needed. On Android, web, and Windows, run the command below on any device on the mesh.
pip install --user --break-system-packages rns lxmf websockets msgpack
python3 bridge/reticulum_bridge.py --port 4242

The bridge creates a persistent identity at ~/.zyrntopo/bridge.identity and announces it on the Reticulum mesh. In Team Sync, use Advanced → Reticulum transport and enter the bridge's WebSocket URL (default ws://localhost:4242, or its LAN IP).

LXMF address — your mesh identity

Once connected, the Team Sync drawer shows an LXMF Mesh Devices section with:

  • Your LXMF address — a 32-character hex string, with Copy / Share / Announce / Refresh buttons
  • Add a Device — paste another address (from a teammate or a Sideband contact) and tap Connect; the bridge requests a path on the mesh and registers the device as a known peer
  • Connected Devices — every peer ever announced or added is listed with display name, online status (green dot), and last-seen time

Display names from Sideband peers are decoded from the announce app_data field (msgpack [name, stamp_cost] for LXMF ≥ 0.5, or legacy UTF-8). Bidirectional messaging works: when you send an LXMF message, the bridge picks DIRECT delivery and registers delivered/failed callbacks so you see status in the UI.

Over LoRa (e.g., RNode hardware), expect latency of 3–30 seconds — ideal for position sharing where timeliness is less critical than coverage.

Team Sync — BLE Nearby

Bluetooth Low Energy sync requires no WiFi or internet. Range is approximately 100 m line-of-sight.

  1. One device becomes the BLE host: open Team Sync, select Nearby mode, tap Start as Host.
  2. Other devices tap Scan to find nearby hosts, then tap the host name to join.
  3. The session code is shared automatically via BLE advertisement.
BLE throughput is limited (~20 KB/s). Large GeoJSON imports on one device may take several seconds to propagate to peers. GPS updates and small edits sync in near-real time.

Team Sync — ATAK CoT / soRD Detections

ZYRN TOPO talks ATAK Cursor on Target (CoT) over UDP multicast both ways. Your team members appear on any ATAK device on the same LAN, and inbound detections from ATAK or the soRD SAR drone platform appear on your map as color-coded markers in real time.

Bidirectional behavior (since v0.2.1)

  • Outbound: when ZYRN is connected to atak_bridge.py, every GPS update is converted to a CoT 2.0 PLI event of type a-f-G-U-C-I (friendly · ground · unit · civilian · individual) and broadcast to 239.2.3.1:6969. Each peer gets a stable UID (ZYRN.<peerId>) so ATAK updates the same marker rather than spawning new ones, with a 60-second stale attribute so dropped peers auto-clear.
  • Inbound: incoming CoT events are parsed for position, callsign, remarks, ArcFace score, and the original stale timestamp. A sweeper auto-removes detections after their stale time elapses, matching ATAK's own behavior.

Detection confidence colors

  • Red circle — High confidence ≥85% (ArcFace score) — auto-alert
  • Orange circle — Review queue 60–85% — manual verification needed

Automatic connection

On Linux desktop, the bridge auto-spawns on app launch (port 4243) — your team is already publishing CoT before you tap anything. The app also silently tries ws://localhost:4243 at startup on every platform; if the bridge is running on the same machine it connects automatically.

Manual setup (Android / web / Windows)

pip install --user --break-system-packages websockets
python3 bridge/atak_bridge.py --ws-port 4243 --mcast-group 239.2.3.1

In Team Sync, expand ATAK CoT Detections (soRD) and enter ws://<bridge-ip>:4243.

If you're using the LAN relay (relay.mjs) instead, CoT detections flow automatically as before — but outbound CoT requires atak_bridge.py.

soRD platform overview

soRD is a compact SAR drone system based on:

  • AMG8833 thermal sensor → ESP32-S2 DAC → 5.8 GHz VTX video transmitter
  • ROTG02 USB capture → YOLOv5n CPU inference → ArcFace identity verification
  • Scores ≥0.85 trigger automatic ATAK CoT broadcasts to 239.2.3.1:6969
  • Scores 0.6–0.85 enter a manual review queue (also broadcast as CoT with lower score)
  • WiFi latency ~260 ms; LoRa relay latency 3–30 s

Team Chat

Chat is available in any Team Sync session. Tap the chat bubble icon to open the chat panel. The input bar sits at the top of the panel so it remains visible when the keyboard is open on mobile.

  • Text messages — sent to all peers in the session
  • Voice messages — tap-and-hold the microphone button to record; release to send; tap to cancel
  • Chat history is stored locally for the current session
  • Unread message badge on the chat button
GPS is automatically enabled (locked mode) when you join a Team Sync session, so your position broadcasts to teammates immediately without an extra tap.

SAR — Operational Periods

Open More → Operational Periods. Each period represents a planning cycle (typically 12 or 24 hours) in a search operation. Assign map objects to periods to keep your map organized and filterable.

  • Name, start date/time, and status (active/inactive)
  • Toggle visibility of all objects in a period with one switch
  • Export a period's objects as GeoJSON for incident documentation

SAR — Resources & Roles

Open More → Team Members. Each member has:

  • Name and role (team leader, member, medical, air, K9, logistics, etc.)
  • Contact info — radio channel, phone, callsign
  • Assignment — linked to an operational period

Import/export team rosters as JSON or CSV for briefings and ICS documentation.

SAR — Gear / Pack List

Open More → Gear. Build a complete inventory of field equipment with:

  • Item name, category, quantity, weight
  • Total pack weight summary
  • Category grouping (shelter, navigation, medical, comms, etc.)
  • Export as JSON or CSV for logistics planning
  • Import from a previous operation's export

SAR — Clue & Find Logging

Any marker can be flagged as a clue or find using its SAR properties panel:

  • Type: Physical clue, track, trail, scent, shelter, victim found, deceased
  • Description: Detailed notes
  • Time found: Timestamp recorded automatically
  • Assigned to OP: Links to an operational period
  • Photo: Attach a camera photo directly to the clue marker

All clue markers are also exported in GeoJSON with full SAR metadata intact.


Import & Export — GeoJSON

GeoJSON is ZYRN TOPO's primary exchange format. All map objects are serialized to standard GeoJSON with ZYRN-specific properties in the properties object.

Export

Open More → Export → GeoJSON. Choose to export all objects, a specific folder, or a specific operational period. The file saves to the device's Downloads folder or triggers a browser download.

Import

Open More → Import and select a .geojson or .json file. Objects are merged into the current map — existing objects with the same ID are updated; new IDs are created. Drag-and-drop import is supported on desktop.

Import & Export — KML / KMZ

Export to KML for use in Google Earth, CalTopo, or other GIS tools. KMZ (zipped KML) is also supported for import. Exported KML includes point placemarks, line strings, and polygon features with names and color styling.

Import & Export — GPX

GPX export is ideal for loading routes onto dedicated GPS devices (Garmin, Suunto, etc.). Waypoints export as <wpt> elements; recorded tracks export as <trk>. GPX import reads both <wpt> and <trk>/<rte> elements.

Import & Export — CSV

CSV export writes all marker coordinates and properties to a spreadsheet-compatible file — useful for importing into ArcGIS, QGIS, or sharing data with agencies that use spreadsheet-based tools. Team member rosters and gear lists also export/import as CSV.


Bridge Tools — LAN Relay (relay.mjs)

The LAN relay is a lightweight Node.js WebSocket server for offline LAN-only Team Sync. It requires no internet connection — just Node.js installed on any device on the network.

# Start on default port 8080
node bridge/relay.mjs

# Custom port
node bridge/relay.mjs 9000

The relay prints its WebSocket URLs on startup. Share one with teammates for the LAN Hub URL field in Team Sync. The relay also automatically listens on UDP multicast 239.2.3.1:6969 for ATAK CoT detection events and forwards them to all connected clients — no separate bridge needed.

Run the relay on a laptop acting as a mobile hotspot. Android devices can connect to the hotspot and sync maps without any internet service.

Bridge Tools — Reticulum / LXMF Bridge (reticulum_bridge.py)

Bridges the Reticulum mesh network to ZYRN's WebSocket protocol with full LXMF identity, addressing, and messaging — Sideband-compatible.

pip install --user --break-system-packages rns lxmf websockets msgpack
python3 bridge/reticulum_bridge.py --port 4242 [--channel zyrntopo]

Features:

  • Persistent identity stored at ~/.zyrntopo/bridge.identity — destination hash stays consistent across restarts
  • Auto re-announce every 60 s for both the ZYRN destination and the LXMF delivery destination
  • RNS announce handler with aspect_filter='lxmf.delivery' picks up Sideband / other ZYRN bridges automatically and forwards them as lxmf_announce frames
  • Persistent peer cache at ~/.zyrntopo/lxmf_peers.json — known devices survive restarts
  • Display-name decoding: msgpack [name, stamp_cost] (LXMF ≥ 0.5) with UTF-8 fallback for legacy clients
  • LXMF delivery callbacks → UI delivered/failed status

WebSocket protocol

The bridge exposes a JSON WS protocol on ws://0.0.0.0:4242 (configurable):

DirectionFramePurpose
→ client{type:'lxmf_ready', address, display_name, peers}Sent on every WS connect
→ client{type:'lxmf_announce', address, display_name, ts}Peer announced on the mesh
→ client{type:'lxmf_message', from, content, title, ts}Inbound LXMF message
→ client{type:'lxmf_delivery', to, state}Delivery status update
← client{type:'lxmf_get_state'}Request current address + peer list
← client{type:'lxmf_announce'}Manually re-announce on the mesh
← client{type:'lxmf_add_contact', address, display_name}Discover + remember a peer
← client{type:'lxmf_send', to, content, title}Send an LXMF message

Auto-spawn on Linux desktop

The Linux Electron build spawns this bridge on app launch and kills it on quit — see the Linux platform notes.

Bridge Tools — ATAK CoT Bridge (atak_bridge.py)

A bidirectional CoT ↔ ZYRN bridge. Receives ATAK / soRD detections from UDP multicast and forwards them as JSON to the WS client; in the other direction, it accepts position frames from ZYRN over WS and re-broadcasts them as proper CoT XML so any ATAK device on the LAN sees your team.

pip install --user --break-system-packages websockets
python3 bridge/atak_bridge.py [--ws-port 4243] [--mcast-group 239.2.3.1] [--mcast-port 6969]

ZYRN TOPO automatically tries ws://localhost:4243 at startup. On Linux desktop, the bridge auto-spawns on app launch.

Outbound CoT (ZYRN → ATAK)

Position frames received from ZYRN — in either {t:'pos', d:{name, lat, lng, …}} or {type:'cot_pos', …} shape — are converted to a CoT 2.0 PLI event and sent to 239.2.3.1:6969:

<event version="2.0" uid="ZYRN.<peerId>" type="a-f-G-U-C-I"
       how="m-g" time="..." start="..." stale="+60s">
  <point lat="..." lon="..." hae="..." ce="9999999" le="9999999"/>
  <detail>
    <contact callsign="..."/>
    <__group name="Cyan" role="Team Member"/>
    <precisionlocation altsrc="GPS" geopointsrc="GPS"/>
    <remarks>ZYRN TOPO</remarks>
  </detail>
</event>

The stable per-peer UID prevents marker duplication on the ATAK side; the 60-second stale means peers auto-clear when they go offline. Echoes of our own outbound frames are filtered on the inbound listener.

Inbound CoT (ATAK → ZYRN)

Incoming CoT XML is parsed for:

  • Event UID (prepended with soRD-) — stable across updates
  • Position from <point lat lon hae />
  • Callsign from <detail><contact callsign="…"/>
  • Remarks text + ArcFace confidence (e.g., ArcFace: 0.88)
  • cot_type, cot_time, stale, how — passed through to the client

The client honors the stale timestamp and a sweeper thread auto-removes expired markers every 5 seconds.


Settings — Coordinate Formats

Open More → Settings → Coordinate Format and choose from DD, DMS, DDM, UTM, or MGRS. This affects all coordinate displays: status bar, point info panel, marker info, and CSV export.

Settings — Units & Display

  • Distance — Imperial (miles, feet) or Metric (km, meters)
  • Area — Acres or Hectares
  • Elevation — Feet or Meters
  • Speed — mph or km/h
  • Map title — appears on PDF prints
  • Default base layer — layer shown on first load
  • Terrain exaggeration — 3D mesh vertical scale (1.0–3.0×)

Settings — Permissions

On first launch all permissions are requested via native dialogs. If you denied a permission and need to re-enable it:

  • Android: Settings → Apps → ZYRN TOPO → Permissions
  • Web / Chrome: Click the lock icon in the address bar → Permissions
  • Linux / Electron: Location and camera are requested at point-of-use

Permissions used by the app:

PermissionUsed forRequired
Location (Fine + Background)GPS tracking, position broadcastsFor GPS features
CameraPhoto waypoints, QR code scanningOptional
MicrophoneVoice messages in Team ChatOptional
BluetoothBLE Nearby Team SyncOptional
NotificationsDetection alerts from soRD/ATAKOptional
Storage (Android ≤12)File import/exportOptional

Platforms — Android

Built with Capacitor 6. Minimum Android 7.0 (API 24). Tested on Android 13–15.

  • Install via Google Play or sideload the APK from Gumroad
  • Background location permission required for GPS tracking while app is backgrounded
  • The keyboard uses adjustResize so the chat input bar stays visible when typing
  • BLE Nearby requires Bluetooth and Nearby Devices permissions (Android 12+)
  • Release builds are signed; debug builds use .debug app ID suffix

Platforms — Linux

Built with Electron 41. Distributed as .deb (Debian/Ubuntu) and .tar.gz (any x64 Linux).

# .deb install
sudo dpkg -i zyrntopo_x.x.x_amd64.deb

# .tar.gz — run directly, no install
tar xzf zyrntopo-x.x.x.tar.gz
./zyrntopo-x.x.x/zyrntopo

Required system libraries for .deb: libgtk-3-0, libnotify4, libnss3, libxss1, libxtst6, xdg-utils, libsecret-1-0. The .deb installs these automatically.

Auto-spawned mesh bridges

The Linux Electron app launches the Reticulum/LXMF and ATAK CoT bridges automatically (and kills them on quit). Bundled scripts live in the install at resources/bridge/; the app resolves them at startup. Install Python dependencies once:

pip install --user --break-system-packages rns lxmf websockets msgpack

If python3 is missing or the imports fail, the bridges silently no-op — the app still runs. Watch the terminal you launched ZYRN from for [bridge:reticulum] and [bridge:atak] log lines.

Platforms — Windows

Built with Electron 41. Minimum Windows 10. Three formats:

  • NSIS installer (ZYRN TOPO Setup x.x.x.exe) — Start Menu & optional desktop shortcut, per-user install
  • Portable EXE (ZYRN TOPO x.x.x.exe) — single self-contained binary, no install required
  • ZIPwin-unpacked/ tree for sysadmins or scripted deployment
The Linux desktop's auto-spawned mesh bridges aren't enabled on Windows — install Python and run python3 bridge/reticulum_bridge.py / atak_bridge.py manually if you want LXMF or ATAK CoT integration on Windows.

Platforms — Web / PWA

The web version runs in any modern browser (Chrome, Firefox, Edge, Safari) at zyrntopoapp.pages.dev. Install as a PWA for an app-like experience:

  • Chrome / Edge: Click the install icon in the address bar
  • Firefox: Menu → Install as App (Firefox 128+)
  • iOS Safari: Share → Add to Home Screen

The PWA uses a Service Worker for offline-first operation — all app code and viewed tiles are cached automatically. No separate install or download manager needed.

On iOS, Background Location is not available in PWA mode — GPS tracking stops when the screen locks. Use the Android or desktop versions for continuous background tracking.