Route Complete!
Well done, hauler. All cargo delivered.
Paste this into OBS as a Browser Source. It updates on its own, and its size never changes once you have set it, so you can position it and forget it.
Labels covers the row names, the units and the site name at the bottom; highlight paints the next stop and a finished run. The amber of a stalled feed stays as it is: it has to mean something.
A row you keep stays in place even before it has a value, so the panel is exactly the size you see here, always. Unload zone needs Expert mode, and names the cargo zone to take the load out of at the stop you are on.
The link in the URL is read-only, and the key that lets this browser push your progress and revoke the link never leaves it. So the overlay grants nobody the right to change anything, and it needs no live session: run one on its own, or alongside a session with your crew.
Share this URL. Anyone who opens it joins your live session and sees changes in real time. Anyone with the link can view and modify the session.
Want to start fresh without breaking the session? Reset wipes all missions and the route summary for every connected participant.
Multi-system cargo hauling route optimizer for Star Citizen. Plan, calculate, track, and share optimal multi-mission routes across Stanton, Pyro and Nyx, with a strict 3D cargo loadout, a per-stop load plan, and a live 3D cargo visualization synced to your route progress.
Key features: OCR screenshot import, CSV shopping list import, interactive 2D/3D star map (Stanton, Pyro, Nyx), cross-system jump support, container decomposition, Expert mode with 3D cargo loadout bin-packing, per-stop load plan with checkable items and storage notes, live 3D cargo view of your ship's hold, Live Session sharing: invite teammates with a single link and plan a haul together in real time, light/dark theme, and responsive design.
Technologies: HTML5, CSS3, JavaScript (ES6+), Vite, Three.js, Plotly.js, Tesseract.js (OCR), and a custom genetic algorithm.
This is an unofficial Star Citizen fansite, not affiliated with the Cloud Imperium group of companies. Star Citizen®, Roberts Space Industries® and Cloud Imperium® are registered trademarks of Cloud Imperium Rights LLC.
Based on the work of SigmaPrimer, with our thanks.
Thanks as well to SCMDB, VerseGuide and UEX: the location data behind the map and the route stops comes from community-maintained databases like theirs, kept current by people who survey the 'verse themselves. The refuel, repair and cargo dock markings on each stop are theirs too, and the trade terminal icons open straight into UEX's own route comparator so you can fill the spare hold on the way. Worth a visit.
Join the community on Fluxer to share hauling tips, find orgs to crew with, and report bugs or feature requests.
Purpose: Plan optimal multi-mission cargo hauling routes across Stanton, Pyro, and Nyx, minimizing travel distance while respecting ship capacity and container sizes.
â—‡ The small gold diamonds dotted around the page open help. Each panel has one explaining that panel, and the one beside the site name up top opens this guide. Hover a diamond to read it, or press and hold on a touch screen.
The dropdown lists the usual stops. Type three characters and it also searches about 700 named secondary places: caves, wrecks, bunkers, minor outposts, Onyx facilities, aid shelters. Anywhere in the name counts, so "disposal" finds Reclamation & Disposal Orinth.
The game's own numbered markers are left out of the suggestions, since the 1,050 "Rock Cave 24T" and asset IDs buried everything else, but they are still recognised when a mission import or the Game Watcher names one.
When only one place is left it completes on its own; while several match, keep typing. A place you pick joins the dropdown and the map for the rest of your session.
Four mission types cover what the contract manager hands out: Direct, Multiple Drop Off, Multiple Pick Up and Free Shopping. Fill the fields by hand, or let one of these do it for you:
Each stop also tells you what the place offers and what there is to trade there, see and .
A row of icons under each stop tells you whether you can refuel, repair, sell, use a freight elevator or a cargo deck there, and how big its landing pads are. Hover any of them for details; on a touch screen, press and hold instead. At the right end of that row sits the faction that currently holds the place, when it is known.
Click the trade terminal icon to open UEX's route comparator for that leg, from this stop to the next one that trades somewhere else. A route that comes back through the same place skips that second visit, since a terminal cannot be compared against itself. It arrives prefilled with what you can actually buy: your capacity minus the heaviest mission load between the two, since the goods ride along until the sale. The last trading stop offers the best sales from there instead, for the trip home. Every click reuses the same tab, and that icon always leads the row, so it stays in the same place from one stop to the next.
The stop you are on gains one more step, Buy here, shaped like any other line of that stop: how much room survives all the way to the sale, and the crates that quantity makes, so you can ask the terminal for 2×32 rather than work it out at the kiosk. Set the largest crate that terminal offers and the breakdown follows. On a strict loadout the figure is what your hold can really take, not the room on paper: with freight loaded after the purchase and unloaded before it, those two differ by a lot.
Once a route is calculated, the share button in the Route Summary header opens one dialog holding every way out: an image, a link, the networks, a live session and the OBS overlay. Each one says what it carries, so you can tell them apart before you use one.
Create a link turns the route into a short URL. Anyone who opens it gets your stops, the cargo on every leg, your cargo hold and the load plan, and lands on their own editable copy: nothing they change comes back to you. Your storage notes and which legs you have ticked off are never shared.
A link stays live for 30 days after the last time anyone opens it, so one people keep using keeps working while a forgotten one clears itself. That is why the dialog shows no expiry date: there is none to show. You can revoke a link at any time from the same dialog, and anyone still holding it then gets an expired page.
Sharing a route is not the same as a live session. A link is a snapshot someone opens once; a session is a shared workspace where everyone's ticks and edits travel both ways. Opening a shared link never puts you in a session.
Make a card draws an image of the route: the payout, where the run goes, and how full the hold gets at each stop. It is drawn on your own machine from what is already on the page, so nothing is uploaded to make it, and there is no account, no ship to pick and nothing to fill in. Copy it straight into Discord, Reddit or X, download it, or hand it to your phone's share sheet. Four shapes are offered, landscape being the one a feed shows best.
Once you start ticking legs off, the same button offers your run instead of your plan: what you actually banked, how long it actually took, and the rate that follows from those two. Nothing there is estimated, which is why a route you have not flown yet shows none of it, and why a run left open overnight stops reporting a duration rather than claiming eighteen hours. The end-of-run banner has its own button, for the moment you actually want to post the result.
If you have made a share link, the card carries it, so someone who only ever sees the image can still open the route itself.
The Discord, Reddit, X, Bluesky and Telegram buttons sit both in the share dialog and on the end-of-run banner, which is the moment you actually want to post a result. A link is made for you if there is not one yet, and the picture rides along as the link's preview, so what your friends see in the feed is the card.
Discord is the odd one out, and deliberately so: it has no web composer to open, so its button puts the image and the link on your clipboard instead. Paste into Discord and the picture goes in directly. The wording is built from the same numbers the card is: what you actually banked, how long it actually took, and nothing that was not measured.
Download JSON saves the route to a file, offered both when you share and when you receive, since a link that expires is a poor place to keep something. Open one again from Open a route file in the top-right menu, or by dropping the file anywhere on the page. The file holds the same thing the link does, private notes included in neither.
Click the Share button overlayed on the top-left of the map to start a live session. A short URL is generated. Send it to anyone (Discord, voice chat, in-game friends list…) and they join the same view in real time: missions, route summary, Expert-mode loadout, stow / take-out annotations, even the checkboxes you tick during the haul.
OBS overlay in the top-right menu gives you a link to paste into OBS as a Browser Source. It updates itself, and needs no Twitch account, no account here, and no live session: run one on its own, or alongside a session with your crew.
Open Look and contents to set it up. Pick a layout, a theme, a size, and tick the rows you want: aUEC per hour, elapsed time, cargo, ship, banked against the run's total payout, the number of contracts, the systems it crosses, the distance, and in Expert mode the cargo zone to take the load out of at the stop you are on. The three layouts take the same rows and spend a different amount of screen on them: Detailed is the full panel, titled, with the exact earnings and the next stop on its own line; Compact is the same panel a third shorter and a little narrower, with the stop count riding on the progress bar and the earnings rounded to 812k; Minimal drops the panel altogether, one row per line, for a corner of the screen. Switching layout ticks the rows it is built around, until you tick some yourself, and from then on they are yours. Every layout is set in the site's own type and carries its address in small letters at the bottom, so a viewer who likes what they see can find it. The preview beside those controls is the overlay itself, at the size it will be, and the link changes as you tick.
Start from a theme. Verse is the green and gold you see here, Quantum is cyan on midnight blue like a ship's own HUD, and Ember is amber over a warm near black, for a capture that is mostly rock and dust. Each is a whole palette, so you get something composed in one click. Veil stays yours whichever you pick: it sets how much of the panel shows through, from Solid down to None, and at None the box goes altogether, leaving the accent edge, the text and its outline. That is the one to reach for when the capture behind it is busy.
Custom opens the five colours up, starting from whichever theme was on screen: the accent (the left edge, the dot and the progress), the panel behind it, the text of the figures, the labels (the row names, the units and the site name at the bottom) and the highlight on your next stop and a finished run. Labels come out a step below the figures they name, so turning them up or all but hiding them keeps that order. The empty half of the progress bar and the outline around the letters are worked out from the text colour, so a dark text on a light panel stays readable instead of turning into pale grey on white. Pick a light panel and the text, the labels and the highlight follow it, until you pick those yourself. One colour is nobody's: the amber of a feed that stopped arriving. It is the only colour here that has to mean something, so it cannot be tuned into looking healthy.
The link is an anonymous token: no name, no account, no id. Besides the progress it shows your next stop and your ship name, so treat it as public: in this game those are worth knowing to somebody else, and anyone holding the link can read where you are heading. It never shows your contracts, your notes or the cargo on each leg. It is read-only, so nobody watching can change anything, and Revoke cuts off everyone currently watching, not just the next one to connect.
Its size never changes on its own. A row you keep holds its place even before it has a value, and the frame is already at its final size while it waits for the run, so once the source is positioned in OBS it stays where you put it. That is why an empty row shows a dash instead of vanishing. The page has a transparent background, so OBS composites it straight over your capture.
The dot says what the feed is doing, on every layout including Minimal, with the word beside it on Detailed and the dot alone on the two tighter ones: it pulses in your accent while the run is live, turns to your highlight colour when it is complete, and goes amber once the figures stop arriving, so a frozen overlay never passes for a live one. It watches the age of the figures rather than who is connected, because a browser can be connected and no longer sending anything, and when it does go amber the elapsed counter stops instead of carrying on over data that no longer moves.
The link carries two secrets, and only one of them leaves your browser. The one in the URL is read-only: whoever holds it can watch and nothing else. The other stays here and is what lets this browser push your progress and revoke the link. So an overlay grants nobody the right to change anything, and it puts nothing in your address bar. A link lasts 30 days, and dies within the day once nothing is watching it.
Enable Expert mode (the button at the bottom of this guide) to unlock the Cargo Loadout configurator. This lets you model your ship's actual cargo zones in 3D (length Ă— width Ă— height) and have the route optimizer reject routes that cannot physically fit the cargo. For example a 32 SCU container in a Hull A whose largest zone is 16 SCU, even though total capacity is 64 SCU.
By default the zones are laid out automatically, packed into rows so you can see them all.
Press Freeze layout to switch to manual and place each zone
where it really sits on your ship: in the 3D tab, drag a zone with the gizmo,
ctrl-click or shift-click to move several together, or type its X / Y / Z straight into the
table. Coordinates are whole 1 SCU cells from the hold origin, with Y = 0 the
hold floor. Saving slides the whole arrangement back onto the origin so the numbers stay
readable, and Reset to auto undoes the whole thing.
Two settings per zone decide how cargo behaves in it. Bow is which way the compartment points. Crates rest on is the magnetic surface they clamp to, which is the floor on most ships but a side wall or the ceiling on plenty of others: it decides which way a stack grows, and a crate comes off it straight out from that face. Get it wrong and the plan will look plausible while being impossible to actually load.
Overlapping zones are a warning, never an error. You are reproducing a real ship, the packer works strictly one zone at a time, and an approximate interpenetration changes nothing about what fits.
With a loadout active, a clipboard button appears in the Route Summary header once there is something to show. It opens the load plan: for each stop, which crate goes into which zone, in what order, with the items checkable as you go. A dot on that button means the plan has something worth your attention, usually cargo the zones cannot take as they stand.
The 3D cargo view alongside it shows the same thing in the hold, and follows your progress through the route.
A small service you run on your gaming PC. It reads Star Citizen's own
Game.log and files each hauling contract here as you accept it, with cargo,
quantity, source, destination and reward already filled in. No screenshot, no typing.
Treat it as a gadget. It does not read the game's state; it reads what the game happened to write to a text file, and that file is neither complete nor always consistent. Whatever the game does not write is out of reach for good, however clever the parser gets. It writes more than we credited it for, which bought back two of the three things once listed here as hopeless, but the ceiling has not moved: it is still whatever CIG happens to log.
What was bought back: every contract logs the position of its pickup and of each dropoff, in the coordinates our own location catalogue uses. That names the pickup of a straight A to B run, which the log never spells out, and puts an interstellar delivery at a station instead of at "Pyro System", which is all the objective line says. When two catalogued places sit close enough to argue over a marker, the field is left empty for you rather than guessed. And the payout, logged without naming its contract, is matched to the completion just before it, so two deliveries turned in one after the other no longer swap their money.
What is still out of reach: nothing says where an objective was completed, so that place is read from the last zone you were seen in, which matters only when it disagrees with the contract's own stops. And the game never plainly says "you have arrived", which is why switching between the Cargo 3D view and the star map on its own was removed: guessing it was worse than leaving it alone.
So it is a taste of what this could be if we had real APIs to talk to, rather than the thing itself. CIG, if you are reading: we would love an endpoint. Until then, the log it is.
127.0.0.1:23457 matches what
the watcher prints; Test tells you straight away whether it answers.The status pill reads the connection at a glance: grey when off, amber and blinking while connecting or reconnecting, green once connected, red on an error, with the reason spelled out next to it.
Untrack a contract before accepting the next one. While one is tracked in the mobiGlas, the game stops writing the objective lines for the contracts that follow. They still arrive here, their markers are logged, but with no cargo, no quantity and no drop-off, and nothing on this side can invent what was never written down. Untracking between two pickups costs you one click and is the difference between a manifest that fills itself and one you type out.
The watcher has to run where the game runs, since Game.log is there. Where you keep
the browser is up to you, and there are two ways round it.
Same network, streaming from the gaming PC (Moonlight, remote desktop): start the
watcher bound to 0.0.0.0 and put the gaming PC's LAN address in Advanced
instead of 127.0.0.1. Windows asks once whether to let it talk to your private
network; that is the prompt to accept.
One browser catch comes with that route. This page is served over HTTPS, and an HTTPS page is not
allowed to open a plain HTTP stream to a LAN address. On Chromium the app asks for the
local network access permission and that lifts the block, so accept the prompt when it
appears; if you turned it down once, re-allow it in the site's permissions. Loopback
(127.0.0.1) is exempt, which is why a same-machine setup never sees any of this.
Different networks, or simply less fuss: keep everything on the gaming PC, the
watcher and this page both, so the address stays 127.0.0.1 and nothing has to cross
a network at all. Start a
from
there and open its link on your other machine. The watcher's events travel through the session,
so the âś“ marks, the You are here badge and the auto-ticking all turn up on the
far screen, which is a full participant besides: you can tick items and edit missions from it.
The watcher only ever reads Game.log. It never writes to the game, and
sends nothing anywhere except to the clients you point at it. Bound to 0.0.0.0,
though, any device on your network can subscribe to the stream: on a network you do not trust,
keep it on 127.0.0.1.