About SeneaL API
From ThunderstorePublic API for Valheim UI mods: notices, dialogs and HUD elements, with a bridge that routes the game's own windows to any UI that registers as a provider.
SeneaL API
Pages: Thunderstore · Hexium
Provider: SeneaL UI (Thunderstore · Nexus Mods · Hexium).
A small public library for Valheim UI mods, and a bridge that sends the game's own windows to whatever UI mod you run.
- For players: install it together with a UI mod that supports it (SeneaL UI). Mods that show the game's standard messages and windows then look the same as the rest of your interface. Without such a UI mod nothing changes: every request falls back to the vanilla window.
- For modders: one place to show notices, ask the player a question and register your HUD elements, with no dependency on a specific UI mod.
- For UI authors: register one provider per feature and you receive every request, from the API and from the game's own calls.
How it works
your mod ── Notices.Show / Dialogs.Confirm / HudElements.Add ──┐
├─► provider (a UI mod) ─► its own window
game / any mod ── MessageHud.ShowMessage, UnifiedPopup.Push ───┘ │
TextInput.RequestText (bridge) └─ declines or missing ─► vanilla window
All calls run on the Unity main thread.
Using it from your mod
Add a soft dependency and keep every API call in a method that runs only when the API is loaded:
[BepInDependency("seneaL.valheim.api", BepInDependency.DependencyFlags.SoftDependency)]
public class MyMod : BaseUnityPlugin
{
private static bool HasApi => BepInEx.Bootstrap.Chainloader.PluginInfos.ContainsKey("seneaL.valheim.api");
public static void Hello()
{
if (HasApi)
ShowWithApi("Hello");
else
Player.m_localPlayer?.Message(MessageHud.MessageType.TopLeft, "Hello");
}
private static void ShowWithApi(string text) => SeneaL.API.Notices.Show(text);
}
If you only use the game's own methods you need nothing: the bridge already routes them.
Quick start: a complete mod
One file, one soft dependency, all four features. Everything that touches SeneaL.API sits in a separate class, so the mod loads and works when the API is not installed.
using BepInEx;
using UnityEngine;
using BepInEx.Bootstrap;
[BepInPlugin("my.mod.guid", "My Mod", "1.0.0")]
[BepInDependency("seneaL.valheim.api", BepInDependency.DependencyFlags.SoftDependency)]
public class MyMod : BaseUnityPlugin
{
public static bool HasApi => Chainloader.PluginInfos.ContainsKey("seneaL.valheim.api");
private void Start()
{
if (HasApi)
ApiPart.Register();
}
private void Update()
{
if (HasApi && Input.GetKeyDown(KeyCode.F9))
ApiPart.Ask();
}
}
internal static class ApiPart
{
private const string Owner = "my.mod.guid";
public static void Register()
{
if (Api.Has("slots"))
CustomSlots.Add(Owner, new SlotDef("charm") { Title = "Charm", Mode = SlotMode.Stored });
if (Api.Has("notices"))
Notices.Show("My Mod is ready", NoticeKind.TopLeft);
}
public static void Ask()
{
Dialogs.Confirm("Reset the counter?", "The value will be lost.", yes: () => Notices.Show("Counter reset", NoticeKind.Center));
}
}
using SeneaL.API; goes at the top of the file that uses these types. Api.Has(...) is true only when the feature exists in the installed API version, so it also protects you from an older API.
Notices
Notices.Show("$msg_example", NoticeKind.Center);
Notices.Show("Picked up", NoticeKind.TopLeft, amount: 3, icon: sprite);
Notices.Unlock(icon, "Title", "Description");
Notices.Biome("Meadows", stinger: true);
Notices.Shown += notice => { };
Notice.Text is localised, Notice.Raw is what was passed, Notice.Vanilla is true when it came from a game call.
Dialogs
Dialogs.Confirm("Delete?", "This cannot be undone.", yes: () => Delete());
Dialogs.Message("Done", "Saved.");
Dialogs.Input("Name", "current", submit: name => Rename(name), validate: s => s.Length > 0);
Each call returns the dialog. IsOpen is false when the vanilla window owns it, and Close() closes it.
More than two answers: Dialogs.Choose takes up to four buttons. The first Primary button is the main one, CancelIndex (the last button by default, -1 = none) is what Esc picks. Set Centered = true on any dialog to center its text.
var d = Dialogs.Choose("Friend request", "Ragnar wants to be your friend.",
new DialogButton("Accept", Accept, primary: true),
new DialogButton("Decline", Decline),
new DialogButton("Later", Later));
d.Centered = true;
d.CancelIndex = 2;
Without a provider (or with one that does not know DialogKind.Choice) the game's yes / no window shows the first two buttons (one button: the game's warning window). Probe with Api.Has("dialogs.choice"). A dialog provider gets ChoiceDialog with Buttons and answers with Choose(index) or Cancel(); a provider that cannot draw it returns false from Show.
HUD elements
var element = HudElements.Add("my.mod.guid", "timer", "Timer", timerRect);
HudElements.Remove(element);
A full example: a small counter that you build yourself and hand to the UI.
using TMPro;
using UnityEngine;
using UnityEngine.UI;Highlights
From source dataLoaders
Runs on BepInEx.
Footprint
Rated a light load on a server.
Last update
Its author last shipped an update 15d ago.
SeneaL API on Nxeon
From our catalogue- One-click install
- Supported on Nxeon Valheim servers, for BepInEx servers. We download it from Thunderstore, place it, and restart the server.
- Server type needed
- BepInEx
- Server load
- light
- Smallest plan we suggest
- Valheim — 4 GB (4 GB RAM). This follows our own load rating above, not a benchmark.
- Latest build
- 1.2.0, released 2026-10-20
Game versions by loader
| Loader | Game versions | Newest |
|---|---|---|
| BepInEx |
From 4 recorded builds of SeneaL API.
Recent builds
| Build | Released | Game versions | Loaders |
|---|---|---|---|
| 1.2.0 | 2026-10-20 | n/a | BepInEx |
| 1.1.0 | 2026-10-19 | n/a | BepInEx |
| 1.0.1 | 2026-10-18 | n/a | BepInEx |
| 1.0.0 | 2026-10-17 | n/a | BepInEx |
Dependencies
- Required: BepInExPack Valheim
Declared by the newest build that lists any. Required ones are installed with it on one-click installs.
Run SeneaL API on a Valheim server
Pick a server or deploy a new one above; it is installed in one click.
What kind of mod it is
From the catalogLibraries & compatibility
Foundations and fixes other mods build on. Usually installed because something else needs it.
Compatibility
- Game
- Valheim
- Loaders
- BepInEx
- Requires
- One-click install needs a BepInEx server.
Verified at the source
- ✓ThunderstoreOfficial listing, checked 2026-10-21Open ↗
- ✓AuthorseneaL, as published on Thunderstore
- ✓LicenseNot published by the sourceFree





