Self-hosted version of the MeshCore wardrive coverage map. Runs locally with SQLite — no cloud dependencies.
git clone https://github.com/mintylinux/meshwar-map-docker.git
cd meshwar-map-docker
docker compose up -dOpen http://localhost:3000 in your browser.
- Same map interface as the community map
- SQLite backend — single-file database, no external services
- Manual import tool — vet and validate data before adding
- Contributor tracking — track who contributed what data
- Leaderboard API — per-contributor stats
- Upload control — app uploads disabled by default (security-first)
- Docker volume — database persists across restarts
- Export data from the MeshCore Wardrive app (Settings > Export Data > JSON)
- Copy the JSON file to the
tools/directory - Run the import script:
cd tools && bash import.sh
# Or inside Docker:
docker exec -it meshwar-map bash -c "cd /app/tools && bash import.sh"node tools/import.js mydata.json --contributor Chuck --region WAOptions: --dry-run, --contributor NAME, --region CODE
Set ALLOW_UPLOAD=true in docker-compose.yml, then add your server as an upload endpoint in the app: http://your-server:3000/api/samples
Only enable on trusted networks — there is no authentication.
GET /api/samples— Coverage data for the mapPOST /api/samples— Upload samples (requires ALLOW_UPLOAD=true)GET /api/stats— Global statisticsGET /api/contributors— Contributor leaderboard
PORT(default: 3000) — Server portALLOW_UPLOAD(default: false) — Enable app uploadsDB_PATH(default: /app/data/meshwar.db) — Database path
Use nginx or nginx-proxy-manager to expose on your domain with HTTPS:
server {
listen 443 ssl;
server_name map.yourdomain.com;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}Database: data/meshwar.db (SQLite, persisted via Docker volume)
Archived imports: data/processed/2026-04-15-Chuck-WA-342pings.json
MIT