Skip to main content

infinite-craft-cli

PyPI Downloads License Python Tests Publish Chrome Web Store

Interactive CLI for Infinite Craft — combine elements from the terminal. Also available as a browser extension and web trainer.

Originally built on infinite-craft by @sqdnoises. As of v1.0, uses curl_cffi directly.

Installation

pip install infinite-craft-cli

Browser extension

Install the Infinite Craft Trainer from the Chrome Web Store — it loads automatically on neal.fun/infinite-craft and fetches the current trainer (trainer.min.js) from GitHub Pages with cache: 'no-store', so feature updates ship without waiting for a Chrome Web Store release. The extension manifest version (extension/manifest.json) is independent of the Python CLI package version (git tags). See PRIVACY.md for the remote-script trust model. Works in Edge, Brave, and other Chromium browsers.

Manual QA (extension): After changes to extension/loader.js, load the unpacked extension on live neal.fun/infinite-craft and confirm the trainer UI appears and IndexedDB-backed commands work (e.g. /list).

For other install methods (console snippet, userscript), see the web trainer page.

Usage

Interactive mode

infinite-craft

This opens a REPL where you can combine elements, search discoveries, and more:

=== Infinite Craft CLI ===  v1.9.0

craft> Water + Fire
  💨 Water + 🔥 Fire = 💨 Steam

craft> /search steam
  💨 Steam

craft> /target Steam
  Target set: Steam — you'll be asked whether to continue the batch when this is crafted.

craft> /help

Sticky chrome under the log always shows the pair-API rate bar (next-slot wait + remaining budget). While a job runs it also shows running command + progress, or ◆ confirm with the reason (pair count, target hit). y / n is only on confirm [y/n]>.

Non-interactive mode

Most REPL commands are available as subcommands (shorthand operators like +, ++, +|, and * are REPL-only):

infinite-craft combine "Water" "Fire"
infinite-craft search "steam"
infinite-craft list
infinite-craft recipe "Steam"
infinite-craft import "Steam"
infinite-craft export
infinite-craft fill
infinite-craft unfilled
infinite-craft prune
infinite-craft exhaust "Water"
infinite-craft crawl "Water" "Fire"
infinite-craft permute "w*"
infinite-craft with "Water" "fire*"
infinite-craft cross "fire*" "water*"
infinite-craft --version

Commands

Combine & crawl

Shorthand Slash command Description
<element> + <element> /combine <element> <element> Combine two elements
<element> ++ <element> /crawl <element> <element> Combine & crawl until no new discoveries

Bulk combine

Shorthand Slash command Description
<element> then `+ then` (adjacent operator) /with <element> <query>
<query> * <query> /cross <query> <query> Cross-combine matches from both queries
/permute <query> Combine all matching elements with each other
/permutate <query> Permute repeatedly until no new discoveries
/exhaust <query> Each match combined with all discoveries

Query syntax

Used by /search, /with, /permute, /permutate, /cross, /exhaust, and the +| / * shorthands:

Syntax Meaning
substring Case-insensitive substring (default)
* ? [] fnmatch wildcards (e.g. fire*, mu?)
/pattern/ Regex, case-insensitive (/pattern/; alternation | not supported)
!<query> Exclude matches (e.g. !fire* = everything except fire*)
! All elements (exclude nothing)
^<query> First discoveries only (e.g. ^fire* = new fire* matches)
^ All first discoveries

Other commands

Command Description
/search <query> Search discoveries
/recipe <element> Show shortest recipe from base elements
/list List all discovered elements
/import <element|file.ic> Import from Infinibrowser or .ic save file
/fill Fetch missing recipes from Infinibrowser
/unfilled List elements without recipes
/prune Remove orphan elements Infinibrowser can't fill
/export [path] Export discoveries as .ic save file
/history Show combinations tried this session
/target <element> Watch for a result; ask y/n to continue the batch on hit
/target Show current target
/target clear Clear target
/queue Show running and pending commands (status also appears in chrome)
/help Show help
/quit Exit

Queues and confirm (Python REPL + trainer)

Pair-API work (combine, crawl, permute, exhaust, …) and Infinibrowser work (/fill, /prune, /import) use independent queues so one lane can run while the other is busy. Local commands (/help, /search, /list, /recipe, /history, /clear, /unfilled, /queue, /target) run immediately — their output may interleave with a running job.

Large batches and /target hits pause on confirm [y/n]>: y continues, n / Esc / Stop cancels remaining work. The job row states the reason (331 pairs, target hit); keybindings are not repeated in the log.

Key Action
Esc Skip current command, continue to next in that lane (TTY / Stop in the trainer)
Ctrl+C While running: stop and discard remaining queue; at confirm: decline only

Deferred commands print Queued: when that lane is already running.

Data storage

Discoveries and recipes are stored in ~/.infinite-craft-cli/:

  • discoveries.json -- all discovered elements
  • recipes.json -- known element combinations
  • export.ic -- default export location

Browser extension / bookmarklet

The browser trainers share the same command syntax and query matching as the Python CLI (wildcards, /regex/, ! exclude, ^ first discoveries, /combine, /with, /cross, /target, and operator shorthands +, ++, +|, *). Browser-only additions: /clear to clear the output panel, and IndexedDB storage instead of ~/.infinite-craft-cli/. Rate, job, and queue status live in the sticky panel above the input (visual-only; no /queue command). Local commands such as /search may interleave output with a running queued command.

Development

After editing bookmarklet/trainer.src.mjs, rebuild the bundles:

bazel build //bookmarklet:site

Build the Python wheel:

bazel build //release:wheel.dist

Run unit tests:

bazel test //tests/...

Run integration tests (hits the real API):

bazel test //tests:test_integration --test_env=INTEGRATION_TESTS=1

License

MIT

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

infinite_craft_cli-1.9.1-py3-none-any.whl (69.7 kB view details)

Uploaded Python 3

File details

Details for the file infinite_craft_cli-1.9.1-py3-none-any.whl.

File metadata

File hashes

Hashes for infinite_craft_cli-1.9.1-py3-none-any.whl
Algorithm Hash digest
SHA256 2403adbaa552847fcb95d3a64d628e6f5fb9ac92d3341503fa188179856c4936
MD5 8e78d8533e7330a149b70fd07f98bf67
BLAKE2b-256 e9a73d3e3608442b036933405007eba5bdef73cae4b1afa22c1c46f34c1d595f

See more details on using hashes here.

Provenance

The following attestation bundles were made for infinite_craft_cli-1.9.1-py3-none-any.whl:

Publisher: publish.yml on hacker6284/infinite-craft-cli

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

3.0.2

1 file

3.0.1

1 file

3.0.0

1 file

2.5.0

1 file

2.4.1

1 file

2.4.0

1 file

2.3.0

1 file

2.2.0

1 file

2.1.1

1 file

2.1.0

1 file

2.0.1

1 file

2.0.0

1 file

1.11.0

1 file

1.10.2

1 file

1.10.1

1 file

1.10.0

1 file

1.9.2

1 file

This release

1.9.1 This release

1 file

1.9.0

1 file

1.8.4

1 file

1.8.3

1 file

1.8.2

1 file

1.8.1

1 file

1.8.0

1 file

1.7.0

1 file

1.6.0

1 file

1.5.0

2 files

1.4.2

2 files

1.4.1

2 files

1.4.0

2 files

1.3.0

2 files

1.2.9

2 files

1.2.8

2 files

1.2.7

2 files

1.2.6

2 files

1.2.2

2 files

1.2.1

2 files

1.2.0

2 files

1.1.0

2 files

1.0.0

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page