
This package has been deprecated and may no longer be maintained. We recommend looking for an alternative.

Replaces Valheim's bulky, queue-blocking unlock and TopLeft notification boxes with compact, Skyrim-inspired toast panels that animate in and out cleanly even when 10+ notifications arrive at once.
| Feature | Details |
|---|---|
| Sleek panels | Dark semi-transparent background, thin parchment-gold border, top shimmer line, left accent stripe |
| Item icon | The piece/item sprite is shown inside the panel (configurable size, or set to 0 to hide) |
| Two-line layout | Topic (bold, brighter) on top; description body below. Falls back to single-line when only one is available |
| Wave animation | Panels cascade in staggered top→bottom on entry, then wave out bottom→top on exit |
| Smooth repositioning | When a panel exits, the ones below glide upward to fill the gap (LateUpdate lerp) |
| Stack-count badge | Duplicate messages within a configurable time window are merged into a single panel with a ×N badge |
| No queue delay | All notifications appear immediately, up to MaxVisible at once; excess waits in a queue |
| Full config | Every timing, size, colour, and behaviour value is exposed in the BepInEx config file |
SleekNotify.dll to BepInEx/plugins/yourname-SleekNotify/.Config path: BepInEx/config/yourname.SleekNotify.cfg
Use BepInEx.ConfigurationManager (F1 in-game) or r2modman's Config Editor to change values at runtime without restarting.
| Key | Default | Description |
|---|---|---|
Width |
300 |
Panel width in pixels |
Height |
56 |
Panel height in pixels |
FontSize |
13 |
Body / description line font size |
TopicFontSize |
14 |
Title / topic line font size |
BackgroundColor |
dark translucent | Panel background (RGBA) |
BorderColor |
parchment gold | Border + accent colour (RGBA) |
BorderThickness |
2 |
Outer border thickness in pixels |
TextColor |
warm white | Description body text colour |
TopicColor |
bright warm | Topic / title text colour |
BadgeBackgroundColor |
amber | Stack-count badge background |
BadgeTextColor |
near-black | Stack-count badge text |
IconSize |
36 |
Sprite icon size (px). Set to 0 to hide icons |
IconPadding |
6 |
Gap between icon and text column (px) |
| Key | Default | Description |
|---|---|---|
DisplayDuration |
3.5 |
Seconds each panel stays fully visible |
SlideInDuration |
0.22 |
Seconds for the slide-in animation |
SlideOutDuration |
0.18 |
Seconds for the slide-out animation |
StaggerDelay |
0.07 |
Extra delay per slot index (wave effect). 0 = all at once; 0.12 = dramatic cascade |
FadeInDuration |
0.14 |
Alpha fade-in duration |
FadeOutDuration |
0.14 |
Alpha fade-out duration |
SlotMoveSpeed |
12 |
Lerp speed for panels sliding into a new slot when one above exits |
Wave feel tuning tips:
StaggerDelay 0.10–0.14 + SlideInDuration 0.20 gives a satisfying waterfall.StaggerDelay 0.0 makes everything arrive in sync — more of a "burst" feel.DisplayDuration to 2.5 if it feels like the screen is cluttered.SlotMoveSpeed to 20 so columns reorder almost instantly.| Key | Default | Description |
|---|---|---|
MaxVisible |
10 |
Maximum panels shown at once (excess queued) |
Spacing |
5 |
Vertical gap between panels (px) |
ScreenEdgeMarginX |
16 |
Distance from right screen edge (px) |
ScreenEdgeMarginY |
80 |
Distance from top screen edge (px) |
| Key | Default | Description |
|---|---|---|
InterceptTopLeft |
true |
Route TopLeft ShowMessage calls (item pickups, status text) through SleekNotify. Set false to leave them vanilla |
StackDuplicates |
true |
Merge identical messages within StackWindow seconds into one panel with a ×N badge |
StackWindow |
1.5 |
Seconds in which a duplicate is merged rather than spawning a new panel |
QueueUnlockMsg or ShowMessage(TopLeft, ...) will
automatically have its output routed through SleekNotify.InterceptTopLeft = false lets another mod handle those messages if
you're running something that provides its own TopLeft replacement.Requirements: .NET SDK 6+ (or Visual Studio 2022), Valheim installed on the machine.
# Edit SleekNotify.csproj, set <ValheimDir> to your install path, then:
dotnet build SleekNotify.csproj -c Release
# Output: bin/Release/net48/SleekNotify.dll
Copy SleekNotify.dll to BepInEx/plugins/yourname-SleekNotify/.
InterceptTopLeft config toggle so the feature can be disabledStackDuplicates + StackWindow config entriesLateUpdate (no more 1-frame position jump)GetField overhead)OnLevelWasLoaded cleanup so panels never bleed between scenesLocalization.instance.LocalizeMIT — do whatever you like, attribution appreciated.