Skip to content

Resource Structure

Each resource is a self-contained folder owned by one Lua runtime on each active side.

Minimal layout

text
my_resource/
  manifest.lua
  client.lua
  server.lua
  resource.cfg
  data/
    settings.json
  assets/
    content.bundle

Only manifest.lua is required. Scripts and files are loaded in declaration order.

Manifest directives

lua
manifest_version '1.0.0'
name 'my_resource'
author 'Server Team'
version '1.0.0'
description 'An example gameplay resource'

client_scripts {
  'client/main.lua',
  'client/ui.lua'
}

server_scripts {
  'server/main.lua',
  'server/storage.lua'
}

files {
  'data/settings.json',
  'assets/item_icon.png'
}

asset_bundle 'assets/content.bundle'

Asset bundles are automatically included in synchronized files. Server scripts are excluded from client synchronization.

Declarative custom content

Resources can register content while their manifest is loaded:

lua
derived_items {{
  base = 'SwordBlackmetal',
  prefab = 'ExampleSword',
  persistent = true,
  name = 'Example Sword',
  damage = { slash = 90 },
  recipe = {
    amount = 1,
    enabled = true,
    craftingStation = 'forge',
    minStationLevel = 2,
    resources = {
      { item = 'Iron', amount = 10 }
    }
  }
}}

See the gold_mining example for AssetBundle prefabs, bundle items, a derived item, recipe, and derived mob in one resource.

Resource configuration

Global convars live in server.cfg. Resource-local values live in resource.cfg:

ini
set reward_amount "5"
setr display_name "Public event"

Read them in Lua:

lua
local rewardAmount = GetResourceConvarInt('reward_amount', 1)
local displayName = GetResourceConvar('display_name', 'Event')

Use sets only for engine-owned secrets such as the MySQL connection string. Secret values are not exposed to Lua getters.

Lifecycle

Stopping a resource removes its event handlers, commands, exports, scheduled tasks, pending MySQL operations, and loaded AssetBundles. Do not keep runtime IDs in persistent storage; values beginning with instance: or object: are valid only for the current game process.

Lua resources for Valheim, built on a server-authoritative runtime.