Early docs These pages are very early. Structure and tone are still being worked out, so anything here may change drastically.
Skip to content

Configuration

The interface saves settings into profiles. The CLI and the server read a slicer.toml. This page is about the latter — how to pin defaults across a team, and how to make one job slice identically every time.

The layers

Four layers, deep-merged, each overriding the last:

built-in defaults
  → user config      ~/.config/slicer-engine/slicer.toml
    → project config ./slicer.toml
      → CLI flags

Deep-merged means a project file only writes what it changes. Everything else falls through from the layer below. Command-line flags override for that one invocation and are never written back.

Creating one

bash
slicer-engine config init          # writes ./slicer.toml
slicer-engine config path          # where the global one lives
slicer-engine config show          # the fully merged result
slicer-engine config show --output-format json

config show is the one to reach for when a setting isn't doing what you expect — it tells you what the slicer actually resolved, not what any single file says.

What goes in it

toml
[machine]
name = "Voron 2.4"
nozzle_diameter = 0.4
build_volume_x = 350.0
build_volume_y = 350.0
build_volume_z = 340.0

[slicing]
layer_height = 0.2
wall_count = 3
infill_density = 0.20

[server]
host = "0.0.0.0"
port = 5201
work_dir = "/var/lib/coldcrabby"
SectionCovers
[machine]Nozzle, build volume, speed and acceleration limits
[slicing]Every slicing parameter — the same set the Process tab shows
[server]Bind address, port, interface directory, work directory, CORS origins
[profiles]Named presets, machines and materials
Top levelstart_print_gcode, end_print_gcode, lifecycle markers

Full field reference: Config and Settings.

Reading and writing single values

bash
slicer-engine settings show
slicer-engine settings get layer_height
slicer-engine settings set layer_height 0.15
slicer-engine settings set gcode_flavor klipper
slicer-engine settings set start_print_gcode null   # clear an optional field

Both flat aliases (layer_height) and full paths (params.layer_height) work. These write the global config.

Patterns worth stealing

Per-job reproducibility. Commit a slicer.toml next to the job's models. Anyone who slices in that directory — or any pipeline that does — gets identical output, whatever their personal defaults are.

jobs/bracket-v3/
├── slicer.toml
├── bracket.stl
└── plate.stl

A team baseline. Ship one slicer.toml to every workstation's user config directory. People can still override per project, and nobody starts from factory defaults.

Machine-specific overrides. Keep the shared baseline in the user config and put only the differences — nozzle, build volume, start G-code — in a per-machine project file.

Validating before you print

bash
slicer-engine settings validate --global global.json --object object.json
slicer-engine settings diff     --global global.json --object object.json

validate checks values against physical constraints. diff shows what an object-level file actually overrides — useful when a per-part override is doing something you didn't intend.

Profiles vs. slicer.toml

Both configure the slicer; they aren't the same thing.

Profiles (profiles.toml)Config (slicer.toml)
Edited fromThe interfaceA text editor, or config / settings commands
ShapeA library of named printers, filaments, processesOne resolved configuration
Best forWhat people pick betweenDefaults and per-job pinning

A team usually wants both: a shared profile library so everyone picks from the same list, and a project slicer.toml wherever a job must be reproducible.

Advanced — legacy JSON

Older settings.json and slicer.json files still load, for migration. Current code only ever writes TOML.