Raven Iron
Undertow
All ProjectsVersion v1.0.1
ReleasedOcean Simulation ModValheim / UnityC#

Undertow

The sea gets its own motion — currents you can learn, tides that reverse the coast, and water that carries what floats on it.

Platforms:Client, Dedicated Server, Linux, Windows
Release:September 21, 2026

Valheim’s ocean already has weather — waves that answer the wind, storms that raise them, a hull that takes damage in a seaway. What it doesn’t have is water. Nothing moves. A karve left at half sail on a fixed heading arrives exactly where geometry says it will, every time, in every part of the map.

Undertow gives the sea its own motion. Currents run across the ocean in a shape you can learn: a slow basin drift, a stream that follows the coast, fast water between close islands, and dead water behind a headland. They carry what floats on them.

No map, no HUD, no icons. The sea tells you itself, or it doesn’t tell you at all.


What It Does

🌊 The Sea Has A Shape

A current field spread across the whole ocean, built from a stream function — so the flow is divergence-free, the way real water is. Gyres, races and slack water all fall out of the same mechanism rather than being placed by hand.

  • The drift — slow, basin-scale, the thing you plan a long voyage around.
  • Coastal set — a stream that follows the shore, with a slight push toward it. This is why you don’t doze at the tiller with the coast downwind.
  • Races — water accelerates between close landmasses. A narrow gap is fast water, in one direction, and a 300m strait counts as much as a gap between rocks.
  • Slack and eddies — where opposing arms meet, the water goes dead. Things collect there.

📡 The Same Ocean Everywhere, Without Streaming It

The field is a pure function of the world seed, the position, the world clock and the season. Two players a thousand metres apart compute the same water and never have to agree about it — verified by a server and a client independently producing identical readings for the same points. No per-tick traffic, no save file.

That argument only holds while the tuning matches too. A server that raised its current speed and a client that did not were computing two different oceans from one seed — and since drift is applied by whichever peer owns a hull, those two players genuinely sailed different seas, with nothing desynced and nobody able to tell. So the server now publishes its thirteen gameplay dials on a thirty-second heartbeat, and a client adopts them in memory for the session. Your config file is never written to, never backed up and never touched: leave the server and your settings are exactly as you left them. Frame-rate settings — visual refresh, logging, flotsam — stay yours, because those are your machine’s business, not the server’s sea.

🌒 Tides

A slow flood and ebb on a configurable cycle. It swings how hard the open ocean runs and reverses the coastal stream, so the passage you know changes its mind on a cycle that runs two in-game days by default. Departure time becomes a decision. (The ebb-side push toward shore was fixed to actually point toward shore in 1.0.0 — it had pointed the wrong way for half of every tide in every version before 1.0.0.)

⛈ Storm Surge

With Ragnarok’s Wrath installed, the water rises where a Devastating Storm stands — there and nowhere else. A sheltered passage stops being sheltered while the storm sits over it. Entirely optional: without it the bridge logs its absence once and the sea runs regardless.

⛵ Boats Are Carried, Never Braked

A hull under way — paddle or sail set — feels the current as drag relative to the water: sailing into it costs you exactly the water’s speed over the ground, sailing with it pays exactly that, and your speed through the water is never touched, on any hull. (Earlier releases pushed against a hull driving upstream as a flat force, which could stall a paddled karve in as little as 0.2 m/s of current; fixed in 1.0.1, and tunable through the new UnderWayDragFactor.) A boat left drifting settles at the water’s own speed: a karve, re-measured on Valheim 1.0.15, reads 0.99–1.00 against the water’s 1.0, with or without Njord and Sailing installed. A karve and a longship measured together before Valheim 1.0 read 0.86 and 0.96 — two hulls that damp very differently, both near the water’s speed; the longship has not been re-measured since. A hull also resists sideways drift more than forward drift — a current on the beam moves you less than one off the bow — which falls out of Valheim’s own per-hull damping rather than being imposed, and differs from hull to hull.

Boats with nobody aboard are not touched by default. Vanilla already damps an unmanned hull almost to a stop, and a moored longship wandering off while you are away is not a feature.

🪵 Flotsam

