factorio-recipe-graph
A Python library that answers the question:
"If I want to produce N items per second of X, exactly how many machines, furnaces, and raw resources do I need — all the way down?"
Given a target item and desired production rate, it resolves the full ingredient tree to primitive (raw) inputs, annotating each step with machine counts, throughput rates, and transport requirements.
from factorio_recipe_graph.graph import GraphBuilder
builder = GraphBuilder.from_base_recipes()
graph = builder.build("electronic-circuit", rate=10.0)
root = graph.nodes[graph.root_node_id]
print(f"{root.label}: {root.machine_count} × {root.machine.name}")
# electronic-circuit: 7 × assembling-machine-2
Installation
git clone https://github.com/lorencarvalho/factorio-recipe-graph
cd factorio-recipe-graph
uv sync --dev
Requires Python 3.11+ and uv.
What you get
- Recursive dependency resolution down to raw resources (
iron-ore,copper-ore,crude-oil, etc.) — no hand-rolled chains needed. - Exact rate math for machine counts, ingredient demand, and belt / inserter throughput, with both ceiling (machines to build) and exact (fractional, for downstream demand) outputs.
- Memoized subgraphs so shared dependencies (e.g. copper cable feeding multiple recipes) are computed once per build.
- Lossless JSON serialization for downstream visualization tooling.
- Curated dataset covering 45+ vanilla Factorio recipes shipped under
src/factorio_recipe_graph/data/.
See the docs for the full API, worked examples, and the data-pipeline regeneration workflow.
Data pipeline
The bundled base_recipes.json is generated from raw recipes.json and
entities.json exports. To regenerate it:
uv run python scripts/build_base_recipes.py
The script is idempotent — running it multiple times produces byte-identical output. See docs/data_pipeline.md for details.
Development
uv run ruff check # lint
uv run ruff format --check # formatting
uv run ty check # types
uv run pytest # tests
CI runs all four on every push and pull request.
Limitations
- Vanilla base game only — no mods, no Space Age expansion mechanics.
- No modules, beacons, or productivity bonuses. Rate math assumes raw machine speed.
- No bot or train logistics. Transport calculations cover belts, inserters, pipes, and pumps only.
- No quality tiers.
Contributing
ruff check, ruff format --check, ty check, and pytest must all
pass before merge.
License
MIT — see LICENSE.
Metadata
Release files for factorio-recipe-graph 0.1.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| factorio_recipe_graph-0.1.3.tar.gz | 76.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| factorio_recipe_graph-0.1.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 104.5 kB
Release files / factorio_recipe_graph-0.1.3.tar.gz
| Download URL | factorio_recipe_graph-0.1.3.tar.gz |
|---|---|
| Size | 76.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
63481d598bb56420d5ccc070abc8fd5a99d6fc435379962fad1a867f2530f374
|
|
BLAKE2b-256 checksum How to use checksums |
c6abb5fa381886884de902b70f301d294a220a06bdf4183b2dedd8bd433c1f9d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 4, 2026.
Transparency logRelease files / factorio_recipe_graph-0.1.3-py3-none-any.whl
| Download URL | factorio_recipe_graph-0.1.3-py3-none-any.whl |
|---|---|
| Size | 27.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
17107d8cd0c41a5c242c4abdc4d0fd813c92b73a08b32ef4ad83637b744b1fd7
|
|
BLAKE2b-256 checksum How to use checksums |
4198bac2b93553d5db5f6453fb90ff8d9025b0cf5d50005baa7d80c191cab543
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 4, 2026.
Transparency log