Pavel694 downloadsExplore your vault as a living globe: folders become continents, notes become cities, links become roads, tags orbit as satellites, and Route Finder reveals paths between ideas.
Turn your Obsidian vault into a world you can navigate. Each top-level vault folder becomes its own continent, notes become cities, links become roads across the surface, and tags orbit overhead as satellites. Linked notes stored directly in the vault root become islands; orphan notes remain cities over open water. The cartography reserves approximately half the globe for ocean. A territory-first spherical allocator gives every folder one connected, non-overlapping landmass before cities are relaxed, so even densely cross-linked vaults cannot pull continents into interwoven ribbons. Route Finder reveals every shortest path between distant notes.
Spherical Graph is designed as a stable spatial map: a finite layout operation computes positions, validates and saves one complete snapshot, and then stops. Normal reading, search, filtering, selection, rotation, zoom, theme changes, and resizing do not move notes.
Initialize and Renew first grow deterministic folder territories on an intrinsic icosphere raster. Area quotas follow folder size, simultaneous growth keeps every region connected, and a permanent water buffer separates different owners. Cities are then seeded across their own land with an irregular blue-noise distribution and relaxed without crossing the fixed coast. Sparse graph-distance stress arranges internal roads, while cross-folder links mostly influence macro orientation and relative coastal-port placement. The renderer adds multi-scale shoreline detail and beaches to that committed raster; it no longer invents corridors between cities after layout.



