個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Privacy focused navigation app for vehicle-base sporting activities.
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗Offline motorcycle and bicycle navigation that rides a GPX roadbook at speed, by Hondo Garage
(com.hondogarage.roadbook): plan a route on the web planner or record a pre-run, drop cues and notes,
then follow it with the arrow, the fill-to-the-turn bar, pips in the helmet and the cue read aloud. Map packs
download in-app from https://hondoroadbook.com. Website and pipeline: web/, .github/workflows/.
Built with ./gradlew :app:assembleRelease. (Until October 2026 the same code also produced Fold, a
network-less flavour with no recording and no voice; Roadbook superseded it in every way and the flavour was
retired. The Kotlin packages are still named fold.*.)
app/src/roadbook/assets/tts/ holds the voice;
PiperEngine.kt drives it.hondoroadbook.com/packs/catalog.json,
downloads with resume, imports automatically. IMPORT FILE still takes a .mappack you copied yourself.
Packs of different kinds (roads today; terrain, imagery later) for one region install side by side.The Protomaps basemap only carries minor roads from zoom 12 and trails from 13. Road packs built
since 2026-10-25 also contain roads.pmtiles: tracks from zoom 8, minor roads from 9, trails and
cycleways from 10, service roads at 11, cut from the pack's own routing graph (packer/.../Overview.kt,
≈20 MB for Montana). The style draws them up to zoom 12, where the basemap takes over. Older packs
without the file simply don't get the extra layers.
A second kind of pack, kind=terrain in pack.txt, carries terrain.pmtiles: hillshade raster tiles
(WebP, shadow as alpha over a constant colour, so flat and sunlit ground is transparent and the paper
shows through) built from the AWS Terrain Tiles elevation data by packer/terrain/build_terrain.py.
The app draws every terrain pack in view between the land cover and the water/roads of whichever road
pack covers the same ground; terrain packs carry no roads, routing or search, and don't count as map
coverage. Zoom 13 in the US (10 m 3DEP data), 12 elsewhere; a mountain state is 150–300 MB.
python3 packer/terrain/build_terrain.py --name "Montana terrain" --region Montana --bbox="-116.1,44.3,-104.0,49.1" --out montana-terrain.mappack
A cue is a <wpt> whose <type> names it; <desc> (or <name>) carries the words.
<wpt lat="46.0201" lon="-112.0000"><name>Left</name><desc>onto the ranch road</desc><type>cue:LEFT</type></wpt>
<wpt lat="46.0302" lon="-112.0001"><name>Danger</name><desc>washout</desc><type>danger:3</type></wpt>
<wpt lat="46.0403" lon="-112.0000"><desc>water crossing, usually a foot deep</desc><type>note</type></wpt>
cue: + STRAIGHT, SLIGHT_LEFT, SLIGHT_RIGHT, LEFT, RIGHT, SHARP_LEFT, SHARP_RIGHT, KEEP_LEFT,
KEEP_RIGHT, UTURN, ROUNDABOUT; danger:1..3; note. Cues more than 150 m from the line are
ignored, so ordinary waypoints in the same file do no harm. A track with authored cues is followed
exactly as authored: no turns are synthesized from its geometry.
A browser planner on the same router and maps, for the desk: click two points, drag the line
onto the trails you want (every mode can be pulled onto any road or track), pick a mode, get the
cues the phone will speak. Surface mix, elevation profile, BLM land ownership, aerial imagery and
an inspect window per spot. Send to phone parks the GPX for 24 hours under a six-letter code
that the app fetches (TRACK → FETCH CODE); Publish puts it in a shared library that both the
planner map and the app (MAPS → BROWSE ROADBOOKS) can browse. The app can publish a recorded
track too, trimmed at the ends. Published files keep only the line and the cues. See web/README.md
for how the routing container, the tile proxy and the library are deployed, and server/ for the
service itself.
wrangler.jsonc + web/ is the Cloudflare Worker for hondoroadbook.com (static site, /download/*
and /packs/*). .github/workflows/packs.yml builds every region in packer/regions.json (the US
states, the Canadian provinces and territories, and Baja California) in both kinds on GitHub's runners and publishes them to the rolling GitHub
release packs, which the Worker serves; an R2 bucket is an optional mirror. release.yml signs and
publishes the APKs on a tag. Details: web/README.md.
Offline. No account. Roadbook shows a map, follows a GPX track, or routes you to an address or a point you long-press, with a turn cue (arrow + distance + a bar that fills as the turn approaches and lands exactly at the turn). Everything else is built on that.
fold/
app/ Android app (Kotlin). MapLibre renders Protomaps vector tiles from local files.
core/ Pure JVM library: road graph, A* router, route follower, turn cues, GPX, search.
packer/ Desktop tool: OSM extract → .mappack (tiles + routing graph + address index).
server/ The core as an HTTP routing service, for the planner (a Cloudflare Container).
web/ hondoroadbook.com: Worker, tile proxy, API, the planner page.
dist/ roadbook.apk (signed), fold-packer.jar
keys/ roadbook-release.jks — the signing key (never committed). Updates must be signed with the same key.
ACCESS_NETWORK_STATE and ACCESS_WIFI_STATE (which the map library asks
for) are stripped with tools:node="remove".roadbook.apk from https://hondoroadbook.com on the phone, or copy it over USB.roadbook.apk. Android asks to allow installs from that app — allow it, then Install.Updating later: install the new roadbook.apk over the old one; packs and settings stay.
Roadbook draws every installed pack and routes across them: each pack's road graph carries the OpenStreetMap node ids, so the same junction in Montana's and Wyoming's packs is one node to the router and a Manhattan→Cheyenne route (tested: 988 km, 66 ms) just crosses the line. When more than six packs are installed the map draws the six nearest to the camera and swaps them as you move.
To build every state: put fold-packer.jar and build-states.sh in a folder on a computer and run
./build-states.sh # all 50 states + DC: ~2 hours, ~30 GB (Geofabrik downloads + packs)
./build-states.sh montana wyoming idaho # or just some
FOLD_PACKER_ARGS="--max-zoom 14" ./build-states.sh # ~40% smaller packs, same roads and names
Copy the .mappack files to the phone's Downloads folder (USB, or a USB-C drive), open Roadbook,
MAPS → IMPORT → the first time, pick the Downloads folder when asked → IMPORT ALL.
A 450 MB pack imports in under a minute from the phone's own storage. A 2.5 GB one (Texas,
California) takes a few minutes. Importing straight from a USB-C drive avoids copying the pack
onto the phone first.
Any OpenStreetMap extract works: Geofabrik has every country and most states and provinces
(https://download.geofabrik.de). For a piece of a bigger extract, --bbox cuts roads, places and
tiles to a rectangle:
java -Xmx6g -jar fold-packer.jar --pbf mexico-latest.osm.pbf --bbox -118.5,22.8,-109.3,32.8 --out baja.mappack --name "Baja California"
Packs overlap and route across each other, so a Baja pack next to California just works.
You need Java 17+ on a computer (brew install openjdk@21, sudo apt install openjdk-21-jre, or
adoptium.net on Windows) and an OpenStreetMap extract of the region:
north-america/us/montana-latest.osm.pbf.osm.pbf / .osm file from another source.Then:
java -Xmx6g -jar fold-packer.jar --pbf montana-latest.osm.pbf --out montana.mappack --name "Montana"
The packer builds the routing graph and address index from the PBF, then fetches vector tiles for
the same bounding box from the newest Protomaps daily planet build (https://build.protomaps.com)
using HTTP range requests, and writes one .mappack. Montana takes about 70 seconds and 450 MB;
Colorado 133 seconds and 800 MB. Build per state, not the whole country: a single 25 GB pack has no
advantage over 51 state packs, and the per-state build fits in an 8 GB Java heap.
This is the only step that touches the internet, and it happens on your computer, not the phone.
Options: --bbox minLon,minLat,maxLon,maxLat to pick the tile area yourself, --max-zoom 14 for a
smaller pack with slightly less street detail, --tiles some.pmtiles to use tiles you already have,
--tiles-url to extract from a different PMTiles archive (any URL that supports range requests, or a local file).
Rough sizes (full detail, zoom 15): a big rural Western state 0.4–1 GB, a dense state 2–4 GB, the whole US ~25 GB, the planet 100+ GB. Packs can be copied phone-to-phone; they contain nothing personal.
export ANDROID_HOME=/path/to/android-sdk # platform 35 + build-tools 35
./gradlew :core:test :packer:test # routing/GPX/HUD tests (set FOLD_GRAPH to a graph.bin for the real-data tests)
./gradlew :packer:fatJar # packer/build/libs/fold-packer.jar
./gradlew :app:assembleRelease # then zipalign + apksigner (keys/ is git-ignored; see release.yml)
Map data © OpenStreetMap contributors (ODbL). Basemap tiles and style © Protomaps (ODbL / BSD). Rendering by MapLibre Native. Fonts: Noto Sans.