Skip to content

CLI commands

Fujin Shuttle registers four console commands. The two you'll use directly are fujin:shuttle:run (ad-hoc import) and fujin:shuttle:run-profile (tracked run of a stored profile); fujin:shuttle:export writes a CSV; fujin:shuttle:media-worker is internal.


fujin:shuttle:run

Run a Fujin Shuttle import from a CSV file. No job tracking — fastest path for scripting and one-off loads.

bin/console fujin:shuttle:run <file> [options]
Argument Required Description
file yes Path to the CSV file.
Option Default Description
--type product product | product_variants | category | entities_metadata | product_extra | inventory | rules
--dry-run off Resolve IDs but write nothing.
--batch-size 500 Rows per batch (per bulk INSERT).
--reindex auto auto | full | none.
--concurrency (config) Max batches in flight (async driver). Falls back to the configured value.
--media-mode (config) filesaver | raw | worker — overrides config for this run.
--media-workers (config) Parallel subprocesses for worker media mode.
--parent-category (config) Parent category ID (hex) imported categories nest under. Default = storefront root.

On completion it prints processed / success / empty / errors counts, the number of touched IDs, and the reindex mode used.

# 50k all-new products, no reindex during the run (rebuild after)
bin/console fujin:shuttle:run products.csv --type=product --reindex=none
bin/console dal:refresh:index

# Dry run to validate a file without writing
bin/console fujin:shuttle:run products.csv --dry-run

# Categories under a specific parent
bin/console fujin:shuttle:run categories.csv --type=category --parent-category=<hex>

fujin:shuttle:run-profile

Run a stored profile under a tracked fujin_job — live progress, and honours a stop request from the admin (status flipped to stopping). The CLI counterpart of the admin Run button / queued RunProfileMessage; the large-file headless path.

bin/console fujin:shuttle:run-profile <profile> [--dry-run]
Argument Required Description
profile yes Stored profile ID (hex).
Option Default Description
--dry-run off Resolve IDs but write nothing.

It counts the rows, creates a job, runs it through the run monitor, and prints the final status, processed, total and progress. Exit status reflects the outcome (stopped → success with a warning; error → failure).

bin/console fujin:shuttle:run-profile 0a1b2c3d4e5f60718293a4b5c6d7e8f9

When to use which

Use run for throwaway/scripted imports where you don't need history or a stop button. Use run-profile when you want the run recorded, resumable monitoring, and the ability to stop it from the admin — especially for very large files.


fujin:shuttle:export

Export Fujin Shuttle data to a CSV file.

bin/console fujin:shuttle:export <file> [options]
Argument Required Description
file yes Output CSV path.
Option Default Description
--type product Data type to export.
--batch-size 500 Rows per page (keyset pagination).
--locales (empty) Comma-separated non-default locales added as suffixed translation columns (product export), e.g. de-DE,en-GB.
bin/console fujin:shuttle:export out.csv --type=product --locales=de-DE,en-GB

The exported columns are the canonical round-trip set — they re-import cleanly. See the CSV reference.


fujin:shuttle:media-worker

Internal. Imports a shard of media sources for the worker media strategy. Spawned as a subprocess by the import — not meant to be run by hand.

bin/console fujin:shuttle:media-worker <in> <out> [--entity=product]
Argument / option Description
in Path to a JSON file with the source list.
out Path to write the JSON result map.
--entity (product) Default media-folder entity.

See Media import → worker mode for how this is used.