
DvergrAstrolabe
Strictly server-side Valheim 1.0 mod - no client install ever. Set how many real minutes daylight and night each last; the server paces the world clock and every client follows.🔭 Dvergr Astrolabe
Daylight and night, in real minutes, set once on the server. No client install, ever.
A vanilla Valheim day is 30 real minutes: 21 of daylight and 9 of night. Dvergr Astrolabe lets the server decide those two numbers - a lazy hour of daylight with a 5-minute night, or a 10-minute day and a 20-minute night for a horror server - and every player sees it with nothing installed on their side. Steam, Xbox, PlayFab and crossplay parties alike, because the server is the only machine that owns the world clock.
⚙️ Settings
BepInEx/config/wubarrk.dvergrastrolabe.cfg on the server. Edits are picked up within 5 seconds, no restart.
The defaults are vanilla, so installing the mod changes nothing until you set them.
| Setting | Default | What it does |
|---|---|---|
[2 - Day And Night] DayMinutes |
21 |
Real minutes from sunrise to sunset: the whole stretch in which the sun is above the horizon and the game counts as day (the Day N banner fires at its start). 0.5 to 180. |
[2 - Day And Night] NightMinutes |
9 |
Real minutes from sunset to sunrise: dusk, the midnight day-counter tick and dawn. 0.5 to 180. |
[3 - Client Sync] ClockPushInterval |
0.5 |
Seconds between extra pushes of the clock to clients (vanilla pushes every 2 s). Keeps the sun moving smoothly when the rate is far from 1x. 2 adds no extra traffic. |
[1 - General] Enabled |
true |
Master switch. Off = vanilla 21 + 9. |
[1 - General] VerboseLogging |
false |
Log every sunrise and sunset with the day number and the rate that just took effect. |
A few starting points:
| Feel | DayMinutes |
NightMinutes |
Full day |
|---|---|---|---|
| Vanilla | 21 | 9 | 30 min |
| Long lazy days | 45 | 10 | 55 min |
| Builders' server | 60 | 5 | 65 min |
| Horror server | 10 | 20 | 30 min |
| Quick test | 1 | 1 | 2 min |
🔭 How it works
Every machine in a Valheim game turns one number into the time of day: the world clock, in game-seconds. Only the server advances it, and every 2 seconds it pushes the value to each client, which simply adopts it. Time of day is that clock modulo the day length, 1800 game-seconds: the stretch from 0.15 to 0.85 of each day (1260 seconds) is daylight, the remaining 540 seconds are night. That is where vanilla's 21 + 9 comes from.
The server cannot change the 1800 baked into an unmodded client. It can change how fast the clock runs.
Astrolabe scales the server's clock tick to 1260 / (DayMinutes x 60) game-seconds per real second while the
sun is up and 540 / (NightMinutes x 60) while it is down, switching exactly at sunrise and sunset (a tick
that straddles the boundary is split so each side runs at its own rate). A day is still 1800 game-seconds,
the clock still only counts up, the world save stores it unchanged. It just takes as long as you said.
Between pushes an unmodded client runs its own copy of the clock at 1x, so each push applies a small correction, which the game already smooths over about 2 seconds. Astrolabe pushes every 0.5 s by default so that correction stays under a degree of sun movement at any sane setting, at the cost of one tiny packet per client per half second.
📏 What changes, and what doesn't
Untouched. The day counter (it ticks at midnight, the Day N banner still appears at sunrise). Sleeping: still allowed from noon, still skips to the next sunrise in 12 real seconds. World saves. The empty-server freeze: with nobody online the clock stops exactly as in vanilla (if you run Let It Grow's time flows while empty, its tick is the scaled one, so the two agree).
Stretch with your day (they run on the game clock). Crops and trees, smelters, kilns and furnaces, cooking stations, fermenters, beehives and sap collectors, fires' fuel, item despawn, berry and pickable respawn, creature spawners, taming hunger, pregnancy and growing up, creature and tame health regeneration, trap and ballista rearm, snow damage. With a 45-minute day these still take exactly as many days as before, which now means more real minutes. With a 1-minute night, monsters regenerate health nine times faster than you are used to while it is dark.
Do not stretch (they run on the wall clock). Raids and random events, Rested, food, comfort. A longer day therefore gets more raids per game day, a shorter one fewer.
Fine print. At very long stretches (a rate under 0.2x: days over 105 minutes or nights over 45) a
client-owned fire, beehive or sap collector can occasionally drop a fraction of a second of progress when a
clock correction lands mid-tick; lower ClockPushInterval to 0.25 to shrink it further. The vanilla
10-game-second lockout between two sleep attempts scales with the night rate too.
📦 Install
Server side only. Drop DvergrAstrolabe.dll into BepInEx/plugins/ on the dedicated server (for a
player-hosted world, on the hosting player's game). Start it once to generate the cfg, set DayMinutes and
NightMinutes, done. Nothing goes on clients; if the DLL ends up on a client by accident it does nothing.
Requires the BepInExPack for Valheim (5.4.2350). Built against the Valheim 1.0.15 dedicated server.
🧪 Checking it works
BepInEx/LogOutput.log on the server, at startup and after every config edit:
[Message:DvergrAstrolabe] schedule (startup): daylight 45 real min at 0.467x, night 10 real min at 0.9x; one full day = 55 real min (vanilla 30); clock pushed to clients every 0.5 s (plus vanilla's 2 s).
[Message:DvergrAstrolabe] clock patch live: EnvMan found, day 12, raw day-fraction 0.412 (daylight), 1 player(s) connected.
With VerboseLogging on, every transition as well:
[Info :DvergrAstrolabe] sunset, day 12: clock at 0.9x for the next 10 real min.
A Valheim mod by Wubarrk.