Arseniy Seroka118 downloadsView your Google Maps Timeline location history on an interactive map — visits, routes and exact GPS tracks, with day and date-range pickers.
View your Google Maps Timeline (location history) on an interactive map inside Obsidian — visits, movement routes, and your exact GPS tracks — with day, month and custom date‑range pickers. Your data never leaves your machine; map tiles come from OpenStreetMap or Esri (no key) or Google (your own key).
A two‑pane view: an interactive map on the left, a clickable timeline of that period on the right. Click any row to fly the map to it.
◀ ▶ stepping, Day / Week / Month quick buttons, or a custom from–to range.| Settings |
|---|
main.js, manifest.json, styles.css from the latest release.<your-vault>/.obsidian/plugins/maps-timeline/.Add jagajaga/obsidian-maps-timeline in the BRAT plugin.
The plugin reads per‑year JSON files in a vault folder (default Maps/Timeline/data/). Generate them from your Google data once:
Timeline.json.tools/ (see tools/README.md):pip install ijson
MAPS_TAKEOUT=/path/to/export MAPS_OUT=/your-vault/Maps/Timeline/data python3 tools/maps_days.py
MAPS_TAKEOUT=/path/to/export MAPS_OUT=/your-vault/Maps/Timeline/data python3 tools/maps_tracks.py
The data format is simple — any converter producing the same shape works.
Open the map three ways: right‑click a year file (…/2018.json) → Open in Maps Timeline, the 🗺 ribbon icon, or the command Open Maps Timeline. Then pick a day, step with ◀ ▶, jump with Day / Week / Month, or type a custom range. Toggle the dense track layer off for very large ranges.
| Setting | What it does |
|---|---|
| Map style | OpenStreetMap or Esri Satellite (no key), or a Google basemap (needs key). |
| Google Maps API key | Your own key, stored locally in the vault. Enable Map Tiles API (Google tiles) and Places API (New) (place names). Restrict it. |
| Data folder | Vault folder holding the per‑year JSON. Matched case‑insensitively. |
Each <year>.json is { "year": 2018, "days": { "YYYY-MM-DD": Day } }, where a Day is:
{
"source": "old",
"visits": [
{ "placeId": "ChIJ…", "name": "Caffè Terzi", "lat": 44.49, "lng": 11.34,
"start": "2018-08-01T12:53:00Z", "end": "…", "minutes": 30, "semanticType": "TYPE_HOME" }
],
"activities": [
{ "type": "IN_PASSENGER_VEHICLE", "km": 37.9, "start": [44.5,11.3], "end": [43.8,11.2],
"startTime": "…", "path": [[lat,lng], …] }
],
"paths": [ { "startTime": "…", "path": [[lat,lng], …] } ],
"track": [ [lat,lng], … ]
}
name may be null for coordinate‑only visits — the plugin fills those in via the Places API and caches them.
git clone https://github.com/jagajaga/obsidian-maps-timeline
cd obsidian-maps-timeline
npm install
npm run build # bundles src/main.js + Leaflet -> main.js, and styles.css
Source lives in src/; main.js and styles.css are bundled outputs. Releases are built and attested by GitHub Actions (.github/workflows/release.yml).
MIT. Bundled Leaflet retains its BSD‑2 license (see NOTICE).