OpenHunt Docs

The Android app

OpenHunt for Android on Google Play — offline map packs, background GPS track recording, an offline viewshed, and the same map and account as the web.

The OpenHunt app (Expo + MapLibre Native) is the same map workspace as the web — same layers, same identify, same saved objects, same account — plus what only a phone can do: GPS, background track recording, and true offline. Mobile never gets product features the web lacks; it adds device capabilities on top.

Get it on Google Play: play.google.com/store/apps/details?id=sh.openhunt.app — or open openhuntmaps.com/app on any device. A free account is required. iPhone is next; the web's /app page is the list.

Signing in

The app is account-gated: sign in with the email and password you use on the web, or with Google. The web's magic-link door is web-only — if you registered by magic link and never set a password, use "Forgot password" in the app once, or sign in with Google if that is the same address.

Your plan comes with you. Pro is bought on the web ($49 a year) and the app reads the entitlement: pack downloads and Watch push unlock on the phone without a second purchase.

Offline packs

Hunters don't have service where it counts, so offline is designed in, not retrofitted. Packs are whole PMTiles archives downloaded per state, in tiers you pick by storage budget:

TierWhat it covers
BasemapRoads, towns, labels — one pack for every state
EssentialsPublic lands, hunt units, walk-in, landlocked, trails, MVUM
ParcelsPrivate parcels with owners
ElevationDEM — hillshade, 3D, viewshed and elevation profiles
TerrainThe slope and aspect overlays
LandcoverLand cover and vegetation type

With packs downloaded, everything works in airplane mode: the basemap and its labels (glyphs ship with the pack), every data layer, tap-to-identify, hillshade and 3D, viewshed, and route elevation profiles sampled from the local DEM. Packs show storage used, can be cancelled mid-download, and are deleted per tier. Downloading packs is Pro; packs you already downloaded keep working if a plan lapses.

Two honest gaps: New Mexico has no parcel pack (the state does not distribute parcel data) and Nevada has no separate elevation pack (it is covered by the West-wide DEM archive).

Track recording

Hit record and hunt. Recording runs as a foreground service — screen off, phone in your pocket — with crash-safe flushes, so a dead battery costs you minutes of breadcrumbs, not the hunt. Stop and save produces a track with per-point times, elevations, and speeds that syncs like any other object; the web app renders the analysis.

Viewshed and 3D terrain

Drop a point and the app paints what is visible from it — on the device, corrected for the curvature of the earth, from the elevation pack when there is no signal. 3D terrain toggles from the map rail; the exaggeration you set is remembered.

Record Hunt and Season HQ

Starting a hunt saves the forecast at your start point with it, so the journal entry carries the conditions you actually hunted. Season HQ on the phone is the same board as My Season on the web: deadlines, next moves, hunts and reminders.

Watch push alerts

OpenHunt Watch alerts — closures, opportunities, weather warnings, fire perimeters — arrive as push notifications on the phone. Watch delivery is Pro.

Saved objects and sync

Waypoints, routes, and tracks live in on-device SQLite, mirroring the web's local store one-for-one, with the same sync protocol when signed in. GPX import and export, sharing, and the measure and area tools all work in the field.

Once installed, openhuntmaps.com links to units, the map, draw pages, My Season, Watch and share links open in the app (Android App Links, verified against the site's assetlinks.json). A unit page emailed to you lands on that unit's screen.

Building from source

Self-hosters can build the app against their own stack. MapLibre is native code, so Expo Go cannot run it — build an APK and sideload it:

cd apps/mobile && npm install
npx expo prebuild --platform android

cd android
EXPO_PUBLIC_API_URL=http://<your-server>:8090 \
EXPO_PUBLIC_TILES_URL=http://<your-server>:3200/tiles \
./gradlew :app:assembleRelease

Copy android/app/build/outputs/apk/release/app-release.apk to the phone (or adb install over USB) and allow "install unknown apps" when prompted. The two EXPO_PUBLIC_* variables point the app at your self-hosted stack; plain HTTP is fine on a trusted LAN, HTTPS is the right answer beyond it.

Prerequisites are the standard Android toolchain: JDK 17 and an Android SDK. For live-reload development, npx expo run:android --device serves JS over the USB cable instead.

On this page