π Earth
Explore the planet in 3D. A locally-hosted, interactive 3D globe you can search, fly across, and drop personal location pins onto.
Install & availability
Available now. Install from the Companion Hub App Store. Verified on the test fleet: the published image pulls, starts, serves its web UI, and survives a container restart.
| Hub App Store | Search Earth β Install |
| Container image | ghcr.io/companionintelligence/ci-earth:latest (public) |
| Web UI port | 5173 |
| Architecture | linux/amd64 and linux/arm64 (multi-arch) |
Overview
Companion Earth is a locally-hosted, interactive 3D globe rendered in your browser. It is built on Three.js with react-three-fiberΒ and @react-three/xrΒ , and renders Googleβs Photorealistic 3D Tiles when an API key is supplied at build time. You search for a place, fly to it, and can save a personal βpinβ for any location you visit.
Earth runs entirely from the container served on your Hub β no account, no cloud sync. Pins you save are stored in your browserβs localStorage on the device you used.
Current capabilities
What Earth does today, as shipped:
- 3D globe rendering with Three.js / react-three-fiber, optionally using Google Photorealistic 3D Tiles
- Geocoding search β fly-to navigation: type a place name and the camera animates to it
- βPin this locationβ to save the spot youβre viewing; pins persist in browser
localStorageonly - Time-of-day sun-lighting slider that changes the angle of the sunlight on the globe
- WebXR scaffolding via
@react-three/xrfor headset viewing
Earth is a standalone globe viewer in this build. It does not connect to your Digital Memory Server, import location history, or render photos/notes/conversations. The features below are on the roadmap, not in the shipped image.
Planned / roadmap
These features are described in the product vision but are not present in the current release. Treat them as future work:
- Offline tile cache / local tile server for fully offline maps
- βDigital Memoryβ pins generated from your photos, notes, and conversations
- Location-history import (Google Timeline, iOS Significant Locations)
- Spatial Scan 3D overlays on the globe
- Rich memory cards, cluster view, and trip export / sharing
- A Settings panel for Offline Maps and Data Sources
Use Cases
- Search any place on Earth and fly to a photorealistic 3D view of it
- Bookmark locations you care about as local pins on your own device
- Adjust the sun angle to see a location under different lighting
- View the globe in a WebXR-capable headset
Architecture
Companion Earth (WebGL)
βββ 3D Globe Renderer (Three.js + react-three-fiber)
βββ Google Photorealistic 3D Tiles (if VITE_GOOGLE_MAPS_API_KEY baked at build)
βββ Geocoding search β camera fly-to
βββ Sun-lighting (time-of-day) slider
βββ Pin store (browser localStorage)
βββ WebXR session (@react-three/xr)Photorealistic 3D Tiles
Earth can render Googleβs Photorealistic 3D TilesΒ . This requires a Google Maps API key, which must be provided as VITE_GOOGLE_MAPS_API_KEY at build time β Vite bakes the value into the static bundle. The published image is built without a key, so to enable photorealistic tiles you must rebuild the image with your key:
docker build \
--build-arg VITE_GOOGLE_MAPS_API_KEY=your_key_here \
-t ci-earth:custom .Without a key, the globe still renders, but Googleβs photorealistic tiles are unavailable.
Setup
Install from Hub
Search for Earth in the Hub app store and install.
Open Earth
Navigate to http://earth.ci.localhost. The 3D globe loads in your browser.
(Optional) Enable photorealistic tiles
Rebuild the image with VITE_GOOGLE_MAPS_API_KEY set, as shown above, then install your custom build.
Usage
Navigating the Globe
Navigation is search-driven: type a place name (city, landmark, address) into the search bar and Earth geocodes it and flies the camera to that location. There are no free click-drag / scroll camera controls in this build.
Pinning a Location
Fly to a location you want to remember, then click Pin this location. The pin is saved to your browserβs localStorage on the current device. Pins do not sync between devices or to your Hub.
The Sun-Lighting Slider
The time-of-day slider adjusts the angle of the sunlight illuminating the globe β it is a lighting control, not a memory time scrubber.
Troubleshooting
Globe renders but isnβt photorealistic
The image was built without a Google Maps API key. Rebuild with VITE_GOOGLE_MAPS_API_KEY set to enable Photorealistic 3D Tiles.
My pins disappeared
Pins are stored in the browserβs localStorage. Clearing site data, switching browsers, or using a different device will not show pins saved elsewhere.
Looking for my photos / Digital Memory on the map Memory pins, location-history import, and Digital Memory integration are not part of this release β see Planned / roadmap.