# EO-Map Embed Guide (machine-readable)
This is the public contract for putting EO-Map on a third-party site as an iframe.
Feature overview: https://eo-map.com/embed-map/
Human guide (live builder): https://eo-map.com/embed-guide
Native (non-iframe) JS embed: https://eo-map.com/embed-native.txt
Pinned loader: https://eo-map.com/embed/v1.js
Types: https://eo-map.com/embed/v1.d.ts
Human showcase (iframe or native copy): https://eo-map.com/embed-guide
If you are an LLM, implement from this file. Do not scrape the React app.
Product: EO-Map, a free 3D map of EVE Online (New Eden).
Canonical site: https://eo-map.com/
## Canonical iframe
https://eo-map.com/embed?...
Equivalent: https://eo-map.com/?embed=1&...
Trailing slashes /embed/ and /embed-guide/ are served.
Solar-system embed: https://eo-map.com/solar-system/{id}?embed=1
URL parameters are INITIAL state. After load, update the same iframe with
postMessage. Do not change iframe.src for each new system.
## Minimal example
Jita is 30000142. Useful single-system zoom is 50. 3D and security-status
colouring are the defaults. Open on EO-Map appears in the frame and must stay.
## URL parameters
system
Numeric CCP SDE id. Selects and centres that system.
Example: system=30000142 (Jita). Names are q=, not system=.
systems
Comma-separated numeric ids for accent highlight rings.
Nearby systems read better than a map-wide set. Add fit=1 so the camera
frames exactly that set; an explicit zoom is unreliable with systems=.
Example: systems=30000142,30000144,30000143&fit=1
(Jita, Perimeter, Niyabainen)
q
Exact system name. Resolved then stripped from the URL.
Example: q=Jita
layout
2d or 3d. Default 3d. Embed-only; does not write the visitor's full-app
2D/3D preference.
Example: layout=2d
coloring
security or off. Default security, unless cinematic color= is set.
Distinct from color=. Do not overload color= for security status.
Example: coloring=off
zoom
Camera distance 0.25-300. Useful single-system frame: 50.
If omitted, the view is wide (165). Do not use old 1000/2500 values.
Example: zoom=50
angle
Vertical angle in degrees, -90 to 90. Omit for top-down north-up.
angle=0 is edge-on, not the default.
orbit
1 to auto-orbit. Any mouse interaction stops it.
color
Cinematic star tint: blue, green, purple, red, yellow, white, random,
realistic. NOT security colouring. If set and coloring= is omitted,
security colouring turns off. The named tints only render with orbit=1
(cinematic mode). realistic paints stars by spectral class in any embed
and implies details=1: the stellar dataset (~21 MB, cached) loads after
the map, so stars start white and colour in. coloring=off (without
color=) gives plain white stars.
angle with orbit
The orbit keeps the elevation it starts from, so angle=20..35 with
orbit=1 gives a low, 3D-reading orbit instead of a top-down spin.
performance
1 disables bloom and other heavy visuals. Use on CMS pages or if more
than one embed might appear.
details
1 loads the extra solar-system dataset (~21 MB) on a galaxy embed.
Security colouring does not need it; color=realistic implies it.
Solar-system embeds always load it.
fit
1 frames highlighted/linked systems. An explicit zoom wins if both are set.
links
systemA-systemB:color, comma-separated. Max 50.
Colors: green, red, blue, yellow, purple, white, orange, cyan.
label_ and labelMode
Optional overlay names. labelMode=hover|always|off.
routing, from, to, jumpRange
Gate-only route. All four are required to enter routing embed mode.
jumpRange (alias range) must parse greater than 0. EO routing does not
use that number as a jump distance; send jumpRange=1.
from/to: names or numeric ids.
Example: routing=1&from=Jita&to=Amarr&jumpRange=1
routeLabels=1 draws names along the route (default off).
showRoutingCard, routingCardMinimized, routingCardWidth control the card.
mode
On /solar-system/{id}?embed=1 only: cinematic or icon (aliases solarMode,
solarVisualMode, icons).
embed
embed=1 is required on / and /solar-system/{id}. Redundant on /embed.
panel= is ignored in embed.
Reserved for later (not implemented): layers=, postMessage types
ef-map-layers, ef-map-layout, ef-map-coloring.
## postMessage
Origin-open, public, read-only. No SSO, no secrets, no writes to the host.
Wire names stay ef-map-* on purpose (not eo-map-*). Unknown types are
ignored, so renaming a verb silently does nothing. Target the iframe
contentWindow. Target origin may be https://eo-map.com or '*'.
Keep ONE persistent iframe. Wait for ef-map-ready, then navigate/highlight.
Do not recreate the iframe per update. Several simultaneous WebGL embeds
can fail (about six concurrent frames produced errors in testing).
Outbound, once the universe map is loaded:
{ "type": "ef-map-ready", "systemsLoaded": true }
Outbound after each successful focus (including the initial URL system):
{ "type": "ef-map-selected", "systemId": 30000142, "name": "Jita" }
Inbound:
ef-map-navigate { systemId: number, zoom?: number }
Fly to that system. Optional zoom 0.25-300.
ef-map-highlight { systems: number[] }
Replace accent rings. Works with no initial systems= on the URL.
Numeric strings are accepted.
ef-map-zoom { zoom: number }
Change distance immediately, without changing the selected system.
ef-map-angle { angle: number }
Vertical angle in degrees, clamped -90..90.
ef-map-enter-system { systemId: number }
Enter solar-system view without reloading. Loads ~21 MB if uncached.
ef-map-show-universe
Return from solar-system view to the galaxy.
ef-map-flash { systemId: number, kind?: string, color?: string, value?: number }
Flash the map's event burst at a system. The HOST supplies the id from
its own feed (killboard, intel bot, ESI poller); the embed never opens a
live socket and has no kill-source integration of its own.
kind: kill (red, default) | capital (kill bloom plus the capital shock-ring) |
positive (green) | accent (theme orange) | neutral (white).
Unknown kinds fall back to kill.
color: optional '#rrggbb' override of the kind palette.
value: optional ISK loss on kind=capital (alias isk). Finite, non-negative,
capped at 1e12. Drives the Battle Replay capital shock-ring size. Omitted
value uses the default ring; supplied ISK scales it, never past 420px.
Numeric string ids are accepted. Unknown ids are ignored.
Example: { type: 'ef-map-flash', systemId: 30000142, kind: 'kill' }
Example: { type: 'ef-map-flash', systemId: 30000142, kind: 'capital' }
Example: { type: 'ef-map-flash', systemId: 30000142, kind: 'capital', value: 4790000000 }
Unknown types are ignored so later verbs can be added.
## Complete host example
Loading…
## Kill feed example (host-driven flashes)
Your page already has system ids from its own kill feed. Flash them on one
persistent iframe. Nothing in the embed connects to a kill source.
## 2D example
## Routing example
A routing embed does not frame the route by itself: add system= (the
start) and zoom= (about 30 for a 2-4 jump route) or the view stays wide.
routingCardMinimized=1 starts the card collapsed so the drawn route is the
picture; routeLabels=1 names the systems on it. Short routes read best.
## Solar-system example
## Well-known system ids
Jita 30000142
Perimeter 30000144
Niyabainen 30000143
Amarr 30002187
Rens 30002510
Dodixie 30002659
Hek 30002053
On eo-map.com: search a name, right-click the star, Copy System ID.
## Limits and honesty
- Public read-only map. No EVE SSO in third-party iframes.
- The EO live-events WebSocket does not connect in embed. Event flashes in an
embed only happen when the host sends ef-map-flash.
- On production (eo-map.com), Google Analytics 4 records an anonymous page_view
for embed loads, same as the full app. Preview builds do not inject GA.
- Embed layout= and coloring= do not write the visitor's normal EO-Map prefs.
- Open on EO-Map must remain visible.
- One persistent iframe. Prefer postMessage over replacing src.
- Use performance=1 and loading="lazy" when the embed is below the fold.
- Do not mount many WebGL embeds on one page.
- There is no public REST API for the map. This iframe is one integration.
A native (non-iframe) JS embed is documented at https://eo-map.com/embed-native.txt.
Feature overview: https://eo-map.com/embed-map/
Human guide: https://eo-map.com/embed-guide
Site index for assistants: https://eo-map.com/llms.txt