Getting started
Create a project
Section titled “Create a project”mkdir my-mod && cd my-modfactorio-rs init --name my-modinit refuses to overwrite an existing Cargo.toml or Factorio.toml.
What gets created
Section titled “What gets created”| Path | Purpose |
|---|---|
Cargo.toml |
Library crate depending on factorio-rs |
Factorio.toml |
Transpile + mod metadata |
src/lib.rs |
Sample control_mod! with one event |
.gitignore |
Ignores /target, /dist, /*.zip |
Default src/lib.rs:
factorio_rs::control_mod! { #[factorio_rs::event(OnSingleplayerInit)] pub fn on_singleplayer_init() { println!("Initialized"); }}Configure
Section titled “Configure”Minimal Factorio.toml:
source = "src"output_dir = "dist"
[mod]title = "Factorio Mod"factorio_version = "2.0"
[profiles.debug]debug_level = 1prune_dead_code = false
[profiles.release]debug_level = 0prune_dead_code = truecargo check # type-check Rust + macrosfactorio-rs build # transpile into dist/Typical output:
dist/ info.json control.lua lua/control.luaEach build wipes output_dir before writing.
Install and play
Section titled “Install and play”factorio-rs install # copy dist/ -> mods/<name>_<version>/factorio-rs install --open # install, then launch Factoriofactorio-rs package # release profile and zip at project rootZip name: {cargo_package_name}_{version}.zip with a Factorio-ready root
folder inside.
Place an optional thumbnail.png in the project root (or set
[mod].thumbnail) so it is copied into the mod for the Factorio mod portal.
Next steps
Section titled “Next steps”- Language support - what Rust syntax you can use
- Stages - control / settings / data / shared
- Events and filters
- hello_world example