A community-built tool for Ultimate Mining Tycoon (Roblox) that helps you build the most profitable factory possible.
Live Site: bod09.github.io/UMT-Factory-Optimizer
For accurate, up-to-date game data, visit the UMT Wiki. If you find incorrect data here, please help by updating the wiki first - our automated updater will pull the changes in.
- Select any ore and see the most profitable processing chains ranked by $/ore
- Interactive DAG graphs with automatic layout (dagre/Sugiyama), pan/zoom, click-to-highlight
- Accurate quantity propagation: demand-based with supply constraints, combine machine halving (prismatic 2:1, alloy 2:1), fan-out scaling
- Accounts for all prestige items (Philosopher's Stone, Ore Upgrader, Transmuters, Duplicator, Nano Sifter)
- Optimal duplicator placement — exhaustively tests ore-level, all combiner inputs, and nested combiners
- Chance machine annotations — prospectors/sifter show produced gems/ores with click tooltips for processing path
- Byproduct chain with excess routing — surplus items route to QA/Seller
- Polisher applied to byproduct items (ceramic, glass, etc.) with correct ordering (flat before %)
- Batch mode and "Best Possible" toggle
- Stage-by-stage factory progression from fresh start to prestige
- Best factory chain at each budget with node graphs
- Accounts for starting money from prestige upgrades
- Prestige cost table
- All machines with inputs, outputs, effects, and costs
- Machine connection map
- Ore and gem stats with depth ranges
All calculations run from data/machines.json — no hardcoded chains. The solver automatically discovers the best processing path for every item type using a universal applyEffect() function that handles all machine effects (multiply, flat, set, combine, chance, preserve). Adding a new machine = adding to machines.json only.
A GitHub Action checks the UMT Wiki weekly for game changes:
- Updates machine data (name, cost, description) without overwriting optimizer-specific fields
- Creates a PR with a diff report for review
- Detects active game events and their machines
Game data comes from the UMT Wiki. If you notice incorrect values:
- Update the wiki - it helps everyone and our updater will sync it
- Edit
data/machines.jsonfor optimizer-specific fixes - Submit a PR or open an issue
Pure HTML/CSS/JavaScript hosted on GitHub Pages. One external dependency: dagre (~15KB, CDN) for automatic graph layout.
data/machines.json ← Source of truth for all machines
↓
js/chain-solver.js ← ChainSolver: memoized recursive value maximization
↓ Universal applyEffect() for all machine types
↓ Exhaustive duplicator placement optimization
↓
js/graph-builder.js ← Two-pass graph construction:
↓ Pass 1: Build structure (nodes + edges, qty=0)
↓ Pass 2: Demand propagation → supply constraints
↓ Phase A: Top-down demand (reverse topo sort)
↓ Phase A2: Forward supply (combine halving)
↓ Phase B: Byproduct push (ratio + chance)
↓ Phase C: Excess routing to QA/Seller
↓
js/graph-layout.js ← dagre wrapper (Sugiyama layered DAG layout)
↓
js/visualizer.js ← SVG rendering, pan/zoom, click-to-highlight,
chance machine tooltips, edge labels
Supporting: js/graph.js (MachineRegistry), js/optimizer.js (config wrapper), js/app.js (UI), js/data.js (game constants).
Game Data: Sourced from the UMT Wiki under CC BY-SA 4.0. The wiki is hosted on Miraheze - consider donating to support it.
Code: MIT License
Game: Ultimate Mining Tycoon is developed by Innovation Inc (Rolijok & Madattak). This is a community fan project - not affiliated with the developers.
- Help the wiki - Update umt.miraheze.org with accurate game data
- Fix data - Edit
data/machines.jsonand submit a PR - Report issues - Open an issue on GitHub