
Signwright
Edit a wood sign on the sign itself. Camp inks, stamps, and runes save into the vanilla field, including on a dedicated server. A sign of 50 characters or fewer still reads without the mod.Signwright
Edit a placed wood sign on the sign itself. Save writes vanilla TextMesh Pro markup into the sign's text field. Everyone who can see the sign gets that text, including after a dedicated server restart.
Where the 50-character cap actually is
Checked against the Valheim 1.0 sign path (Sign, TextInput, and the text ZDO field):
| Place | What it does |
|---|---|
Sign.m_characterLimit |
Prefab value, default 50. Passed into the text box when you use the sign. |
TextInput.RequestText |
Copies that number onto the input field's character limit. |
Sign.SetText |
Writes the string to the vanilla ZDO key text. Public builds do not show a second 50-character chop here. |
| Dedicated server world save | Stores that same text field. A few hundred characters fit in a ZDO string and come back after a restart. |
Signwright raises m_characterLimit, raises the text box if something else opens it, and clamps the text value — on the client and on the server — to CharacterLimit (default 400, config range 50–800). If a write comes back shorter than what was sent, the plugin puts the full string back on the ZDO before the world saves.
Install it on the dedicated server so that clamp is the one that owns the world. Install it on every client that writes signs, and on every client that must be sure it can read a sign longer than 50. A sign that still fits in 50 characters is ordinary markup in the vanilla field, so a player without the mod can read it.
What the editor writes
The same tags the wood sign already draws. No new format.
- A new line is stored as
\n(backslash, n). That is two characters. - Colors are short hex only. Copper is
<#c74>, never<color=red>and never<color=#cc7744>. - The plugin never writes
</color>. Black after another ink is<#000>. Text that starts black has no color tag. - Closing tags are left off when that style runs to the end of the sign.
- Bold is not written. It does nothing on the Norse font.
- Underline uses the ink that is active when it opens, so the color is written first.
- Emoji newer than 2022 can draw as an empty box. Flags, skin tones, and joined emoji are not in the picker. Runes carve on the wood; the input line may show squares until you save.
- No size tag means the game fits the words, up to about size 8. Size 14 fills the plank. Larger hangs off. Negative size flips the letters. The board does not grow.
Camp kit
The editor on the sign also has the inks and stamps from the sign reference, a rune scribe, and a name spinner. All of them write the same vanilla text field. The dedicated server does not need a new channel. It already stores that string and brings it back after a restart.
- Inks are copper, iron, ash, mead, pine, sea, night, plum, bone, and the rest. Each one shortens to a 3-digit hex tag.
- Stamps cover a chest wall, a portal, a tavern, a warning, and a mark that hangs off the board. Every stamp fits in 50 characters.
- Carve turns letters into Elder Futhark.
thbecomes one rune. Runes already on the piece stay. - Portal, tavern, shop, and warning spin a short name onto the piece and leave its ink alone.
- Add my name appends your character name in small bone italic. Save writes it with
Sign.SetText, so other players and a restarted server see that line.
Build
The plugin links Valheim's own assemblies. From a machine that has the game and BepInEx:
export LIBS="/path/to/Valheim/valheim_Data/Managed"
# Use publicized assembly_valheim if the stock one hides private fields. This project reaches those through Harmony AccessTools, so a publicized build is only needed if your compiler requires it.
cd mod/Signwright
dotnet build -c Release -p:Libs="$LIBS"
Copy bin/Signwright.dll and symbols.txt to BepInEx/plugins/Signwright/ on the dedicated server and on the clients above. Dependency: denikson-BepInExPack_Valheim.
Config appears at BepInEx/config/com.signwright.valheim.cfg.
ReplaceEditor (default true) opens this editor instead of the vanilla box. Saved signs for this computer live in BepInEx/config/Signwright.mysigns.txt.
Checks
- Use a placed wood sign, edit it, save. The text is written with
Sign.SetText. Nothing is copied. - A second player looking at that sign reads the same
textfield. - Restart the dedicated server. The world file still has the longer string, up to
CharacterLimit.