An offline production planner for Techtonica. Search any item, set a target rate, and get the full production line as a left → right flowchart: raw inputs flow into the final product, with machine counts and ratios for every step, total raw inputs, total power, and the ability to compare alternative recipes. The flow mirrors for right-to-left languages.
When an item has several recipes, Default path chooses between Fewest steps (the shortest chain to raw resources — what players usually build) and Fewest raw inputs (minimises total mined units; can be exotic/recycling-heavy). Avoid crushers prefers non-Crusher recipes wherever an alternative exists (Crusher cycles are fiddly — the wrong input ratio yields off-spec outputs), but never forces a change for crusher-only items. Either way, a step's recipe dropdown lets you override the choice. In optimal mode the recipe the solver chose is selected and tagged (optimal); picking a different one forces that item to be made your way everywhere and re-optimises the rest (a forced step adds an Auto recipe entry to hand the choice back). A forced recipe with no feasible plan shows a banner and leaves the chart up so you can undo it. In Fast mode the dropdown overrides just that step.
By default the planner finds the optimal plan — the one using the fewest total machines for your Target /min — using a real solver (HiGHS-class linear/integer programming, GLPK compiled to WebAssembly, running entirely in your browser). Unlike a naïve per-step planner it chooses recipes globally, credits byproducts, and exploits the game's self-sustaining plant loops, so the plan is genuinely minimal.
Every step is drawn as a whole, buildable machine count (rounded up, with an idle % where it carries spare capacity), so you read counts you can actually build rather than fractions. The Total machines figure is that buildable sum (shared blocks counted once); the smaller optimal: N (fractional) note beside it is the theoretical minimum if machines could run at fractional counts — the gap is the rounding-up cost. When you pick an item the Target /min defaults to what one final machine outputs, so the last step starts as a single machine at full load; dial it down for a partly-idle final step, or up for several machines.
Each plan takes a moment to solve. The Plan toggle in the bill-of-materials Producing section switches between Optimal and Fast: Fast is the instant per-step (greedy) planner — predictable and immediate, but not optimal (it can't credit byproducts or use the plant loops, so it typically uses more machines). Flip between them and watch the machine total change.
Mined ores aren't free — they're dug from terrain deposits by drills. Each raw ore shows the number of drills needed to extract it (counted in the machine and power totals). Pick the Drill in settings: Mining Drill (10 ore/min), Mining Drill MKII (15 ore/min), or Blast Drill. Atlantum Ore needs more dig power than the base Mining Drill provides, so that node automatically upgrades to a drill that can mine it. The metal Chunks (Iron / Copper / Atlantum Chunk) have no crafting recipe — they're dug straight from terrain by the Blast Drill, so they show as blast-drilled raws rather than free leaves. The Blast Drill's output depends on charge loadout and research, so its rate is an estimate you set. Rates come straight from the game's drill definitions; turn Show extraction drills off to hide them.
A chain bottoms out in three kinds of leaf, tagged distinctly so a mined input never reads the same as something you don't actually have to mine:
A step's secondary outputs are split too: + N/min … spare (green) is genuine surplus you can siphon off, while → N/min … (teal) is output the solver routes back into other recipes — internal plumbing, not free extra demand (hover to see where it goes).
Long production lines (Assembler MKII, say) are kept readable two ways, and in both cases the hidden chain is still computed — the raw-input, machine and power totals always cover the whole tree.
Your default-path, machine tiers, drill choice and which nodes you've expanded are all remembered across reloads.
Recipe, item and machine data is extracted directly from the locally-installed game files — the authoritative source (community calculators were found to have inconsistent rates). The art is procedural and original (abstract geometric glyphs keyed to each item's category and tinted by material family), not from the game.
Rebuild the data after a game update with npm run extract.