# Configuration > Every config option in ml_crafting explained Category: CRAFTING · Source: https://miciomods.it/docs/ml-crafting-configuration · Last updated: 2026-07-28 ## Overview - `shared/config.lua`: Global behavior, language, theme, interaction ranges, features, progression, blueprints, portable stations, fuel and durability defaults - `shared/config_models.lua`: Station model presets, bench prop, screen texture placement, per-model camera - `server/config_server.lua`: Discord webhooks Stations, recipes, categories, blueprints and custom station models are not defined in the config. They live in the database and are built from the in-game admin panel (`/craftadmin`). Where the same setting exists in both places, fuel, durability, pickup rules, queue limits, the value saved in the admin panel takes priority over the config default. ## General **shared/config.lua** ```lua Config.Debug = false Config.Language = 'en' Config.Theme = 'default' Config.MainColor = nil Config.Command = 'craftadmin' ``` - `Debug`: Console output for troubleshooting, including the `/craftpooldump` diagnostic command - `Language`: Locale code, must match a file in `locales/`. - `Theme`: Interface theme: `'default'`, `'wasteland'`, `'cyberpunk'`, `'noir'`, `'fantasy'` - `MainColor`: Hex accent color override. `nil` uses the theme default. Individual benches can override it again with a tint color from the admin panel - `Command`: Chat command that opens the admin editor ## Interaction & Streaming **shared/config.lua** ```lua Config.Interaction = { TargetDistance = 2.5, SpawnDistance = 80.0, DuiActivation = 12.0, MaxOperationRange = 5.0, } Config.Stream = { Radius = 200.0, OutRadius = 250.0, ReloadDistance = 100.0, PollMinInterval = 1500, PollMaxInterval = 4000, } ``` - `TargetDistance`: Range in meters to interact with a bench - `SpawnDistance`: Distance at which bench props spawn and despawn - `DuiActivation`: Distance at which the screen content starts rendering - `MaxOperationRange`: Server-side maximum distance for any crafting action. Requests from further away are rejected - `Radius` / `OutRadius`: Benches inside `Radius` enter the client cache, benches beyond `OutRadius` drop from it. Keep `OutRadius` larger than `Radius` - `ReloadDistance`: Meters of player movement before the client asks the server for benches again - `PollMinInterval` / `PollMaxInterval`: Position poll interval in ms, faster while moving, slower while standing still ## Feature Toggles **shared/config.lua** ```lua Config.Features = { Spotlight = true, PortableStations = true, Blueprints = true, QueuedCrafting = true, PropPreview = true, CraftAnimations = true, DamageInterrupt = true, MultipleCrafters = false, Invincibility = false, } ``` - `Spotlight`: Light above the bench while a player uses it - `PortableStations`: Player-placeable benches via inventory item - `Blueprints`: Blueprint requirement system (item or permanent unlock) - `QueuedCrafting`: Timed crafting queue, start a craft, walk away, collect later - `PropPreview`: 3D preview of the result item floating above the bench while crafting - `CraftAnimations`: Player animation during the craft - `DamageInterrupt`: Taking damage interrupts the craft in progress - `MultipleCrafters`: Allow several players on the same bench at once. When `false`, a bench lock keeps it to one user at a time - `Invincibility`: Player cannot be damaged while crafting. Only applies when `MultipleCrafters = false` ## Internal Progression Used only when `Config.ExternalSkills.Enabled = false`. Levels and XP are stored per player in the database. **shared/config.lua** ```lua Config.Progression = { Enabled = false, GlobalXp = { Base = 100, Scaling = 1.4, MaxLevel = 50, }, CategoryXp = { Base = 50, Scaling = 1.3, MaxLevel = 30, }, Points = { PerLevelUp = 1, PerCategoryLevelUp = 1, }, } ``` - `GlobalXp`: XP needed per level follows `Base * (Scaling ^ (level - 1))`. `Scaling = 1.0` is linear, above `1.0` grows exponentially, capped at `MaxLevel` - `CategoryXp`: Same formula per recipe category, each category levels separately - `Points`: Points granted on level up ## External Skills (ml_skills) **shared/config.lua** ```lua Config.ExternalSkills = { Enabled = true, Resource = 'ml_skills', Mapping = { Category = '', XpMultiplier = 1.0, PerCategory = {}, }, } ``` - `Enabled`: Delegate levels, skill checks and XP to ml_skills. Set `false` to use the internal progression above - `Resource`: Name of the external skills resource - `Mapping.Category`: Fixed ml_skills category for all crafting XP. Leave empty to auto-route by recipe category or by the recipe's required skill (recommended) - `Mapping.XpMultiplier`: Multiplier applied to recipe XP before it is sent to ml_skills - `Mapping.PerCategory`: Explicit map of ml_crafting category id to ml_skills category UID, for when the names differ ## Recipe Display & Limits **shared/config.lua** ```lua Config.Recipes = { HideUnavailable = true, HideMissingBlueprint = true, ShowLockedPreview = false, MaxQueueSize = 3, MaxBatchSize = 0, } ``` - `HideUnavailable`: Hide recipes the player cannot craft yet - `HideMissingBlueprint`: Hide recipes whose blueprint the player does not own - `ShowLockedPreview`: Show locked recipes as a preview without allowing the craft - `MaxQueueSize`: Maximum queued crafts per player across all benches. `0` = unlimited. Bench types can set their own queue limit in the admin panel - `MaxBatchSize`: Maximum quantity per single craft operation. `0` = unlimited ## Crafting Queue **shared/config.lua** ```lua Config.Queue = { CleanupEnabled = true, CleanupAfterDays = 7, CleanupCheckInterval = 3600, SharedView = true, AllowSteal = true, } ``` - `CleanupEnabled` / `CleanupAfterDays`: Uncollected ready crafts are removed after this many days - `CleanupCheckInterval`: Cleanup check interval in seconds - `SharedView`: Everyone at the bench sees everyone else's queue entries - `AllowSteal`: Players can collect other players' finished crafts. Every theft is logged through `Bridge.Log` ## Blueprints **shared/config.lua** ```lua Config.Blueprints = { GenericItemName = 'ml_blueprint', DynamicPrefix = 'blueprint_', StrictMode = false, ConsumeOnCraft = false, Durability = { Enabled = false, DefaultUses = 5, }, } ``` - `GenericItemName`: One shared inventory item that carries `metadata.blueprint = ''`. Works with metadata-capable inventories - `DynamicPrefix`: Alternative pattern, one dedicated item per blueprint, named `blueprint_