Everything you need to pre-run, navigate, and document off-road routes
Load a GPX and Race It FreePro to Race
From getting a GPX file to full audio turn callouts — the whole flow. Loading and previewing is free; running with GPS + audio callouts is Pro.
1. Get a GPX file
A GPX is just a text file with GPS coordinates. Any of these work:
From a race organizer — SCORE, BITD, NORRA, King of the Hammers, local clubs. Usually emailed or downloaded from an event portal as .gpx.
From an app — Strava, Komoot, AllTrails, Gaia GPS, onX Offroad, Trailforks, Google Earth. Look for "Export GPX" in the route or track menu.
From a website — Race Dezert, Trail Register, forum downloads. Right-click the download link and save.
Your own drive — use Record Mode in DirtOS to build a GPX from an actual drive, then re-load it later.
2. Get the file onto your phone or tablet
Email attachment — open the attachment, choose "Save to Files" (iOS) or "Save" (Android).
AirDrop / Nearby Share — drop it from your Mac / PC / another phone directly.
iCloud / Google Drive / Dropbox — download the file, DirtOS's picker sees any file provider.
Open in DirtOS directly — tap the .gpx file anywhere on the device and pick DirtOS from the share sheet.
3. Load it
Open DirtOS. On the Map tab, tap the folder icon in the bottom controls row (labeled "Load GPX").
Pick the .gpx file. DirtOS parses it and asks which collection to save it to — pick an existing one or create a new one (e.g., "Baja 500 2026").
The route draws in red on the 3D satellite map with elevation shading. If the file already had waypoints, they show up as colored pins.
4. Auto-detect turns
After loading, DirtOS asks: "Auto-detect turns?" Say Yes and it analyzes the track geometry and drops severity-coded waypoints at every significant turn. Green for gentle turns, yellow / orange for moderate, red for sharp and hairpins. Detection takes a few seconds even on a 90,000-point Baja track.
If the GPX already had race-org waypoints ("CP1", "SS 3.4", "Danger Wash"), say No and DirtOS keeps only what the file had.
5. Race it
Head to the Collections tab. Tap the green Run button next to your route.
Accept the one-time safety disclaimer.
DirtOS switches to the Map tab, GPS locks on, camera follows, and turn-by-turn audio starts calling out every waypoint as you approach it — "Right 3 in 500 feet" — in your chosen language.
The next 3 waypoints preview at the bottom of the screen so you can see what's coming.
Configure zones, checkpoint alerts, quick-key drops, run circles, and everything else from Settings.
Tip: Race organizers often ship a GPX with checkpoints pre-labeled ("CP1", "CP2", "SS Start"). DirtOS's Checkpoint Alerts automatically watch for names starting with your configured prefix and fire a proximity alarm and audio callout — no manual setup per waypoint.
Tip: DirtOS's importer handles GPX files from Strava, Komoot, AllTrails, Gaia GPS, Google Earth, onX Offroad, Trailforks, race timing systems, and any app that exports standard GPX (single-<trk> or multi-<trk>). Multi-<trk> files auto-split into separate Track items in the same collection.
Automatically find turns and mark them on your route
When importing a GPX file, DirtOS can analyze the track geometry and automatically place waypoints at significant turns. Turn severity is color-coded:
Green — Gentle turns (under 35°)
Yellow/Orange — Moderate turns (35–80°)
Red — Sharp turns and hairpins (80°+)
After detection, you can edit, move, or delete any waypoint. Your changes are saved automatically.
Detection parameters (minimum angle, separation distance, analysis window) are all adjustable in Settings. You can also customize the angle breakpoints for each severity level and choose whether waypoints are placed at the apex (sharpest point) or the entrance (start) of each turn.
Tip: If your GPX already has waypoints, choose "No" when asked about auto-detection to keep your existing markers.
Detect and call out varying-radius turns — the ones that surprise you
Not every corner is a constant-radius arc. Some tighten as you enter (decreasing-radius, the kind that catches drivers out), some open on exit. DirtOS's auto-detect analyzes the entrance, apex, and exit severity of every turn independently and classifies it into one of three types:
Constant — entrance and exit severities match the apex. Called out as a normal turn ("Right 3").
Tightens — entrance is milder than the apex. The apex is the surprise. Called out either as an arrow ("R 3 → 5") or with the modifier word ("Right 3 tightens") depending on the format you pick.
Opens — exit is milder than the apex. The apex is a spike that immediately opens out. Called out as "R 5 → 3" or "Right 5 opens to 3".
Two audio formats to pick from:
Composite — "Right 3 to 5" (spoken and written the same way, matches classic rally pacenotes)
Modifier — "Right 3 tightens" or "Right 5 opens to 3" (more conversational)
How to use:
Go to Settings → Turn Detection
Toggle Detect Tightens / Opens on
Pick the audio format under Audio Format
Load a GPX with auto-detect turns — the classification is frozen at detect time and rides with the waypoint from then on (through GPX export, cloud sync, share links)
Works in both standard severity mode (1–5) and Rally Pacenote Mode (1–6, inverted). The next-3 waypoints panel and map annotations render the arrow form so you can see it visually while the audio callout matches your chosen format.
Why this matters: A "Right 3" that tightens to a Right 5 is a completely different corner from a normal Right 3. Getting that distinction in your ear before you commit is the difference between clean and off-course.
Rename, restyle, add, or delete waypoints on your route
Tap any waypoint circle on the map (or use the waypoint list) to open the edit sheet. Every action persists to the GPX file immediately and syncs to Cloud if enabled.
Add: Long-press anywhere on the map to drop a new waypoint. Enter a label (defaults to "Note @ X.XX mi") and tap Save.
Edit label: Tap a waypoint → Edit label to change the name.
Change icon: Tap a waypoint → Change icon to swap from the 53-icon library, import a custom PNG, or clear the icon back to a plain colored circle.
Change color: Tap a waypoint → Change color to pick from 10 preset swatches or revert to the auto severity-based color.
Move waypoint: Tap a waypoint → Move → pan the map to reposition — see Move Waypoints.
Delete: Tap a waypoint → Delete to remove it.
All five actions work on both the active route AND any Show'd overlay from another collection item — edit race-org routes without loading them as your active navigation.
Waypoint Manager: Three-dot menu on any collection item → Waypoints opens a full searchable list. Each row has a popup menu for Change icon and Change color, plus quick actions for Rename, Delete, Go To, and Fly-to-on-map. The row's leading circle previews the picked icon + color so you can see the change immediately.
Tip: Custom icons imported once are available everywhere — Quick Key slots and any waypoint's Change Icon picker.
Two-way sync of routes, collections, and settings across your devices
When Cloud Sync is on, every route, collection, and setting is synced through Firebase to every signed-in Pro device on your account. Changes appear in real time. Item-level merge uses last-write-wins so the most recent edit always wins.
Deletes are soft — deleted items go to a Trash list at the bottom of the Collections tab. From there you can restore or permanently remove them.
How to use:
Sign in on each device with the same account
Go to Settings → General and toggle Cloud Sync on
The Trash list lives at the bottom of the Collections tab
Follow your route in real-time with turn-by-turn guidance
In the Collections tab, tap the green play button on a route to start a run
Accept the one-time safety disclaimer
The map locks to your GPS position and rotates to follow your heading
A panel shows the next 3 upcoming waypoints with labels, distances, and severity colors
Audio callouts announce each waypoint as you approach
Three configurable display circles at the bottom of the screen show data of your choice (speed, ETA, time-to-next, distance, elapsed, lap count, and more) — see Run Display Circles
A waypoint pointer arrow shows the direction to the next waypoint — see Waypoint Pointer
To end the run, tap the red stop button in the top bar and confirm
Your driven track (with speed, timestamps, and checkpoint data) is automatically saved to the collection as a "Run" item when you stop.
Tip: The camera adjusts zoom based on your speed — zoomed in when slow for precision, zoomed out at high speed to see further ahead. At low speeds (under ~4 mph), the camera uses your device compass for heading instead of GPS.
During a run, DirtOS uses text-to-speech to announce each waypoint as you approach it. The callout includes the waypoint label and distance (e.g. "L 3 in 500 feet").
Choose between two callout trigger modes in Settings → Navigation:
By Distance: Callouts trigger when you come within a set distance (default: 500 feet / 152 meters)
By Time: Callouts trigger when you are a set number of seconds away from the waypoint, based on your current speed. This gives you consistent reaction time regardless of how fast you're driving.
Audio ducks any other audio playing through your device (music, podcasts, phone calls) so the callout is always audible, then restores it after.
You can pick the TTS voice, language, and speech rate. Translation into 28 languages runs fully on-device — see 28-Language Audio Callouts. For approach-distance numbers spoken as you close in on a waypoint, see Countdown Distance Callouts.
Each waypoint is only announced once per run session. Audio callouts can be toggled on/off in Settings.
Speak distance numbers as you close in on a waypoint
Countdown callouts speak the remaining distance to the next waypoint at each step in a configurable list (e.g. "500, 400, 300, 200, 100, 50"). This is on top of the standard waypoint callout.
How to use:
Go to Settings → Navigation
Enable Countdown Callouts
Edit the distance list to add or remove trigger distances
Translated audio callouts in 28 languages, fully offline
DirtOS uses on-device Google ML Kit translation to translate every callout into your chosen language. After the language model downloads the first time, translation runs entirely offline.
You can also pick the TTS voice and speech rate independently of the language.
How to use:
Go to Settings → Navigation
Open Voice / Language
Pick the language, voice, and speech rate
The first time you pick a new language the model downloads in the background. After that it works without internet.
DirtOS monitors your distance from the loaded route during navigation. When you drift further than the configured threshold, an audio warning plays and a red line draws from your position back to the nearest point on the route.
You can optionally have the warning repeat about every 10 seconds for as long as you remain off-course.
How to use:
Go to Settings → Navigation
Set the Off-Course threshold distance (set to 0 to disable)
Waypoints that define speed-limited segments along your route
Speed Zones use specially-named waypoints to mark sections where a speed limit applies. The defaults are SZ to start a zone and SZ END to end it, but the keywords are configurable.
To set the limit, put the number in the waypoint label: a waypoint named SZ 35 starts a 35 mph zone. DirtOS can optionally play an over-speed audio alert when you exceed the zone's limit.
How to use:
Go to Settings → Navigation
Set the start and end keywords under Speed Zones
On your route, name waypoints with the keyword + number (e.g. SZ 25, then SZ END where the zone finishes)
Rally Pacenote Mode swaps the standard 5-level turn severity system for the 1–6 scale used in classic rally pacenotes, where 1 is the tightest turn and 6 is nearly straight. The pacenote number is spoken in audio callouts.
How to use:
Go to Settings → Turn Detection
Enable Rally Pacenote Mode
When enabled, all turn detection and callouts use the 1–6 scale instead of the standard severity labels.
Drop labeled waypoints instantly during a run or recording
Quick Keys is an on-screen grid of 14 buttons plus Undo that lets you drop a waypoint at your current GPS location with a single tap. The grid overlays the map — the map stays live underneath, so navigation and recording continue while it's open.
During a run or recording, tap the grid icon in the top bar to open Quick Keys
Tap any button to drop a waypoint with that label, icon, and color at your current GPS location
A status bar at the bottom confirms: "Added [label] at [coordinates]"
The last button is always Undo — removes the most recent Quick Keys waypoint
Tap the grid icon again to close Quick Keys and return to the map
Each of the 14 on-screen slots is configurable from the full 53-icon library across 7 categories (Terrain, Elevation, Man-made, Navigation, Race, Safety, General). You can change the label, icon, and Bluetooth keyboard binding for each slot. See Waypoint Icon Library.
To customize: go to Settings → Configure Quick Keys, or tap the gear icon inside Quick Keys.
Tip: Quick Keys waypoints, their icons, and colors are saved to the GPX file and persist across sessions.
Drop a custom-named waypoint anywhere on the map without stopping
While a Run is active, unlock the map (padlock icon in the top bar) and long-press anywhere on the satellite view. A prompt lets you name the waypoint before dropping it. Use it for anything Quick Keys doesn't cover: a specific gate combination, a landmark you want to remember, a pit stop, an unmarked hazard.
The waypoint appears as a white pin with a gold ring — distinct from your route waypoints so you know which are pre-planned vs. added mid-run. All long-press drops merge into the active route on the next Run reload or loop wrap, ready for full turn-by-turn audio the next lap.
Tip: Long-press works with the map locked too — but only if you're not in a Run. During a Run the safety lock requires you to explicitly unlock so an accidental hand-brush doesn't drop pins.
53 categorized off-road icons for Quick Keys and any waypoint
DirtOS ships with a library of 53 off-road waypoint icons across 7 categories:
Terrain
Elevation
Man-made
Navigation
Race
Safety
General
The same library is used to fill the 14 on-screen Quick Keys slots and to label any waypoint on your route. You can also import your own 128×128 PNG icons.
How to use:
Configure a Quick Key: Settings → Configure Quick Keys → tap any slot → pick from the library
Change a waypoint icon: tap the waypoint on the map → tap its icon to swap
Import custom: in the icon picker, choose Import and pick a 128×128 PNG
Use a Bluetooth keyboard to drop waypoints hands-free
Connect a Bluetooth keyboard to your device for hands-free waypoint entry during a run. Each Quick Key button is mapped to a keyboard shortcut.
Keyboard shortcuts work from the main map view during a run — you do not need to have Quick Keys open on screen.
To customize shortcuts: go to Settings → Configure Quick Keys, tap any key, then tap "Set Shortcut" and press the desired key on your Bluetooth keyboard.
Tip: A voice confirmation ("[Label] added") plays through your speakers when a waypoint is placed via keyboard, so you never have to look at the screen.
Full-screen alerts when you approach key checkpoints
Configure up to two checkpoint types with custom labels and proximity radii. When you drive within range of a matching waypoint during a run, a large full-screen alert overlay appears.
Go to Settings → Checkpoint Proximity Alerts
Set labels for each type (defaults: "VCP" and "RCP") and their alert radii (default: 500 feet each)
Name waypoints on your route starting with the matching label (e.g. "VCP 1", "RCP Start")
During a run, when you drive within the alert radius of a matching waypoint, a full-screen overlay appears with the checkpoint name
Tap anywhere on the overlay to dismiss it
Each checkpoint has a 60-second cooldown to prevent repeated triggers. Triggered checkpoints are recorded in your run log with timestamps.
Automatic lap count when you're running a closed loop
When Loop Mode is on, DirtOS detects each time you complete the route and increments a lap counter. The current lap count is available as a data type for any of the three Run Display Circles, and it's also recorded in Run Statistics.
How to use:
Go to Settings → Navigation and enable Loop Mode
Still in Navigation, pick Lap Count as one of your Run Display Circle data types
Resize on-screen elements to match your preferences
Use sliders in Settings to adjust the size of on-screen elements during a run:
Waypoint Pointer: the compass arrow that points toward the next waypoint
Run Display Circle sizes: each of the three bottom display circles has its own size slider, configured per circle in Settings → Navigation — see Run Display Circles
Waypoint Circle Radius: the colored circles marking waypoints on the map
Waypoint Label Size: the text size of waypoint labels on the map
All sizes are saved and persist across sessions. Waypoint circle and label size changes take effect immediately on the map when you save settings.
Camera automatically adjusts zoom based on your driving speed
When Fixed Zoom is off (the default), the camera zooms in at low speeds for precision and zooms out at high speeds to see further ahead.
Four speed zones with customizable zoom ranges:
Slow — most zoomed in, great for technical sections
Medium — moderate zoom for trail speeds
Fast — wider view for faster dirt roads
Highway — most zoomed out for highway driving between stages
Customize the zoom level for each zone — and the speed breakpoints between them — in Settings → Navigation → Zoom (Run Mode) using the 4-handle slider. See Speed-Based Zoom Guide for details.
Preview any saved route's flyover without changing your active route
You can launch the 3D flyover for any route directly from the Collections list. This is preview-only — it doesn't change which route is loaded as your active route, so you can scout multiple routes back-to-back without losing your current setup.
How to use:
Go to the Collections tab
Tap the three-dot menu on any route → Flyover Preview
Use the playback controls to scrub, play, pause
Tap the Stop button to clear the controls and exit preview
Create a new route by placing waypoints on the map
Build Route lets you create a route from scratch by tapping waypoints on the map. The app automatically connects them using road routing or straight lines.
On the Map tab, tap the "Build Route" button in the bottom controls row
Tap on the map to place waypoints — the first is marked green (start), the last is red (end), and middle points are orange
The route is automatically drawn between your waypoints in gold
Toggle between "Roads" (follows mapped roads) or "Direct" (straight line) in the status bar
Use "Undo" to remove the last waypoint, or "Clear" to start over
When you're done, tap "Use Route" to adopt the built route
If you already have a route loaded, you'll be asked whether to replace the existing route or add the new route to it. Turns are auto-detected on the new route.
DirtOS's own GraphHopper engine, tuned for off-road
When you use Build Route, Connect Mode, or Trail Finder in "Roads" mode, the request goes to DirtOS's own GraphHopper instance at routing.prerun.io. The engine builds a custom routing model on every request based on your Route Preferences — vehicle type, offroad slider, trail class, surface, and seasonal availability.
OHV trails included. Dirt-bike, ATV, and UTV trails from USFS MVUM, BLM GTLF, and state OHV datasets across the US are in the routing graph. Set your Vehicle Type in Route Preferences to Dirt Bike, ATV/Quad, UTV, or Full-Size 4x4 and Build Route respects what your rig can use. The graph covers ~91M nodes and ~116M edges across the continental US.
Per-request custom routing model. Every route request builds a fresh custom model from your Route Preferences and posts it to the engine. Nine custom encoded values baked into the graph (prerun_source, prerun_dirt_bike, prerun_atv, prerun_utv_50, prerun_full_size, prerun_trail_class, prerun_maint_level, prerun_seasonal, prerun_ohv_designation) let the engine filter trails at the routing level, not just by post-processing. Change your Vehicle Type from Dirt Bike to Full-Size and the same start/end points can return a completely different route.
Fallback to Mapbox Directions. If DirtOS's engine is unreachable, the app falls back to Mapbox Directions so routing still works.
This is automatic — there's no separate setting. To tune what the engine prefers and avoids, edit Route Preferences.
Create a reversed copy of a route for driving in the opposite direction
In the Collections tab, tap the three-dot menu on a route item
Tap "Reverse Route"
Enter a name for the reversed route (defaults to "[route name] (Reversed)")
Tap "Save"
The reversed route is saved as a new item in the same collection. Auto-detected turn waypoints are recalculated for the new direction. User-placed waypoints (from Quick Keys, long-press, etc.) are preserved at their original locations.
Combine multiple route / track / run items into a single new item
Merge Waypoints pulls other-item waypoints INTO an existing item. Merge Items goes a step further: it combines multiple ITEMS (their tracks, waypoints, and everything else) into a brand-new item, in a single tap.
On the Collections tab, three-dot menu on any item → Merge Items
Check the boxes on the other items to merge in (routes, tracks, and runs are all eligible)
Give the merged item a name and pick which collection to save it to
Tap Merge — DirtOS concatenates tracks in the order you picked, dedupes waypoints (name + 50m), recalculates mile positions, and drops the new item into your chosen collection
Great for stitching a multi-day trip into a single continuous route, joining scattered ATV / dirt-bike Track items from a race organizer's multi-stage GPX, or combining your own Run recordings from different sessions into one long log.
Tip: Merge preserves the original items — the merged output is a new item. Nothing you started with is modified.
Share a route: Three-dot menu on a route item → "Share / Export" → choose "Share Link" to generate a shareable deep link, or "Export GPX File" to share the file directly
Share a collection: Tap the share icon at the top of the Collections tab → select which collections to share → all routes are uploaded and a shareable link is generated
Receive a shared route: Open a DirtOS share link on your device — the route or collection is automatically downloaded and imported
Download satellite map tiles for use without internet
After loading a route, DirtOS offers to download the surrounding satellite map tiles for offline use.
Load a GPX route
When prompted, tap "Download" to cache the map tiles (the dialog shows the estimated download size)
Satellite imagery and terrain data are cached for the route area at multiple zoom levels
The map, route line, and waypoints all work without internet
Zoom protection. The auto-download picks a zoom ceiling based on the corridor size (bigger area = lower max zoom to stay within tile budget). During a Run, if you go offline (or lose usable cell — see below), DirtOS silently caps the camera's max zoom at exactly what you downloaded, so you never zoom past your cached tiles and stare at a white map at 60 mph.
Zombie-cell protection. In real-world desert / mountain terrain, cell signal can report "connected" while tiles actually fail to fetch (weak signal, congested tower, deep-canyon multipath). If DirtOS sees a burst of tile-load errors from Mapbox in a rolling 10-second window, it treats you as effectively offline and engages the same zoom clamp automatically. When errors quiet down for 30 seconds, the clamp releases. All silent — no dialog, no dropdown to fiddle with, no way for the map to go white during a stage.
Storage management. Settings → Storage lists every downloaded region with its size in MB. Delete individual regions or all offline maps in one tap. A warning fires if a download would take more than 50% of your free disk space.
Tip: Always download offline maps before heading into areas with no cell service. Even with zoom protection, cached tiles are what get rendered — nothing helps if none are cached.
Polygon-based offline map download for an area you draw
Region Download lets you draw a polygon on the map for the exact area you want offline. Route overlays render on top of the polygon as you draw, so you can see what you're going to capture before committing. Then the area is downloaded as a cached map region.
How to use:
From the Collections tab, tap New Collection → Region Download, or after loading a route accept the offline map prompt
Tap on the map to drop polygon vertices around the area you want
Create routes by driving them — no GPX file needed
Record Mode lets you build a route from scratch by driving the course while recording your GPS track and dropping waypoints along the way. Perfect for route makers and race organizers scouting new courses.
Tap the Record tab (bottom navigation)
Tap "Start Recording"
Accept the safety disclaimer (first time only)
The map switches to GPS follow mode — your position is tracked in real-time
Drop waypoints as you drive using Quick Keys (tap the grid icon) or by long-pressing the map
When finished, tap the red stop button and confirm
Choose which collection to save the route to (or create a new one)
Optionally auto-detect turns from the recorded track — any waypoints you dropped during recording are kept
The recorded route is saved as a standard route item in your collection. You can immediately run it, share it, edit waypoints, or use any other route feature.
Tip: Use a Bluetooth keyboard with Quick Keys to drop labeled waypoints (Caution, Rocks, VCP, etc.) without taking your eyes off the trail.
Every time you end a run, DirtOS automatically saves a detailed track log to your active collection as a "Run" item (hidden by default). The log includes:
GPS position at each update
Speed at each point (Garmin TrackPointExtension format)
Altitude / elevation
Timestamps
Triggered checkpoint names and hit times
Run logs can be exported as GPX files and viewed with the Stats option in the three-dot menu.
Chase Cam locks the camera to your position and rotates the map to your heading. It's pure camera follow — no navigation, no audio callouts, no run display circles. While moving, the map rotates to your GPS heading; when stopped, it rotates to your device compass heading.
Map gestures are locked while Chase Cam is active.
How to use:
Enter: double-tap Find Me
Exit: single-tap Find Me
Chase Cam also auto-exits if you switch tabs, start a Run, or start Recording
See your crew's live position on the map during rides
Tap the group icon in the Map tab top bar
Tap "Start Group" to start a new group, or "Join Group" to open the discovery + entry page
Share the group code or QR code with your riding partners
Each member appears as a colored dot on the map with their name and speed
Cycle between Follow Group (camera fits all members), Follow Me (camera tracks your position, same smooth camera as Chase Cam), and Free Pan
Tap "Leave Group" or "End Group" when done
Works over cell, wifi, or Meshtastic LoRa mesh radios for fully offline group tracking. Pair a Meshtastic device in Settings to enable mesh relay. Devices with both mesh and internet automatically bridge positions between online and offline riders.
Persistent groups + Public discovery (new in v4)
Your group's code is now persistent across sessions. Start a group once with a friendly name (e.g., "Baja 500 Recon Team") and everyone in your crew re-joins the same code every day — no re-sharing needed. Multi-day trips just work. Tap "Generate New Group" only when you actually want to rotate the code.
When you Start a group you can flip a Public toggle. Public groups are discoverable by anyone on the Join Group screen — useful for organized rides, race events, or spectators watching the leaders. The discovery list shows the group name, creator, member count, and how far away they are. Turn Public off to make the group private again.
Recent groups you've joined are remembered locally so re-joining a friend's ride tomorrow is a one-tap dropdown selection.
Important: Create or join a group before you lose cell service. Group creation and joining require an internet connection. Once you're in the group, Meshtastic mesh tracking works fully offline.
Tip: Tap another member's dot on the map to Go To their position — useful for finding a stopped rider or reuniting after a split. You can build routes, navigate, and record while in a group — all features work simultaneously with live tracking.
Text messages to your crew, without leaving the map
Every live group has a chat channel. Tap the chat FAB in the top bar to open the chat sheet, type a message, tap send. Messages arrive on every member's phone in real time, persist across app restarts, and survive if a rider drops out and rejoins later. Delivery is via Firebase Realtime Database with offline persistence — messages queued while offline flush automatically when reception returns.
New-message behavior while the sheet is closed:
Unread badge on the chat FAB
Optional TTS read-aloud so drivers hear messages without looking at the screen — toggleable in Settings → Navigation → Group Chat
Sender's color + name spoken before the message text ("Mike says: Rocks in the wash")
Own messages never re-play back to you (deduped by user id). Chat history loads on join so latecomers can catch up on the conversation.
Quick Replies. Configure short canned replies (Settings → Navigation → Group Chat → Quick Replies) — "OK", "Waiting for you", "Stopped for gas" — tap once to send without typing.
Tip: The chat FAB has a first-time arrow hint so new users know it's there. Once you tap it, the hint is dismissed permanently.
Push-to-talk voice comms to your group, over cell — with hardware button support
Beyond text chat, DirtOS supports voice messages sent from any group member to everyone in the group. Recording is triggered by an on-screen mic button OR by a paired Bluetooth PTT hardware button on the handlebar.
How a voice message flows:
Press-and-hold the mic (on-screen or BT hardware button)
A quick two-tone chirp confirms the mic is live — talking after the chirp is captured cleanly
Release to stop recording (or auto-stop at 30 seconds)
Audio uploads to Firebase Storage; a chat message with the audio link posts to the group
Every group member's phone auto-plays the message through their speaker/BT intercom (unless auto-play is disabled)
TTS coordination. Voice message playback is coordinated with turn callouts, weather alerts, and Tour Mode — if a safety-critical waypoint callout is speaking, incoming voice messages queue and play in order after the callout finishes. No message ever cuts off a turn announcement.
Native audio path. The record-start chirp plays through a native AVAudioPlayer (iOS) / SoundPool (Android) that inherits the app's shared audio session — no clash with flutter_tts, no dropouts across BT intercoms.
Hardware button support. DirtOS pairs with any Zello-compatible Bluetooth PTT button (Herda, PTT-Z, iasus, etc.) via BLE. Once paired the button works while the app is backgrounded and while your phone is locked. Configure pairing in Settings → Bluetooth PTT Button — scan, tap to pair, done.
Tested devices: Herda PTT, PTT-Z. Any BLE button implementing the Zello Hardware Partner spec should work; the pairing UI lists every discovered peripheral so unrecognized buttons can be manually tried.
Tip: Voice auto-play defaults ON — disable it in Settings → Navigation → Group Chat → Auto-Play Voice Messages if you'd rather tap-to-play from the chat sheet.
A separate web dashboard at dirtos.io/org for organizers running an event
DirtOS is a two-sided platform: the driver app on one side, the Race Organizer Portal on the other. Race directors publish a course, riders join by code (or by tapping an invite link), and the organizer watches the field in real time from a browser.
Organizer flow
Sign in at dirtos.io/org with the same account you use in the app (Pro required)
Upload a GPX for the event and set a race name
Get a 6-character group code AND a shareable link (dirtos.io/group/CODE) to distribute to riders
Watch the live map as riders join, their positions update in real time, and their chat messages come in
Kick a rider, swap the route mid-event, or end the event — all from the same dashboard
Rider auto-import
When a rider joins a race-organizer group, DirtOS automatically:
Downloads the route from the organizer's upload
Saves it to a "Race Events" collection on the rider's device
Prompts "Ready to navigate?" so the rider is one tap from Follow Mode
Skips the re-download on subsequent joins to the same route (matched by group code + upload timestamp)
Shareable invite links
The organizer copies https://dirtos.io/group/ABCDEF and drops it into a group text or Discord. A rider taps the link:
App installed: the link opens DirtOS directly via universal link, auto-joins the group, and starts the auto-import flow — no code typing
App not installed: the link lands on a friendly landing page with an "Open in DirtOS" button + App Store / Google Play download buttons; after install, tapping the same link auto-joins
Route swap mid-event
Course changes (rain closures, safety re-routes) upload the new GPX from the portal. Riders currently in the group automatically re-import on their next Follow Mode start or app foreground — no re-issuing codes or asking riders to re-download by hand.
End event
Organizer taps End Event, riders' live sharing stops, the route is purged, chat history is cleared, and the group discovery listing goes inactive. Clean shutdown.
Launch customer: NORRA Safari Class 2026.
Tip: Every action available in the Live View top bar is also available on the dashboard event row — Copy Link, Swap Route, End Event — so you don't have to drill into an event just to end it.
DirtOS integrates with Meshtastic LoRa radios for group location sharing that works without cell service or wifi. Each rider pairs a small, inexpensive radio (~$40) to their phone via Bluetooth. Positions are relayed over the LoRa mesh network with a typical range of 3–6 miles between nodes.
How it works
Go to Settings → Meshtastic Device
Tap Scan to find nearby Meshtastic radios
Tap to pair your device (one-time setup)
Join or create a group from the Map tab — the mesh radio connects automatically
Your phone sends GPS positions to the radio via Bluetooth, which broadcasts them over LoRa
Other riders' radios receive the positions and display them on their maps
Gateway bridging
If a rider has both a mesh radio and cell/wifi, their phone automatically bridges positions between the mesh and Firebase. This means online riders can see offline mesh riders and vice versa — no manual configuration needed.
Tested devices
Lilygo T1000-E — compact keychain-sized tracker
Seeed Wio Tracker L1 Pro — rugged with onboard GPS
Any Meshtastic-compatible device should work. The radio's onboard GPS is not used — DirtOS sends the phone's GPS position directly over the mesh for higher accuracy and faster updates.
Tip: DirtOS runs both Firebase (online) and Meshtastic (offline) transports simultaneously. If you lose cell service mid-ride, mesh tracking continues seamlessly.
DirtOS overlays forest service and BLM trails directly on the satellite imagery. Filter by vehicle type to show only trails rated for your rig:
Dirt Bike — single-track and narrow trails
ATV — ATV-width trails and wider
UTV — UTV-rated trails and roads
Full-Size — full-size vehicle roads and trails
Toggle POI markers on or off to see trailheads, campgrounds, and other points of interest. The overlay is enabled by default and can be configured in Settings → Map Overlays.
Tip: Tap any trail segment on the map to see its name, surface type, and vehicle rating. The entire trail highlights in red so you can see how it connects.
Every geotagged photo you've taken, pinned to the map
Toggle Show My Photos in Settings → Map Overlays and every geotagged photo from your device library appears as a clustered pin on the satellite map. Tap any pin to view the photo.
As you take new photos during a trip, they automatically appear as pins — no need to import, tag, or manually add anything. Ideal for prerunning: photograph obstacles, gate combinations, campsite spots, and scenic overlooks, then see the whole trip mapped after the fact.
Photos never leave your device. DirtOS only reads the GPS coordinates and thumbnails from your library; full-resolution photos load only when you tap a pin. The feature is entirely opt-in.
Tip: Only photos with GPS EXIF data show up. Most phone cameras record location by default — if a photo doesn't appear on the map, its location tag is missing.
Why iOS only? Google Play's Photos policy restricts full-library access to gallery / photo-editor apps. On Android, the toggle is greyed out. Nothing changes for iPhone / iPad users.
Toggle Weather Radar in Settings → Map Overlays to overlay live NEXRAD reflectivity tiles from the Iowa Environmental Mesonet directly on the satellite map. Storm cells, precipitation bands, and organized weather show up in real time.
Radar is semi-transparent so you can still see the underlying trails and roads. Coverage is continental US. Data is free, no auth needed — DirtOS pulls tiles directly from the public feed.
Tip: Pair the radar overlay with Weather Callouts for audible alerts along your route.
Automatic voice alerts for forecast, severe weather, and incoming precipitation
Toggle Weather Callouts in Settings → Navigation. When on, DirtOS uses the National Weather Service API to announce weather along your route:
At Run start — destination forecast (short forecast + temperature + next period)
During the drive — severe alerts (tornado, thunderstorm, flash flood) at your current location, spoken once, never re-announced
Precipitation lookahead — if the forecast 20 miles ahead of your current mile shows ≥ 40% chance of precipitation in the next 3 hours, DirtOS announces the ETA to the weather and what to expect ("Heads up. Rain expected on your route in about 25 minutes.")
US-only (NWS coverage). Silent-fails outside US or without network. Automatically off when Audio Callouts is off.
Tip: Weather Callouts respects the same TTS language and speech rate settings as your turn callouts.
Route to any destination — place, coordinate, group member, or a waypoint
Tap any destination and DirtOS builds a route + starts follow mode. Sources include:
Discover page — search businesses, POIs, categories (gas, food, camping), lat/lon coordinates, or Mapbox trail features. Works partially offline (lat/lon parsing + trail viewport query still work).
Long-press the map — drop a pin anywhere and choose "Navigate here" or save as a waypoint. Reverse-geocoded label so you know what you tapped.
Group ride member tap — tap another rider's puck to Go To their position.
Waypoint list — the navigation arrow next to any saved waypoint sets it as the destination.
Every Go To saves the destination as a one-waypoint route to your current collection (or a synthetic "GoTo" collection if none is active). Auto-Detect Turns fires after the route is fetched so you get real turn-by-turn callouts.
Tip: Distance sort in Discover uses the map camera center as the anchor, not your GPS position. Zoom to the area you care about and results sort by distance from what you're actually looking at.
Automatic gas-stop insertion for routes longer than your rig's fuel range
Set your Fuel Range in Settings → Route Preferences. When you build a route (via Go To or Build Route) that exceeds it, DirtOS offers to add gas stops along the way.
The gas-stop finder iterates: it searches for a station about 70% of a tank past the last anchor, adds it as a via-point, re-routes through it, and repeats until the last leg fits in your fuel range. Works for multi-tank routes — a 900-mile route with a 200-mile fuel range gets four gas stops added automatically.
Each stop is added to your route as a waypoint labeled with a fuel-pump emoji plus the station name, so audio callouts announce them like any other waypoint.
Tip: Set your Fuel Range slightly below your actual range so you have reserve when you arrive. A 400-mile tank + 350-mile range = every gas stop leaves you 50 miles of buffer.
DirtOS becomes your tour guide — automatic Wikipedia landmarks as you drive
Toggle Tour Mode in Settings → Navigation. Every 30 seconds while in follow mode, DirtOS queries Wikipedia for geo-tagged articles near your position. When it finds one within 1000 meters that you haven't heard yet, it speaks the article title and the first sentence over your audio.
Historic buildings, geographic features, national parks, notable events, small-town backstories — anything with a Wikipedia article and a location. Rate-limited to at most one callout every 90 seconds so you're never flooded. Each article is tracked so it never repeats on the same run.
Works alongside turn callouts, weather alerts, and speed zone alerts. Requires network. Automatically off when Audio Callouts is off.
Tip: Great on paved-road overlanding routes and less-familiar terrain. Backroads through the Rocky Mountain Front or the Big Bend region become a rolling history lesson.
List every overlay trail currently visible on screen
Trail Discovery gives you a list view of all the overlay trails that are inside the map's current viewport. It's a fast way to spot named trails you didn't know about in the area you're looking at.
How to use:
On the Map tab, tap the compass / explore icon in the top app bar
Pro users see treasure icons scattered across the map. Tap a treasure to reveal a hint about its location. Treasures are cached for offline discovery so you can hunt even without cell service.
Proximity circles around your position during navigation
Range rings draw configurable distance circles around your live position during GPS navigation. Use them for proximity awareness during rally stages or to gauge distance to upcoming features. Configure ring distances in Settings → Range Rings.
Each route in your collection can have its own color. Tap the three-dot menu on any route item and select "Color" to choose a custom track color. This makes it easy to distinguish overlapping routes on the map.
Export any route as a Lowrance USR v4 file with full waypoint colors. Use the three-dot menu on a route item → "Share / Export" → "Export USR (Lowrance)". The file can be imported directly to any Lowrance GPS unit.
Control how Build Route and Connect Mode calculate routes
DirtOS uses a custom off-road routing engine with preferences you can tune for your vehicle and riding style. Go to Settings → Route Preferences to configure:
Vehicle Type — Dirt Bike, ATV, UTV, or Full-Size. This filters out trails that aren't rated for your vehicle so you only get routes you can actually drive.
Offroad Preference — A slider from "Prefer Paved" to "Prefer Offroad". Slide right and the routing engine will favor dirt roads, trails, and unpaved surfaces. Slide left and it prefers highways and paved roads.
Minimum Trail Class — Filter out trails below a minimum difficulty rating. Set to "Any" for all trails.
These preferences apply whenever you use Build Route or Connect Mode with "Roads" routing. They do not affect "Direct" (straight line) mode.
Tip: If Build Route can't find a path, try relaxing your vehicle type or trail class filter. Routes in very remote areas may require "Direct" mode for off-road segments.
Understanding the two types of items in your collections
Every item in a collection is either a Route or a Run:
Route — A pre-planned track with waypoints. Created by importing a GPX file, using Build Route, or using Record Mode. This is what you follow during GPS navigation.
Run — A recorded GPS log from an actual drive. Created automatically when you stop GPS navigation (Follow Mode) or manually when you save a Record Mode session. Includes speed, elevation, timestamps, and any checkpoints you triggered.
Routes are for planning. Runs are the history of what you actually drove. Both are stored as GPX files and can be exported or shared.
Tip: After a GPS navigation session, your run is automatically saved to the same collection as the route you followed. Use the Stats option in the three-dot menu to see distance, speed, elevation, and checkpoint data for any run.
DirtOS is built for remote areas with no cell coverage. Here's what works offline and what doesn't:
Works fully offline
GPS Navigation (Follow Mode) — GPS comes from your phone's hardware, not the internet. As long as you have map tiles cached, navigation works perfectly offline.
Record Mode — GPS recording is entirely local.
Offline Maps — Download map tiles before your trip while you have wifi. Go to any route and DirtOS will offer to download tiles for that area.
Audio Callouts — Text-to-speech runs on-device.
Quick Keys / BT Keyboard — Fully local.
All waypoint editing — Saved to local files.
GPX and USR export — Files are created locally.
Meshtastic group tracking — Works entirely over LoRa radio mesh, no internet needed.
Treasure Hunt — Treasures are cached on first load.
Requires internet
Downloading map tiles — The initial download needs internet, but once cached they're available offline.
Build Route / Connect Mode ("Roads") — Road-snapped routing requires a server call. "Direct" (straight line) mode works offline.
Sharing routes and collections — Uploads to Firebase require internet.
Firebase group tracking — The online transport needs cell/wifi. Use Meshtastic for offline groups.
Trail Overlay — Trail tiles need to load initially, then are cached.
Tip: Before heading out, load your route and let the map fully render at different zoom levels. DirtOS will offer to download offline tiles — accept it. This caches everything you need for the trip.
The difference between the two buttons on collection items
Each route item in a collection has two controls that do different things:
Show toggle (eye icon) — Draws the route line on the map so you can see it. Does NOT start navigation. You can show multiple routes at once to compare them. Toggle off to hide the line.
Run button (green play icon) — Loads the route as your active route and prepares it for GPS navigation. Only one route can be active at a time. Tap the Run button and then start Follow Mode to begin navigating.
If a route is already active (loaded for navigation), the Show toggle controls whether the track line and waypoints are visible on the map without reloading.
Tip: Use Show to overlay a previous run on top of your current route — great for comparing your line against a planned track.
During Follow Mode, a red arrow appears at the bottom-left of the screen. This is the waypoint pointer — it always points in the direction of the next upcoming waypoint relative to your current heading.
Arrow pointing up — The next waypoint is ahead of you
Arrow pointing left/right — The next waypoint is off to that side
Arrow pointing down — The next waypoint is behind you (you may have passed it)
The pointer is especially useful when driving off-route or when the map is zoomed in too far to see the next waypoint. The arrow size can be adjusted in Settings → UI Element Sizes.
Speed-based zoom automatically adjusts the map zoom level during navigation based on how fast you're driving. When you're moving slowly (crawling over rocks), the map zooms in tight. At high speed, it zooms out so you can see further ahead.
The zoom is configured with a 4-handle slider in Settings → Zoom (Run Mode) when Fixed Zoom is off. Here's how it works:
The 4 zones
Zone 1 (Slow) — Below the first handle's speed. Map is zoomed in maximally for precision maneuvering.
Zone 2 (Medium) — Between handles 1 and 2. Moderate zoom for trail speeds.
Zone 3 (Fast) — Between handles 2 and 3. Wider view for faster dirt roads.
Zone 4 (Highway) — Above handle 3's speed. Maximum zoom-out for highway driving between stages.
Drag the handles to set the speed breakpoints where the zoom changes. The zoom level transitions smoothly between zones so there's no jarring jump when you speed up or slow down.
Tip: A good starting point for off-road is: 5 mph / 15 mph / 35 mph. This gives you tight zoom on technical terrain, medium zoom on trails, and wide zoom on fast roads. Adjust based on your typical riding speeds.