Currents converge, so things gather. Driftwood, cargo and what the drowned no longer need collect in slack water — a second reason to know where the sea goes quiet.

Uses only vanilla items, never a new prefab. Capped, reclaimed on a timer, and spawned only near a real player: an empty ocean stays empty.

🏊 Swimmers

The current carries a swimming body too, gently — and it is hard-capped below swim speed. You can always out-swim the water and reach shore. That is a safety property rather than a balance dial, and it is enforced across every setting the config permits.

🌫 The Sea Shows Its Set

Faint foam streaks lie along the current on the water itself, moving at the water’s own speed and riding the swell — thick in a race, sparse at a trickle, and never quite gone in slack water — a faint minimum stays, because bare water is also what a broken feature looks like, and a slack pocket is not a fault. From a drifting hull they hold station; under sail they stream past at the crab angle, which is the set. Nothing states it as a number: no arrow, no HUD element, just the same foam a sailor would read off real water.

Client-side and cosmetic — it changes nothing about how a boat or swimmer moves, is never networked or saved, and a dedicated server ignores it. Fog, distance, open water and night all dim it on their own — night dimming follows the sky’s own fog colour rather than the ambient light, and how much brightness the foam keeps at full night is a dial, DriftLineNightFloor (0.7 by default) — and it turns off with one config switch.


Technical Specifications

Parameter Detail
Runs On Client & Server — one DLL, both roles
Target Runtime BepInEx 5.4.2350+
Engine Target Valheim (Unity Engine)
Current Version 1.0.1
Network Cost No per-tick traffic — the field is recomputed from the world seed on each machine; the server publishes its tuning on a 30-second heartbeat
Optional Companion Ragnarok’s Wrath, for storm surge

The wake Console

Command Answers
wake status What this machine is, what’s running on it, your config’s layout version, and whose tuning you’re sailing under — the server’s or your own
wake here The current under your keel — speed, bearing, depth, tide
wake field <x> <z> The current anywhere, loaded or not
wake drift Whether the current is actually reaching boats
wake floats Which item prefabs carry Floating — the flotsam palette
wake lines Whether the current is showing on the water, and what it costs

Turn on VerboseLogging and the log carries a boot-time transect of your seed’s ocean, plus a running readout of drift while you sail.


Installation

Drop Undertow.dll into BepInEx/plugins/ on the server and every client. Boat physics runs on whichever machine owns the hull — a player’s — so a server-only install pushes nothing.

Config appears at BepInEx/config/com.raveniron.undertow.cfg; every system has its own switch, and every rate, cap and threshold is tunable. You don’t have to keep it identical across machines: the field is recomputed independently on each one, but the server publishes its gameplay tuning and every client sails by it for the session, so two machines with different settings still sail the same water. Per-machine settings — drift lines, logging, flotsam — stay yours, and your own config file is never written to.

Your settings survive an update. When a release changes a default, your file is read before anything binds and a backup lands beside it before any value is touched — anything you set yourself is kept exactly as you left it.


Plays Well With

Ragnarok’s Wrath (Raven Iron) — detected automatically. Storms raise the sea where they stand and the season shifts the drift. Optional; absence is logged once and changes nothing else.

Seasonality and Seasons — never touched. Undertow selects no environment, reads no season directly, and modifies no material.

Njord (Wubarrk) and Sailing (Smoothbrain) — measured together on Valheim 1.0.15: a drifting karve settles at the same speed with them installed as without, and Njord’s per-hull speed cap and the current coexist without a judder. Njord changes the hull’s handling, Sailing its propulsion, Undertow the water.

Boat stat mods in general should compose for the same reason: they change the hull, Undertow changes the water.


What It Deliberately Is Not

No map, no compass, no wind gauge, no HUD of any kind — the drift lines are the sea, not an instrument: nothing is drawn in screen space and nothing reads the current out. No new prefabs, assets or bundles. No second wave system and no weather — vanilla and the season mods own that ground. No boat rebalancing and no new ship types. Undertow changes the sea and nothing else.


Download on Hexium →

Part of the RavenIron Suite

With Ragnarok's Wrath installed, the sea rises where a Devastating Storm stands — there and nowhere else — and the season shifts the drift. Optional: without it, Undertow logs the absence once and the ocean runs regardless.