Underground 2 Revived
Play Need for Speed: Underground 2 (2004) in Chrome and Firefox with WebGPU graphics, Web Audio, up to 120 fps widescreen, controller support, free roam and Online races with friends. Fan project, not
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证A fan-made 3D No Man's Sky galaxy map and portal address decoder
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗A free, fan-made 3D map of all 256 No Man's Sky galaxies. A 12-glyph portal address is really a 3D coordinate, so type or tap one and you fly straight to that system — then plan hyperdrive routes, chart and edit systems, and see real planet data from NMS Almanac and Voyager's Haven.
Live site: map.nomansskyhub.app · part of the No Man's Sky Hub
Fan-made, built on public wiki data and reverse-engineered address maths. Not affiliated with, sponsored by, or endorsed by Hello Games.
At a glance
Contents — every section below is folded; tap a heading to open it.
New here? Hit ▷ Tour in the map's toolbar for a 10-step guided walk-through.
portal address -> 12 hex glyphs -> signed 3D voxel coordinate
|
seeded generator (same address, same system, always)
|
galaxy view -> local slice -> system view
|
Edit system (optional, per visitor)
|
Netlify Function -> filter -> GitHub commit
|
data/overrides.json (lives only on GitHub, see below)
Galaxy view. Every one of the 256 real galaxies rendered as a proper 3D spiral, colour-matched to its actual type (Normal / Harsh / Empty / Lush) -- not a static image, a real navigable scene you fly through. Switch galaxies from the toolbar dropdown, or jump straight to one by number or name via the searchable picker next to the glyph keypad -- galaxy isn't optional metadata here, it's part of the address: the same 12 hex glyphs decode to a different real system in each of the 256, so a portal address alone never fully identifies a system without it (see Shared community edits below).
Starting position. A first-ever visit lands on a random spot roughly 700,000-750,000 ly from the galactic core in Euclid -- matching where a fresh No Man's Sky save actually starts, not a fixed placeholder address (the map's own theoretical edge-of-galaxy distance works out to ~1,159,656 ly, matching the real game's own maximum almost exactly, so the random range sits realistically inside it rather than near the edge). It isn't tied to your real save, just a reasonable place to start exploring from. Once you jump anywhere for real -- typing an address, Random, a Search result, Set course, etc. -- the map remembers that position and which of the 257 galaxies you were in, in your own browser's local storage only (never sent anywhere), so coming back later picks up exactly where you left off instead of restarting in Euclid every time. That position is marked in Galaxy view by a pulsing gold ring -- click or tap it to drop straight into Local view at that system, rather than only being able to switch views from the toolbar.
Galactic Atlas overlay. Toggle Atlas in the Galaxy-view toolbar to
overlay the real points of interest from Hello Games' own Galactic
Atlas website -- Euclid galaxy only,
around 50 community-featured regions and planets, hand-entered once into
atlas-pois.json rather than scraped live (see
nms-tools/check-atlas-updates.mjs
for how to check whether that list has drifted from the live site). Each
one decodes with this project's own address maths and renders as a diamond
marker that orbits with the galaxy exactly like the gold ring above --
click one to open its real Atlas page in a new tab. Points that sit close
together on screen collapse into a single numbered marker until you zoom
in far enough to tell them apart, matching how the official Atlas site's
own map behaves.
Local view. Zoom into a galaxy and the real star field appears -- thousands of systems, coloured by spectral class, named and clickable. Selecting one opens the info panel on the right: race, economy (with real sell/buy percentages), conflict level, star count, and every planet/moon in the system. Hovering a star (desktop only) shows a lighter zoom-aware popup first -- name only from a distance, full stats once you're in close -- and clicking any star auto-plots a course to it, replacing whatever was plotted before.
More real stars near you. The region you're in and the six next to it now show every system known to be real, not a 22-star sample: the region's guide stars and purple band, plus its true size from NMS Almanac (looked up once per region for everybody and kept, so it doesn't eat into the Almanac's limits), plus any systems travellers have logged there on Voyager's Haven, labelled with their Haven name. Each star is the right system, but where it sits inside its region is approximate -- neither source gives a star's exact spot -- so the dots won't line up one-for-one with the in-game map.
Zoom in, still see names. Star names go to the stars actually on your screen, so zooming right in keeps up to 28 names visible. The you-are-here and selected rings keep the same size on screen at any zoom instead of ballooning, and while a course is plotted, the next stop and the destination get a small arrow chip at the screen edge when they're out of view. The first time you visit a region, a short "Charting nearby systems" note shows while its real systems are fetched (it never shows again for that region).
Honest about its limits. The About modal spells out exactly what's generated accurately (star type, system/region names, planet count) versus an unverified guess (individual planet names, and why) -- rather than presenting a guess as fact. Biome, Category type, Conditions, rings, and water go a step further than that (added 2026-09-08, extended 2026-09-09): unlike planet names and Sentinel activity -- which show a plausible generated value, tagged as a guess -- nobody has reverse-engineered any of these five, so this project doesn't display a guess for them at all. They simply don't appear until a traveller reports the real answer via Edit system.
Enter system. Fly into any system for a true 3D orbital view -- binary and ternary stars, planets and moons on real orbits with rings where the generator rolled them, and (where the region has one) a black hole or Atlas Interface rendered as its own object rather than swapped in for the star.
Labels in system view. Every planet, moon, station and point of interest gets a small boxed label with a thin line back to it, colour-coded by type: gold for the space station, cyan for planets, grey for moons, orange for points of interest. Long names wrap onto extra lines instead of running off the screen, so a station shows its name and Alliance in full. Boxes keep clear of each other, of the station photo, of the planets themselves and of the system title, and a label whose planet has moved off screen (zoomed in) is simply hidden. Local view keeps its plain star-name labels.
Colliding planets touch. Tick "Colliding planets present" in Edit system and pick which planets collide: they stay joined as they orbit and their spheres sink into each other, the way real colliding planets look in game.
Course lines, styled like the real game. Solid means one jump gets you there, dashed means it's a multi-hop route, red-dashed means your current hyperdrive can't reach that star's colour at all. Just hovering any star (no need to select one first) draws a quick preview line before you commit to a course.
Warp Manifest. Click Plotted course on a selected system and it does two things at once: draws the route line above, and opens the Warp Manifest -- the full jump-by-jump itinerary behind that line, not just the summary card's totals. Every stop is real: START, HOP 1, HOP 2 ... DESTINATION, each with the actual system name and portal address the route passes through -- a hyperdrive in No Man's Sky can only ever warp to a real charted star, never empty space, so neither does this. Click any row to open that system's full info panel (race, economy, planets, everything) without losing your place -- a "back to [target]" link one click above the panel returns you to the system you were actually navigating toward. Total Jumps and Est. Distance sit at the top of the manifest, COPY STEPS copies the whole itinerary as plain text, and Jump to / Clear on the Course plotted card commit to the route or cancel it. Click Plotted course again on the same target to close the manifest without re-plotting; pick a different target and it plots fresh and reopens automatically. Like every other panel here, it's draggable by its header and collapsible with the small arrow button.
Galactic Navigator. PLAN JOURNEY on the Warp Manifest card takes
you to a separate page -- the Galactic Navigator -- in this same tab (no
second window), handing off the real plotted route: every hop's real name,
portal address, region, star type, race, economy and conflict level,
straight from the same address-decoding this map uses everywhere else, not
invented for the handoff. Close the tab or come back another day and it
picks the journey back up right where you left it -- saved on this device
the same way bookmarks and waypoints are. One piece is still a simplified
preview rather than a finished feature: confirming a real black-hole exit
inserts that detour and resumes toward the originally planned next stop,
rather than recalculating a whole new multi-hop route through the rest of
your journey. The exit candidates themselves are real, though (2026-08-30):
generated live from nms-core -- the same generator this map uses
everywhere else -- centred on the black hole's own real region, not a
fixed sample cluster unrelated to your actual route.
Real stars only, checked with NMS Almanac (2026-10-26). Tested against NMS Almanac: a region's real systems only use some of the 4,096 possible system numbers, so the map used to plan stops (and draw stars) that aren't in the game. Now every star on the map and every route stop is one that always exists -- the region's guide stars, black hole and Atlas Interface, plus its purple stars. Each hop is planned to at most 85% of your hyperdrive range, because a star's exact spot inside its 400 LY region isn't known, so distances are shown as approximate. In the Navigator,
✓ CHECK ROUTE WITH NMS ALMANAC asks the Almanac about every stop: a ✓ means it's a real system; a stop it can't find is swapped for a real star in the same region your drive can reach (marked SWAPPED). Data: NMS Almanac.
Route here, no star-tapping needed. Picking a destination by tapping a tiny star on a phone is guesswork, so every row in Search and Favourites now has a ➜ Route here button: it plots the course from the system you're in straight to that one (any system in the galaxy, near or far), then PLAN JOURNEY as usual. Search also takes a pasted 12-digit portal address, so a destination someone shares on Discord or Reddit is one paste and one tap away. While a course is plotted, its next 8 stops and the destination are labelled on the map by number and name, so you can see which dot is which.
Saved & shareable routes. Once a course is plotted, the Course plotted card gets two more buttons below Jump to / Clear. Save Route stores that exact route into My Routes (the Routes button in the toolbar) so it's there on this device even after closing the tab -- expeditions rarely get planned start-to-finish in one sitting. Copy Link hands the same route out as a URL instead, for pasting to yourself on another device or sending to someone else -- opening it loads (and saves) the route automatically, or paste one into the box at the top of My Routes without needing the link to open on its own. Saved routes travel with Export/Import logs the same way bookmarks and waypoints do.
Route arrows in star colours. When your next stop or destination is off-screen, the arrow at the screen edge now takes that star's colour (yellow, red, green, blue or purple, the same colours as the star dots), so you can see its class at a glance. The “Charting nearby systems” note stays at least 4 seconds and then fades out instead of vanishing.
Filters. Narrow the local star field by colour, race, economy, or special system types (outlaw, black holes, Atlas interfaces, phantom/shadow stars), plus a hyperdrive type + range setting that actually gates what you can reach -- Plotted course and Enter system both check it. There's no "Visited" or "Edited by traveller" filter option here (removed 2026-08-27) -- Local view is inherently a spatial sweep of whatever's currently loaded nearby, so a filter here could never surface something on the other side of the galaxy no matter how it worked. For a complete list of everywhere you've ever bookmarked, waypointed, visited, or edited, regardless of where you currently are, use Search with an empty query instead (see "Search by name" below) -- that's the actual way back to it.
Portal glyph keypad. Type a hex address or tap the real 16 in-game glyphs directly -- both stay in sync, so you can decode a screenshot from your own game without knowing the hex first. Looking a system up is private: nothing is shared unless you press Save in Edit system.
Search & Scan. No reverse index exists across the whole procedural galaxy -- names are generated from the address, not the other way round -- so the Search popup covers this two ways, split across a By Name and a By Traits tab (added 2026-09-12). By Name still starts with anything this browser already knows a real name for: community-documented systems, plus your own bookmarks, waypoints, and visited history. Results are galaxy-aware -- each one is tagged with the real galaxy it belongs to, since the same address means something different in each of the 256 -- and picking one switches you to that galaxy automatically before jumping there. Leave the search box empty and it instead lists everywhere you've bookmarked, waypointed, or visited, plus any system you personally have edited or bulk-imported from your save (added 2026-08-27, tagged "Documented (you)" -- other travellers' edits stay out), sorted alphabetically -- a way to get back to somewhere you've been without needing to remember its address or portal glyphs.
Either tab can also run a real Scan of nearby space, out to a radius that starts synced to your current Hyperdrive's jump range (Filters) and stays synced automatically until you type your own value into the radius box. A scan checks every system it can reach against your query or trait filters -- including individual planet and moon names, not just system names, with the result telling you exactly which name matched -- plus every real black hole and Atlas Interface in range for By Traits. With no name typed and no trait filter set, Scan instead just lists whatever's nearby, nearest first, for casually browsing the neighbourhood rather than looking for something specific. Clicking any result opens its info panel and silently plots a course to it without navigating away, so browsing results never costs you whatever route you already had plotted.
Edit system. Every system starts as a plausible procedural guess. Edit system lets you overwrite that with what you actually see in-game -- stars, race, economy, conflict, per-planet biomes and rings -- and the result is visible to every visitor, not just saved locally. Every edit is a real git commit, so nothing is ever silently lost. The form itself is an "Adaptive console" (added 2026-09-10) -- a brand-new system opens a step-by-step wizard, one section at a time, in order; an already-documented system instead opens six flip-card tabs -- Identification, Economy & Conflict, Stellar Bodies, Special Features, Surveyor Log, Attribution -- you can jump between directly, since you're correcting existing data rather than filling it in from scratch. Biome now starts blank, showing "Unknown" until you confirm it (added 2026-09-08) -- nobody has reverse-engineered the game's real biome roll, so unlike race/economy/ conflict this project never shows a guessed biome as if it were fact. Biome is now split into three fields: Biome (the canonical category), Category type (the real on-screen wording you actually saw, e.g. "Isotopic" for a Radioactive planet -- filtered live to whichever Biome is picked, wiki- researched per biome), and Conditions (renamed from "Descriptor" -- real weather-phrase suggestions, also filtered by Biome). All three accept your own typed value if what you saw isn't listed, and a genuinely new value becomes a suggestion for every future visitor too, not just saved and forgotten. Whether a planet has rings or water joined that same strict treatment (2026-09-09) -- neither has ever been reverse-engineered either, so like Biome, both simply don't appear at all in the info panel until a traveller ticks the real answer via Edit system, rather than showing a guessed checkbox state as fact. "The Reliquary" is no longer a selectable Biome -- research found it's actually a prefix/suffix tag the real game layers onto an existing biome ("Abandoned Desert", "Dusty Relic"), not a 13th category of its own -- replaced by two independent per-planet checkboxes, Reliquary and Ruins. Resources and Minerals were renamed Common resources / Uncommon resources to match the wiki's own rarity split, and the same dropdown-plus-your-own-value treatment covers Salvageable tech and Fossils & curiosities too. An optional screenshot (added 2026-09-01, resized and compressed automatically) sits alongside the public notes field -- visible to every visitor, same as everything else here -- and your own private Surveyor notes can carry a screenshot too, saved only to your own device. Space station directorship (added 2026-09-09, for the real "Cosmos" 10th-anniversary update) -- a manual-only checkbox plus an optional station name and photo, same pattern as Black hole/Ruins/Outlaw above, since who a real player made director of their station isn't something a procedural generator could ever derive. A director can also optionally have founded an -- checked against the real patch notes first: founding one is its own separate, optional action a director may take, not scoped to any single station or region, so it's tracked the same optional way as the station name itself. This is still a foundation pass: existence, name, photo, and alliance name are tracked, not any deeper director-specific detail.
Your own station photo. In system view, a system with no station photo shows a generic station icon. Players can customise their stations in-game, so the system's info panel has an 📷 Add your station photo button: it opens Edit system on Special Features with the station ticked and the photo picker already open. Pick a photo and press Done: Edit system stays open with the photo held, so you can fill in anything else, then press Save once and everything goes up together in one upload. Your photo then replaces the generic icon for every visitor, shown as a framed card with the station's name.
Signal markers (added 2026-09-09). Edit system can also record the floating diamond-shaped signals you see near objects in-game -- what your own "Starmap Analysis Report" popup actually told you was there. Like station directorship above, these are entirely manual: an earlier version guessed one automatically for every planet from its biome, but a real screenshot showed every world getting a fabricated icon with nothing ever actually submitted, so that guessing was removed outright -- a marker now only ever appears once a traveller adds one. Ten icon types are selectable (Mineral Deposit, Flora Growth, Frozen Signal, Tech Anomaly, Deep-space Outpost, Cosmic Whale, Hazard / Danger, Minor Wreckage, Atlas Station, and Base / Structure -- added 2026-09-13, spotted in-game and sent in as a real reference photo), picked from a small custom dropdown that shows each option's real icon image next to its name rather than plain text. Seven of the ten now use real in-game icon images (isolated from reference photos and background-removed); the remaining three (Flora Growth, Tech Anomaly, Hazard / Danger) still use a hand-drawn placeholder glyph until a real image is available. Each marker also carries a free-text name, category, signal type, and route note -- type what your own report actually said, same as everything else in this section.
Once saved, both show up right in the system info panel for every visitor -- Community notes and Screenshot as two clearly separate, titled sections, so it's obvious which is which even when only one of them has been filled in.
Import from my save file. Inside Edit system, an optional button reads a
real Steam/GOG .hg save file entirely in your own browser -- nothing is
ever uploaded -- and can auto-fill "Your name" plus offer a one-click
bulk-import of your real base names/addresses into the shared map. Discovery
records don't store player-given planet names at all, only base names do
(confirmed against a real save file), so that's the one thing this can
recover automatically; everything else still needs typing in by hand.
Voyager's Haven data. The system info panel has a collapsible
Voyager's Haven data section that, when opened, looks the same portal
address up in Voyager's Haven -- a separate,
community-run NMS database with tens of thousands of player-charted systems
-- and shows what travellers have recorded there (star, lifeform, economy,
conflict, discoverer, and each planet's biome, weather, sentinels, fauna,
flora and resources). It's read-only and clearly labelled as Haven's data:
it's never merged into this map's own community edits. Looked up by a small
Netlify Function (netlify/functions/haven-lookup.mjs) that caches results,
and only when you actually open the section.
Send to Voyager's Haven. Edit System has an opt-in tick box, Also send
to Voyager's Haven. After your edit saves here, the system (name, galaxy, star
colour, economy, conflict, race, and each planet's biome, weather and
sentinels) is sent to Haven under the No Man's Sky Hub community tag
(NMSHUB). Haven checks every submission before it goes live, and once approved
it's credited to the name you entered. A system already on Haven is sent as an
update. Handled by netlify/functions/haven-submit.mjs, which keeps the Hub's
submit-only key on the server and limits each traveller to 5 sends an hour.
Real game data from NMS Almanac. The system info panel has a
collapsible Real game data · NMS Almanac section. When opened it shows
what the game itself generates for that address, from
NMS Almanac: star and spectral class, race,
economy, wealth, conflict, sell/buy %, what's in demand, and every planet and
moon with its picture, real name, type, weather (red when extreme) and
sentinels; tap a planet for fauna/flora counts and its resources.
Fill blanks in Edit system copies these values into empty fields only, and
nothing is saved until you press Save. Entering a system's 3D view swaps this
map's own planet-name guesses for the real names. A traveller's own edit
always wins over Almanac data for names. Looked up by netlify/functions/almanac.mjs,
which keeps the Almanac key on the server and caches every answer, so each
system is only fetched once; if the hourly allowance is used up you're asked
to try again later. A scheduled function (netlify/functions/almanac-warm.mjs,
every 10 minutes, at most about half the key's hourly allowance) pre-loads
every system travellers have charted and keeps it fresh, so these open
instantly. It only fills the cache: no commits, no deploys, and travellers'
edits are never touched.
Almanac planet cards on hover. In the 3D view of a system no traveller has edited, hovering a planet or moon shows NMS Almanac's own card picture of it (its disc, name, main facts, galaxy and portal glyphs) in place of the usual analysis card, and hovering the space station in the middle shows the system's own Almanac card. Systems a traveller has edited (or saved privately) are left exactly as they are: their planets keep the analysis card with the traveller's own data, plus the Almanac's picture of the planet. On a phone or tablet there is no hover, so tap the planet, moon, star or station instead: the same card shows where you tapped (the info panel opens as usual), and the next touch on the map closes it.
Planets look like the real game. When NMS Almanac knows a planet, its 3D sphere in the system view is painted in the game's own terrain and water colours (frozen worlds get ice caps), and it has a ring only if the real planet does, in the real ring colours. This applies to every system, edited or not. Rings follow the Almanac until a traveller ticks or unticks Rings themselves in Edit system, then their choice wins. Almanac planets are matched to a traveller's planets by name first, then by order, so a system saved in a different order still gets the right data on each planet.
What a planet is comes from the game; names stay yours. A planet's type (Lush, Frozen...), whether it has water, its weather and its sentinels can't be changed in game, so wherever NMS Almanac knows the planet those always show the game's values, even in a system a traveller has edited. Names can be changed in game, so a traveller's own planet, system and station names always win. Where nobody has saved a name here, the map shows the name a player gave it in game (else the game's own name), as NMS Almanac reports it. The moon/planet layout a traveller saved is kept.
Real space station picture. The space station in the middle of the system view is the system's own station from NMS Almanac, in its real colours, and its hover/tap card shows the same picture. A traveller's own station photo always wins (across the top of the card), since players can rename and build on their station in game since the Cosmos update.
Economy from the game. Race, economy, wealth, conflict and trade % come from NMS Almanac first, for every system it knows, edited or not; the map's own figures were a best guess. Trade is shown the game's way, "Buy: −28.6% // Sell: +79.9%" (the Almanac writes it from the station's side, so its two numbers are swapped into place).
Which planet the first glyph picks. A link with a planet glyph other than 1 (from the Hub dialer or the Translator) now says which planet or moon it lands on, by name, when NMS Almanac knows the system ("This address lands on planet 5: Iiha 86/X9"), and that planet opens when you enter the system.
Links to NMS Almanac. Every planet in the Almanac section and in the planet
details has a link to its own page on NMS Almanac, and the section has a link to
the system's page (nmsalmanac.com/system/<galaxy>/<portal hex>), as Borjomi
asked.
Recently charted. Beside Show controls at the top, a small counter
(for example ◈ 4 systems charted today ›) shows how many systems travellers have
documented today. Tap it for the list of everything charted in the last 7
days: system name, who charted it, galaxy, how long ago, and the portal
glyphs with the hex address. Tap a system to fly straight there, switching
galaxy if needed. It's built from the shared edits the map already loads, so
it costs no extra requests, and bulk imports are left out so the numbers mean
people. The Hub's ticker links here with ?recent=1, which opens the list
straight away. A small feed for other sites lives at
/.netlify/functions/system-edit?recent=1.
Traveller Discoveries page. map.nomansskyhub.app/community
is the public showcase of what players have charted: systems, travellers and
photos this week, a Top surveyors this week list, saves per day for the last
14 days, and a card for every recently charted system with its screenshot,
station photo, who charted it, the portal glyphs with the hex address, and an
Open on the map button. The See all traveller discoveries link at the
bottom of the Recently charted list opens it, and the Hub has a short version
under Galactic Alliances. It reads one small feed,
/.netlify/functions/system-edit?discoveries=1, which the server builds from
the map's save history with its own GitHub key and caches for two minutes. Bulk
imports are left out, and only what travellers chose to make public is
included.
🔥 Trending this week. A weekly leaderboard of the charted systems
travellers open most. The gold 🔥 Trending › link next to the Recently
charted counter opens the top 10: 🥇🥈🥉 medals for the top three, ▲/▼ arrows
for movement since that morning (or NEW), view counts, and the portal glyphs
with the hex address. Tap one to fly there. A top-three system also gets a
🥇 #1 Most viewed this week badge under its name in the info panel, and a
medal in the Recently charted list, on the Community page and on the Hub. It
resets every Monday at midnight (UK). Until the new week has three entries, it
shows last week's final standings instead, so it's never empty. Only public
charted systems count, never private ones. Each device counts once per system
per day, and your own systems don't count. ?trending=1 opens the list
straight away. Handled by netlify/functions/trending.mjs. 🔔 TELL ME WHEN MY
SYSTEM TRENDS at the bottom of the list turns on a phone notification when a
system you charted (matched on your Traveller ID name) makes this week's top 10,
and again for each better top-three place (nms-push.js; sent by the Weather
station's alert server).
(Screenshots use real charted systems with example view counts.)
"You're #1 this week" popup. When a system you charted makes the top
three, the map tells you once, in a small popup when you next open it (and
once more after the week ends if it finished in the top three). It shows the
medal, the system's portal glyphs and hex address, and three buttons: Share
my rank, Fly there and close. Share my rank makes a ready-to-post
picture -- medal, rank, system name, galaxy, who charted it, glyphs, hex
address and the map's link -- and opens your phone's share sheet (on a
computer it downloads the picture and copies the link). There's no login:
the map recognises your systems by the name in Edit system's Your name
box, saved on your device. So it shows on any device where you've used that
same name -- if you charted on another phone or PC, or cleared your browser,
type the name once in Edit system there. ?rankdemo=1 (or 2, 3) shows the
popup with sample data.
Medal picture link. Anywhere a picture can't be attached (Reddit
messages, for example), paste a medal picture link and the map opens straight
on that system's medal picture. Each top-three system in the 🔥 Trending list
has a 🔗 Copy medal picture link button, so anyone can grab one in a tap.
The link looks like map.nomansskyhub.app/?rankcard=HEX&galaxy=Eissentam --
the galaxy can be its name (spaces left out) or its number (Euclid = 0). It opens the picture with Save picture and Fly there buttons. It
works for any system on this week's (or last week's) Trending list -- so a
link sent while a system was #3 still works if it slips to #4 -- otherwise it
says so and points to the Trending list. The Community page and the Hub's
Trending board have the same copy button.
(Popup and picture use a real charted system with example view counts.)
🔒 Private systems. Looking up a system is always private. Nothing is
shared unless you press Save in Edit system, and the glyph keypad says so. For
systems you want to keep to yourself, tick Keep this system private in Edit
system. A private system is hidden from other travellers (only you and the site
owner can see it) and never goes into the public data or the Recently charted,
Trending and Community lists. Your first private save gives you a private
code (like NMS-7KQ2-XM4D-P9TA). The 🔒 Private code button on the info
panel shows it, lists My private systems (tap one to fly there), lets you
load your code on another device, and can export or import a backup file. If
you lose your code, Lost your code? Ask for it sends a private request for
it (never to GitHub or anywhere public), and the code is sent back to you by
Reddit chat or email. Contact details are deleted once the request is
answered. Private systems live in a separate private store
(netlify/functions/private-systems.mjs), not in this public repo.
Share this system. Pick any system and hit Share system in its info panel: the map draws a picture card (system name, star, lifeform, economy, conflict, features, the 12 portal glyphs and the hex) sized for Reddit, Discord and X, and opens your phone's share sheet with a fly-there link. On a desktop it saves the picture and copies the link.
Share on Discord. In About, the share row is X, Reddit and Discord. Discord has no share link, so the button copies a short message with the link, says “Copied — paste it in any server or DM” and opens Discord so you pick where to post it.
Phones: popups don't fight the controls. Opening Search, Favourites or My Routes on a phone hides the controls by itself and docks the box full width just under the top row, so results have room to scroll. Show / Hide controls leaves it open; its × closes it.
Phone controls tidy themselves away. On a phone, "Show controls" only needs one tap: the controls (and the glyph keypad) hide again by themselves after a jump, Random, a search or favourite pick, Enter system, opening Filters, or a tap on the map. Toggles like Labels, Grid and Orbit leave them open. While they're open the system banner steps aside so it doesn't sit on the info panel, and Filters always scrolls inside its own box above the info panel.
Accessibility. Four font-size presets, a high-contrast mode, and real
Daltonization colour-correction (not simulation) for protanopia, deuteranopia,
and tritanopia -- built into the map itself, not bolted on as an afterthought.
The same panel has Calm mode, the switch shared by every No Man's Sky Hub
site (calm.js): on the map it stops the title and glow animations and skips
the warp animation, for anyone who finds it busy.
Your language. The 🌐 button in the toolbar switches the map between
English, Español, Deutsch, Nederlands, Polski, Français, Português (Brasil)
and Italiano, and so does the Traveller Discoveries page. The choice is shared
by the whole No Man's Sky Hub family: pick it once and every site follows (a
small cookie on .nomansskyhub.app). When you pick a language, an anonymous count of which one goes to the site's cookie-free GoatCounter stats, so we can see which languages people use. System, region and galaxy names, glyphs,
hex addresses and the game's own economy and conflict words stay as they are;
the long Full guide in About is English for now and says so. It lives in
lang.js (the same file on every site) with packs in lang/.
Always the newest version. An installed app on a phone isn't reloaded when you switch back to it, so it could keep showing an old version until it was closed and reopened. Now, each time you come back to it (and every 30 minutes while it stays open), it checks for a new version. If one is live, a small bar says “New version ready · tap to update”, in your language. One tap reloads in place; × hides it. It never reloads by itself, so nothing you're in the middle of is lost. It lives in nms-update.js, the same file on every site.
⟳ Refresh. In the installed app there's no browser reload button (and pull-to-refresh doesn't work everywhere), so a small ⟳ button sits on the Hide controls row under the title. Tap it and it checks for a new version and reloads in place, on the same view. It only shows in the installed app. After a big batch of updates, the first open on that day says “✓ Updated · that's the last update today”, so nobody wonders if more pop-ups are coming. The old nms-galaxy-map.netlify.app address now sends search engines here with a permanent (301) redirect.
Draggable panels. Filters, the system info panel, Course plotted, the Warp Manifest, the glyph keypad, Search, Edit system, and Accessibility can all be dragged by their header to wherever suits your screen -- handy on smaller or rotated phones where they'd otherwise overlap, or just to pull a card off the course line it's sitting on. A panel always stays fully on screen: drag it to an edge and it stops there, and that edge glows cyan while you're pushing against it, so you can't lose a panel off the side of your phone.
Jump failed (custom 404). Follow a stale link, a mistyped address, or one that was cut off mid-share, and you don't land on a generic browser error -- the map's own hyperdrive-fault screen picks it up instead, in the same visual language as the rest of the site, with a way back to the map or to Search. Every real share link on this site (Copy Link, saved routes, the Navigator hand-off) carries its portal address in the URL's query string, so when a broken link still has one, the page recovers it and shows the hex code alongside its glyph strip -- covering both players who read addresses as hex and players who read them as glyphs. When there's no address to recover, it says so plainly instead of guessing.
[P][SSS][YY][ZZZ][XXX] 12 hex glyphs
| | | | |
| | | | +-- X (length) 001-FFF
| | | +------- Z (width) 001-FFF
| | +----------- Y (height) 01-FF
| +---------------- Solar System Index 000-FFE
+-------------------- Planet Index 0-6
Y, Z, and X are two's-complement, but the game skips the exact midpoint value
rather than using it (0x80 for Y, 0x800 for X/Z) — a detail that's easy to
get subtly wrong and easy to verify against the wiki once you know to look
for it:
// size = 0x100 for Y, 0x1000 for X/Z
const signed = v < size / 2 ? v : v - size; // 0x801 -> -2047, 0x7FF -> +2047
Black hole and Atlas Interface placement isn't a fixed index — it follows
the real game's own distance-from-galactic-centre model (ported into
nms-core/region.js's voxelAttributes()), not a guess. In practice that
model resolves to Solar System Index 079 being a black hole and 07A an
Atlas Interface in almost every 400ly-wide region, which is why earlier
builds of this map just hardcoded those two indices — but the roughly
8-voxel dead core at the exact centre of the galaxy has genuinely neither,
and that's only correctly reproduced once nms-core is loaded (the
hardcoded 079/07A pair is kept only as a fallback for the rare case the
module fails to load). Every other system in a region — star colour,
spectral class, race, economy, conflict level, up to six planets/moons with
real biomes, rings, and resources — is generated by seeding a PRNG off the
address itself. Same address in, same system out, every time, on every
visitor's device, with nothing stored server-side. SPEC.md has the
original derivation, sourced from the NMS wiki, with citations; nms-core/
(see below) later replaced the star-type/planet-count/placement/naming part
of that with an actual ported decompilation of the game's own logic.
This repo is the whole client — two files carry it (markup/CSS, and the app's own JS), no build step, no framework:
| Path | What it does |
|---|---|
preview.html | markup + CSS + the Three.js r128 <script> tag (cdnjs); loads preview.js for the app itself |
preview.js | the entire app's JS -- generation, all UI, Search/Find -- split out of preview.html 2026-09-12 so the browser can cache it separately from the markup |
atlas-pois.json | Galactic Atlas overlay data — ~50 real points of interest from galacticatlas.nomanssky.com, hand-entered (name, address, url); fetched by preview.html's Atlas toggle |
netlify.toml | serves preview.html at "/", points Netlify at netlify/functions |
netlify/functions/ | |
system-edit.mjs | edit/report intake: rate-limits by IP, reads-merges-commits data/overrides.json via the GitHub Contents API; flagged/disputed fields go through consensus voting instead of a direct overwrite (see "Edit tracking & disputes" below) |
flag-dispute.mjs | "Data looks wrong" submissions from the Report modal — marks a field disputed, best-effort opens a GitHub Issue |
sweep-stale-flags.mjs | scheduled function, auto-clears any flag >7 days old with no consensus reached; never touches a confirmed dispute |
lib/shared.mjs | shared GitHub Contents API read/write + GET cache used by the three functions above |
private-systems.mjs | private systems: private codes, load/save/delete, lost-code requests and the owner's recovery view (Netlify Blobs, never the public repo) |
trending.mjs | 🔥 Trending this week: counts views of public charted systems, weekly top 10 with rank movement and last week's standings (Netlify Blobs) |
filter.mjs | the authoritative content filter (profanity, HTML/URL stripping, per-field length + allowlist) — mirrored client-side in preview.html for instant feedback, but this copy is the one that actually decides |
nms-core/ | real decompiled game logic (star type, planet count, black hole/Atlas placement, system/region/planet names, economy/conflict/race/ring odds) — see "What real No Man's Sky data does this use?" below and nms-core/README.md for the full module docs |
nms-core/save-import/ |
What's not in here: data/overrides.json, the file that actually holds
every community-submitted system edit. It isn't missing by accident — it's
never written by hand, and never present in a local working copy. The only
thing that writes it is system-edit.mjs's own commit to the GitHub Contents
API, triggered by a real visitor's Edit-system submission passing the filter.
Nothing else touches it. That means there's no local copy to accidentally
push over the live one: the working tree literally has nothing there to
stage. If you ever do see a data/overrides.json sitting in a checkout,
delete it before committing rather than letting it go up — it can only ever
be a stale snapshot, and pushing it would overwrite real player-submitted
data with whatever was on disk at clone time.
The procedural layer described above started as a from-scratch reverse
engineering (see SPEC.md). nms-core/ replaced the star-type, planet-count,
black-hole/Atlas-placement, and system/region/planet-naming part of that with
an actual ported decompilation of the game's own logic — a JavaScript
port of hadsh/nms_namegen (a fork of
Stuart Coyle's original work,
co-authored with GoodGuysFree), corpus-verified against real in-game names
rather than approximated. nms-core/economy.js is separate original work —
the economy/conflict/race/outlaw/ring logic nms_namegen never modelled,
decompiled from a legitimately-owned game install (see
nms-core/README.md and LICENSE for the
attribution split between ported and original code). One known, disclosed
limitation: planet names are a plausible but unverified guess even in the
upstream library — star type, region names, and system names were validated
against a real corpus, planet names weren't (this is surfaced to players
directly, see the About modal and the hint under every system's planet
list).
Updated 2026-08-23 against a newer release of the same upstream library, which fixed three real bugs in this project's own port (an off-by-one on the safe-start-planet draw, a missing signed-coordinate fold in black-hole/Atlas placement that affected roughly half of all voxels, and a desynced RNG stream on purple/gas-giant systems) and added a genuinely new capability: nms-core/system.js now derives real economy type, wealth, conflict level, and dominant race directly from the game's own generator — the actual reverse-engineered algorithm, not economy.js's statistically-approximated word pools — validated against 1000 real, wiki-documented systems to 98–99% accuracy per field. This isn't wired into the live site's economy/race/conflict display yet — still economy.js, via a separate RNG stream — but the star-type/planet-count/black-hole/Atlas-placement fixes are live for every visitor.
nms-tools/nms-lookup.js wraps the whole module behind one call —
await init('./nms-core') then getSystem(address, galaxy) — for anyone
who wants game-accurate system data in their own project without learning
nms-core's internal structure first.
nms-core/save-import/ is a separate concern from the procedural layer
above — it doesn't generate anything, it reads a real Steam/GOG .hg
save file the visitor already has, entirely in their own browser (a
hand-written LZ4 block decompressor + the real obfuscated-key mapping
table from oxur/nms-copilot). The
raw file is never uploaded. It can recover the traveller's own in-game
name and their real base names + addresses — but not individual planet
names, which (confirmed against a real save) aren't stored in discovery
records at all, only base names are. Reachable from Edit system →
"Import from my save file"; see
nms-core/save-import/README.md for
the technical writeup.
The procedural layer is complete on its own — every system has plausible data the moment you jump to it. But it's still a guess. Edit system lets anyone overwrite that guess with what they actually see in-game, and the result is visible to every visitor, not just the one who typed it:
Edit system form
| POST { action:"edit", address, galaxy, payload }
v
system-edit.mjs
| 1. rate-limit by IP (8 edits / 15 reports per hour, tracked in the
| same JSON file since Functions are stateless between cold starts)
| 2. filter.mjs runs on the payload — this is the authoritative pass,
| independent of whatever the client already filtered
| 3. GET current data/overrides.json from GitHub (Contents API)
| 4. merge the edit in, keyed by galaxy:address (a bare portal address
| isn't unique — the same 12 hex glyphs decode to a different real
| system in each of the 256 galaxies, so the store keys on the pair)
| 5. PUT the updated file back to GitHub
v
one new git commit = the entire revert history, free, on github.com
Every visitor's page load does its own GET against the same endpoint and
merges the result over the procedural defaults, so a submitted system stays
correct even for someone who never touches Edit system. Server field
allowlisting is explicit and by name (filter.mjs lists every permitted
field on a body, e.g. rings never apply to moons — enforced there, not just
hidden in the UI), so a client that tried to sneak in an unlisted field would
just have it silently dropped, not accepted. galaxy itself is validated the
same way (an integer 0–255) rather than trusted blindly from the client.
Seeded from a public corpus, 2026-08-23. 1000 of the records in data/overrides.json weren't typed in by a visitor — they were bulk-imported from a public, wiki-documented ground-truth corpus (nms-systems-ground-truth-2026-08-23.json, compiled by hadsh/nms_namegen from the NMS Fandom wiki), used here to seed real star class/water/dissonant/black-hole/economy/conflict/race data for 1000 systems nobody had visited yet. Each of those records is honest about its own provenance rather than pretending to be a personal submission: editorName reads "Added -- no original editor name available", and notes cites the exact wiki page/URL it came from, with an open invite for the real documenter (or you) to claim it properly via Edit system. Only fields the corpus genuinely documents and this form actually supports were written — no system/region names, no planet/moon counts, nothing guessed.
Edit tracking & disputes. Every field on a system carries a gold/green/
amber/red status — gold and green are computed client-side on the fly by
diffing the live system against a fresh procedural regeneration of the same
address (no server bookkeeping needed, and it works retroactively on edits
made before this existed); amber/red come from the Report modal's "Data
looks wrong" flow, which POSTs to flag-dispute.mjs. A flagged field isn't
just overwritten by the next submission — system-edit.mjs records it as a
vote instead, and two or more different editors agreeing auto-resolves the
flag and clears it. sweep-stale-flags.mjs runs daily and clears anything
left unresolved after 7 days without touching a genuine confirmed dispute.
An admin-only queue at ?admin=<ADMIN_TOKEN> (never linked from the normal
UI) can confirm, dismiss, or directly fix a disputed field.
No build step, no dependencies:
python3 -m http.server 8080
That's the whole procedural map, fully working, offline. Edit system and Report need the two Functions running, which needs the Netlify CLI and two environment variables:
npm install -g netlify-cli
netlify dev
| Variable | What it's for |
|---|---|
GITHUB_TOKEN | Fine-grained PAT, Contents: read/write, scoped to this repo only |
ADMIN_TOKEN | Optional — ?token=<value> on the Function's GET reveals the reports queue |
Full walkthrough (creating the token, wiring Netlify to GitHub) is in
SHARED-EDITS-SETUP.md. Deployed here via Netlify,
auto-deploying on push to main.
Determinism is the whole basis of the procedural layer, and it's directly checkable — no black box:
Rings only ever appear on planets, never moons (checked server-side in
filter.mjs, not just client-side); black hole and Atlas Interface follow
the real per-region distance model described above rather than a fixed
index; ring style is derived from a planet's biome, not stored as free text,
so a manually-edited planet and a procedurally generated one of the same
biome can never disagree on what their rings look like. The one thing that
won't verify cleanly against your own save: individual planet names, per
the known nms-core limitation noted above — everything else (star type,
system/region name, planet count, economy/conflict/race) should match.
At scale: tools/haven-calibrate compares the generator against ~29,000 real
systems recorded on Voyager's Haven. On data logged
since the Cosmos update it matches 99.7-99.9% on star colour, race,
economy type, wealth and conflict -- see
nms-core/README.md
for the full table and what it doesn't cover.
▷ Tour in the toolbar (or "Take a quick tour" on the first-visit box) walks through the map in 10 spotlight steps. On phones with the controls hidden, the tour opens them for you, follows the buttons as they slide in, and folds them away again when it ends. The phone's Back button closes it.
Font size (4 presets), a High Contrast toggle, and colour-blindness support for protanopia/deuteranopia/tritanopia — built as real Daltonization correction matrices (computed via the standard RGB→LMS→simulate→LMS→RGB error-redistribution pipeline), not the more common simulation matrices that just show a sighted person what colour blindness looks like. The distinction matters: correction actually helps a colour-blind player tell the map's own colour-coding apart, which is the point.
The About modal also has an opt-in Read aloud toggle (added 2026-09-05, off by default so the panel looks unchanged until switched on) using the browser's own text-to-speech — a play/pause/stop bar plus a small speaker icon per section, reading each section's own visible copy live so it can't drift out of sync when that copy is edited, or reading straight through all of them in order.
It's free to use under the MIT licence. If you use any of it in your own project, site, video or post, please credit elegra1965 / No Man's Sky Hub with a link to nomansskyhub.app. That includes the sell%/buy% formula (sellBuy() in nms-core/system.js), which is elegra1965's own discovery, not part of hadsh's library. The MIT licence also asks you to keep the copyright notice in LICENSE with any copied code, and the hadsh/Stuart Coyle/GoodGuysFree credit for the ported files.
Built by elegra1965. Original
address maths and game-data conventions sourced from the NMS wiki (cited in
SPEC.md); star type, planet count, black hole/Atlas placement, and system/
region/planet naming in nms-core/ are a port of Stuart Coyle's
original nms_namegen, co-authored with GoodGuysFree, maintained as a
fork by hadsh — see nms-core/README.md for full
attribution. Economy/conflict/race/ring probability data is decompiled from
a legitimately-owned NMS install. Portal glyphs and race/economy iconography
are cropped from the game itself, used here for a free, non-commercial fan
tool.
Cross-referenced system data comes from Voyager's Haven, built and run by u/IAmThe-Ekimo-1920, who offered to link the two maps -- thanks for opening up the Haven API and for the work behind it. Haven's data belongs to Haven and its contributors.
Real game data (planet names, weather, sentinels, resources, trade and more) comes from NMS Almanac, built by Borjomi (u/imurashka), who kindly gave this map an API key. Thanks for the Almanac and for letting it be used here. Almanac data belongs to NMS Almanac.
| client-side-only reader for real .hg save files (name + real base list) — see nms-core/save-import/README.md |
nms-tools/ | nms-lookup.js, a single-call wrapper around nms-core for other NMS developers who don't want to learn its internals; check-atlas-updates.mjs, a manual (not scheduled) check for whether atlas-pois.json above has drifted from the live site |
glyphs/ | the 16 real portal glyph PNGs (keypad) |
icons-web/, Icons/ | race/economy iconography, cropped from real screenshots |
favicon/, manifest.json, sw.js | PWA install + offline support |
navigator/ | the Galactic Navigator — index.html, complete.html, map-mock.html; opened from preview.html's PLAN JOURNEY button with the real plotted route; see "What can this map do?" above |
SPEC.md | the original address maths and game-data model, wiki-sourced |
SHARED-EDITS-SETUP.md | one-time GitHub token + Netlify env var setup |
HANDOVER.md | full build history, session by session |