The globe keeps the same saved layout on desktop and mobile. Automatic mobile profiles reduce GPU pixel density, label budgets, road/land tessellation, and continuous-frame rate without moving a city. While a touch gesture is active, ordinary labels and base roads are temporarily hidden; selections and routes remain visible. Phone mode disables hover, Auto rotate, and the normal atmosphere control. Tablet mode keeps Fullscreen, Auto rotate, and atmosphere.
Touch input supports drag rotation, pinch zoom, and tap selection with a larger tap tolerance. Controls use 44 px targets and safe-area insets. Map controls has a pinned close button, scrolls independently, and stops above Obsidian's bottom navigation. Only one graph view is retained on mobile, rendering stops when Obsidian moves to the background, and an active layout calculation is cancelled to avoid an Android background freeze. Expensive Refresh and Renew actions remain available in the Map controls menu.
This is not a conventional 3D force graph with important notes near the center and other notes floating in a volume. Every node is represented internally by a unit vector (u \in S^2), and its rendered point is (R u). The solver uses geodesic angular distance, tangent-plane forces, and exponential-map updates directly on the sphere. Edges are sampled as shortest geodesic arcs on the surface rather than drawn as straight chords through the globe.
The result has no left/right map seam. Notes near longitudes (+180^\circ) and (-180^\circ) are genuinely close because longitude is not a layout coordinate.
Spherical Graph has three finite layout operations:
While Refresh or Renew runs, the last committed map remains visible and interactive. Progress messages contain diagnostics only. The renderer receives new coordinates once, after the complete result passes operation-ID, graph signature, length, finiteness, unit-norm, and Refresh-displacement checks. A validated final buffer becomes immutable input to the post-layout geographic analysis before the complete snapshot is saved atomically. A cancelled, stale, invalid, or failed operation leaves the previous snapshot untouched.
Vault changes never start a solver automatically. Instead the view reports a pending state such as:
Changes detected · +7 / -2 notes · 11 link changes
New notes without committed positions remain pending; deleted notes disappear; and a reliable rename keeps the old position under the new path. Select Refresh layout when you want to incorporate the pending graph.
Spherical Graph ItemView, ribbon action, and command-palette
commands.data.json map can be carried by
Obsidian Sync and restored with Load map. When the optional derived graph
cache is compacted for Sync safety, the vault is indexed again while the
canonical layout and geography remain unchanged.Start and Dest markers, and clickable route details.| Action | Control |
|---|---|
| Rotate | Drag empty canvas space |
| Rotate on touch | Drag with one finger |
| Zoom on touch | Pinch with two fingers |
| Start or stop automatic rotation | Toggle Auto rotate in the bottom status rail |
| Zoom | Wheel or supported pinch gesture |
| Inspect | Hover a node |
| Select | Click a node |
| Pin or unpin a favourite city | Select a note, then use Pin note / Unpin note in Selection details |
| Select a tag and show its links | Click a silver tag satellite |
| Clear selection | Click empty canvas space or press Escape |
| Open note | Double-click a node or press Enter on a selected search result |
| Open in new tab | Ctrl/Cmd + click |
| Open from selection details | Click a selected, linked, endpoint, or route note; hold Ctrl/Cmd for a new tab |
| Hide or show selection details | Select the Selection details header |
| Find and focus | Type in Find a note or tag… and choose a result |
| Find all shortest routes | Select an origin, then choose Map controls → Explore → Find route and select a destination |
| Clear a route | Choose the active route control in Map controls → Explore |
| Hide categories without moving the map | Use Map controls → Visible content |
| Hide or show geography | Toggle Continents in Map controls → Globe |
| Hide or show the cloud layer | Toggle Atmosphere in Map controls → Globe |
| Save the complete map state now | Choose Map controls → Saved map → Save map |
| Reload the last saved or synced map | Choose Map controls → Saved map → Load map |
| Enter the control-free presentation globe | Choose Map controls → Explore → Fullscreen; use Exit fullscreen or press Escape to return |
| Change globe surface | Use Map controls → Globe |
| Include pending changes | Choose Map controls → Layout → Refresh layout |
| Build a new world | Choose Map controls → Layout → Renew layout, then confirm |
| Stop a calculation | Choose Map controls → Layout → Cancel calculation |
| Restore view | Choose Map controls → Explore → Reset camera |
Manual or automatic rotation changes only the camera and never a node position.
Visual settings apply without running a solver. The graph-menu filters for tags, attachments, unresolved links, and orphan notes are also render-only. Data exclusions can create pending changes. Layout settings apply to the next relevant explicit operation; changing them alone does not move the current map.
Completed layouts are saved automatically. Settings are debounced and pin changes are committed immediately. Camera movement stays device-local until Map controls → Saved map → Save map stores the current viewpoint together with the complete layout, settings, and pins. Avoiding background camera writes also prevents an inactive device from rolling a newer synchronized map back.
The only authoritative state file is Obsidian's standard
.obsidian/plugins/spherical-graph/data.json. To carry the same layout and
pins between devices, enable community-plugin data in
Obsidian Sync settings for the vault.
No extra file is written into the vault root. If Sync updates plugin data while
Obsidian is already running, choose Load map after Sync finishes; the
command re-reads data.json, invalidates any older local graph scan, and
restores the synchronized positions, continents, camera, and pins as one map.
Partial settings, cache, or pin writes first preserve newer fields already
delivered by Sync.
To stay below the 5 MB per-file ceiling of the Standard Sync plan, persistence uses a 4.5 MB safety budget. At the budget boundary it discards only the rebuildable graph cache; committed positions, continent ownership, camera, settings, and pins remain authoritative. If those canonical fields alone exceed the budget, the save is rejected instead of writing an unsyncable or partial state.
After publication, install Spherical Graph from Settings → Community plugins → Browse.
For a manual or beta installation:
Build the plugin or download a release.
Place these files directly in
<vault>/.obsidian/plugins/spherical-graph/:
main.jsmanifest.jsonstyles.cssRestart or reload Obsidian after the first install or an ID/manifest change.
Open Settings → Community plugins, enable Spherical Graph, and run Spherical Graph: Open graph from the command palette.
Do not create an extra nested repository directory; manifest.json must be
directly inside .obsidian/plugins/spherical-graph/.
Use a dedicated disposable development vault.
npm ci
npm run dev
Quality and utility commands:
npm run lint
npm run typecheck
npm run test
npm run test:coverage
npm run build
npm run validate:release
npm run check
npm run benchmark:layout
npm run generate:test-vault -- --output ./tmp/test-vault --nodes 500 --edges 1500 --seed 42 --pattern clustered
# Stress continent allocation with many root folders and cross-folder roads
npm run generate:test-vault -- --output ./tmp/territory-vault --nodes 480 --edges 2800 --seed 20260805 --pattern territories --folders 24
The production build writes the release artifacts to the repository root. The
layout worker source is embedded into main.js; no separate worker file is
required.
See ARCHITECTURE.md, ALGORITHM.md, MANUAL_TEST_PLAN.md, and VALIDATION.md. The complete implementation specification is preserved in docs/CODEX_TASK.md.
Spherical Graph is designed for private, offline vault use:
npm ci and npm run check from a clean checkout.manifest.json, package.json, versions.json, and
CHANGELOG.md.v.
The release workflow repeats the full check, verifies the tag/version,
attests the build, and creates a draft release containing main.js,
manifest.json, and styles.css.The complete maintainer procedure is in docs/RELEASE_CHECKLIST.md.
MIT. Third-party attributions are in THIRD_PARTY_NOTICES.md.