SailwindCoop
Play Sailwind with friends over Steam, LAN or VPN. Shared sailing, shared wallet, mod list check, gestures, crew sleep and deck dice.
| Date uploaded | a week ago |
| Version | 0.8.0 |
| Download link | pander33-SailwindCoop-0.8.0.zip |
| Downloads | 64 |
| Dependency string | pander33-SailwindCoop-0.8.0 |
This mod requires the following mods to function
BepInEx-BepInExPack
BepInEx pack for Mono Unity games. Preconfigured and ready to use.
Preferred version: 5.4.2100README
⚓ Sailwind LAN/Steam Co-op
A co-op multiplayer mod for Sailwind: sail one world together with up to four friends, over a local network, a VPN, or Steam.
Current Version: 0.8.0 Wire Protocol: 106. Every machine needs a build with protocol 106. Requirements: BepInEx 5.x, Sailwind 0.40 (0.40.1 supported)
The mod is in early development (v0.8.0). Expect bugs, and please report them.
Features
- One shared world: the host's save is sent to every guest; boats, items, weather, waves and the time of day run on the host, so everyone sees the same sea under the same hull.
- Sail together: sails, winches, rudder, anchor, mooring, hatches, pumps and repairs work from any player's hands.
- Shared items: cargo, food, cooking, lamps, crates, fishing, instruments and foraged mushrooms and coconuts are the same for the whole crew.
- Missions and money: delivery rewards are split, or the crew shares one wallet; money can be handed from player to player (hold H).
- Sleep: rest alone in a bed, or skip time together when the whole crew is asleep.
- Crewmates you can see: avatars that walk, swim, lie in bed and hold what they carry, with footsteps, belt items and burning lanterns; a gesture wheel (hold G).
- Deck dice: a folding dice table for 2–5 players, with optional coin stakes.
- Join from the game's own menu: Co-op on the title screen joins, Co-op in the Escape menu hosts; games on your local network are listed by themselves.
Guest character progress (needs, belt, money) is kept in a local co-op profile on each guest's machine. Gameplay details are in MULTIPLAYER_GUIDE.md.
Installation
- Install SailwindCoop and its dependencies through your Thunderstore mod manager.
- Start Sailwind from the modded profile and press F8 for the co-op menu.
- For a manual install, first install BepInEx 5 for Windows x64 into the folder with
Sailwind.exe, then extract this package intoBepInEx/plugins/SailwindCoop/.
How to Play
Host: load your save, press Escape -> Co-op -> Host this world (or F8 -> Host a game). Give your friends your IP address (Copy address), or switch the menu to Steam first so Steam friends can join without one.
Join: on the title screen choose Co-op. A game on your local network appears under
Games on this network; otherwise type the host's address (ip or ip:port) and press
Join. The host's world is sent to you and loaded into the co-op save slot (slot 5 by
default; a world of your own in that slot is replaced). Joining from a loaded world saves it
first and asks before leaving.
Leave: Escape -> Co-op -> Disconnect, or F8 -> Disconnect.
The Crew section of the menu shows each player's state, ping and boat; the host can lock the session or remove a guest. Teleport to boat puts you back on deck if you fell overboard.
Finding your IP: on the same network, run ipconfig and take the "IPv4 Address" (usually
192.168.x.x). Over a VPN (ZeroTier, Hamachi, Tailscale and the like), use the address the VPN
gives you. Over the internet without a VPN, the host must forward UDP port 7777. Playing over
Steam needs no address: see Playing Over Steam.
Configuration
BepInEx/config/com.sailwind.coop.cfg, created on the first start; every setting is described
in the file. The ones most often changed:
| Setting | Default | What it does |
|---|---|---|
Network.PlayerName |
Player | Your name in the crew list |
Network.Port |
7777 | UDP port the host listens on |
Server.MaxClients |
4 | Guests allowed besides the host (1–4) |
Save.CoopSaveSlot |
5 | Slot a guest writes the host's world into. Its save is overwritten. |
Economy.SharedWallet |
false | Host: the crew shares the host's wallet instead of personal wallets |
Gameplay.KnockdownByItems |
true | Items thrown by other players knock you down (Space to get up) |
Steam.UseSteam |
false | The co-op menu opens in Steam mode |
Steam.FriendsOnly |
false | Steam host: only Steam friends may join, and the LAN port is closed |
UI.MenuKey / EmoteKey / GiveKey |
F8 / G / H | Co-op menu, gesture wheel, handing money |
Troubleshooting
- Friends can't connect: all machines need the same protocol (the version line above). Allow the game through the firewall on the host; over the internet without a VPN, forward UDP 7777.
- The mod does not start: check that BepInEx is installed (a
BepInEx/LogOutput.logappears after a start) and thatSailwindCoop.dllis inBepInEx/plugins/SailwindCoop/. If a notice appears on screen at start, it says what is wrong (most often a game version other than 0.40). - Other players have no model:
avatar.bundlemust be next toSailwindCoop.dll. - Lag: prefer a wired connection; the host's machine matters most.
- Reporting a bug: press F8 -> Settings -> Logging before reproducing the
problem, then attach
BepInEx/LogOutput.log(or Export report) and say which version each machine runs. Issues: https://github.com/pander33/SailwindCoop/issues.
Thanks
- jankykev — the fork jankykev/SailwindCoop, whose reports and fixes led to many of the crate, hook, sail, wave and mission fixes in this mod.
License
MIT, see LICENSE.
CHANGELOG
Changelog
All notable user-facing changes are documented in this file.
[0.8.0] - 2026-11-07
Everyone must update to wire protocol 106. Requires Sailwind 0.40; 0.40.1 is supported.
Performance
- Shared Economy Overhaul markets use a separate reliable channel, so a delayed market snapshot can no longer block item and boat events in the gameplay queue. Repeated snapshots skip unchanged price reports and retry missing markets individually.
- Optional market, credit, mission and sail data goes only to machines that support it. Hosts without Economy Overhaul skip its credit and ownership scans.
- Consecutive item creations and removals share a registry rebuild during a network poll. Guests bind incoming item IDs immediately and reuse one scene lookup for the boat and house caches during a burst. A failed purchase confirmation is retried independently of the rest.
Fixed
-
Sailwind 0.40.1: the host no longer searches the whole scene every second for each moored rope. The game now keeps moored ropes outside the dock, and the mod finds the dock through the rope's spring instead. Works on both 0.40 and 0.40.1.
-
Economy Overhaul: guests running the mod cannot open, use or sell the host's financed cargo, including new loans made after joining. Refused actions no longer charge the host or forgive a sale's unpaid debt. The Kicia altar also refuses financed cargo on guests before sacrifice effects or consumption.
-
Market stock and currency rates reconcile immediately after a trade acknowledgement, including replies with no changed values after compensating crew trades.
-
Returned or seized boats ignore late movement packets instead of becoming frozen copies again.
-
Refused shop sales leave shared items in place. Economy Overhaul shelf purchases sync regardless of patch load order, and a guest's buyback clears the seizure in the host's save.
-
Paid shop purchases still sync if a later market or UI update fails. A guest can resell an item before its host id arrives and the host removes it once the purchase is acknowledged.
-
Passing or dropping a fishing rod preserves its latest fish, line state and simulation timers before the new owner starts simulating it.
-
Reordered player and held-item poses preserve short visits to another deck, including a return to the original support. Carried anchors and mooring parts retain their previous support until the carrier's playback reaches the crossing.
-
A stalled pose history resumes from fresh snapshots instead of blocking movement. Historical held poses reach other observers even when the host has already played them.
-
Shipyard Expansion: sail angle, jib flip and sail texture now follow a refit to the whole crew, and a guest's refit no longer leaves the host's save with the previous sails' settings.
-
Towable Boats: towed boats no longer drop out of sync for guests during a shared sleep, and a tow line is tied to the right cleat on a moving boat.
-
Anchor Improvements: an anchor thrown by a guest now flies for everyone instead of dropping at their feet.
-
Economy Overhaul: a guest no longer pays the host's loans or loses the host's ships to them; loans, rentals and bankruptcy are the host's. Ships rented, returned or seized change owner for the whole crew. Trade book purchases and sales of a guest, in bulk and through hired carts, reach everyone. Mission modifiers survive a guest's accept, and a guest's plank repairs and pole bracing work. Markets, prices, demand events and currency rates are the host's for the whole crew, and a guest's trades change them, so the shared wallet can be used with the mod.
-
Bilge pump handles now show the operator's actual movement to the crew. Holding the handle still leaves it still, and guests drain water at the rate they actually pump.
-
Guests see a deck hatch start moving as soon as they click. The host still confirms the hatch state and its walk collider.
-
Held items use the same playback time as their remote carrier. The host forwards the original sample time to keep hands and carried objects together.
-
Ship movement, rudders and booms use adaptive playback on guests. The crew and their held items change support at the recorded time when stepping between the deck and shore.
-
Fishing rods and chip logs synchronize from join. Bobbers and lines follow the original sample time and older packets cannot rewind a newer sample.
-
Instrument playback stays continuous when ownership changes. A delayed drop state cannot overwrite a later pickup, and reordered player poses preserve brief intermediate deck crossings.
-
The host spreads a guest's rowing and pushing over physics steps, preserving the effort and torque of short strokes and holding the point of application relative to the hull.
Added
- The joining player is told when a setting of another mod that changes the shared world differs from the host's (Shipyard Expansion, Towable Boats, Anchor Improvements, Economy Overhaul), in the F8 Mods section and the log. The join goes ahead. A guest with Economy Overhaul joining a host without it is warned that the mod will treat the world as a first installation.
- Export report lists plugin DLLs that the loader did not start.
- Liar's Dice for 2–5 players, selectable by the table owner in the lobby alongside Three Rounds. Start with five dice each, raise a bid or call a bluff, and lose one die when wrong; the last player with dice wins. Ones are not wild.
- Hold P or the right mouse button in close view to peek at your own dice. Other hands are sent only when a bluff is called. All hands stay visible until the crew starts the next round.
- Liar's Dice uses the existing stakes, pause, reconnect and match journal. Old journals remain readable; new journal files store the game mode.
[0.7.1] - 2026-11-04
The protocol is still 96: 0.7.1 plays together with 0.7.0, but updating is recommended.
Changed
- The mod costs about half as much frame time on the host and a third less on a client. The periodic searches through the whole scene for items, lights, wind orbs and boat hulls are gone, and the longest frames on the host are about 3 ms shorter.
- The mod's hooks that run every frame no longer make garbage on each call, so the game's garbage collection, a short hitch of a few milliseconds, should come less often, most of all on a client.
- A message to every client is written once instead of once per client, and the host sends the periodic item state in four parts instead of all at once.
- The mission journal reaches clients within a quarter of a second of a change instead of in the same frame.
Fixed
- The anchor winch handle no longer spins on the other machines while a player carries the anchor.
- An item the host takes from its belt is reliably shown in the host's hand on every client.
- An item a client holds moves smoothly on the host's screen and stays in the avatar's hand, instead of moving in steps and running ahead of the hand.
- A rope a client moors to a post is shown on the post on the host's screen too, instead of hanging in the air where the client's hand was.
- A boat bought at a shipyard becomes bought for everyone in the session. Since game 0.39 the purchase stayed on the buyer's machine.
- A shared sleep in house beds lasts until morning, as a house bed does in the game, instead of ending after four and a half hours.
[0.7.0] - 2026-11-03
The protocol is now 96: every player must update. Earlier builds cannot join a 96 host.
Sailwind 0.40 is now required.
Added
- Foraging (new in Sailwind 0.40) works in co-op: a mushroom or coconut picked up by one player disappears for everyone else and becomes a shared item, and the spot comes back at the same time for the whole crew.
- The items in another player's belt hang at the belt of their avatar, and a burning lantern on the belt lights the deck for everyone.
Fixed
- The cranks of the winches turn for everyone: a winch the host cranks is now seen turning on a client instead of standing still, and one a guest cranks no longer jumps on the host's screen. The handle angle follows the rope length on each machine, so neither side waits for a pose packet. A host grabbing a winch a guest had just cranked no longer makes the rope length jump.
- An item the host put into its belt and took out again no longer stays invisible for a client that had once taken the same item out of its own belt.
- While a client carries an item on deck, the host no longer takes it out of the boat a few
times a second, which flooded the host's log with
ExitBoatlines. - Yards, booms and the rudder move smoothly on a client: their angles are played back from the host's timeline instead of jumping to each packet, and the host sends them more often.
- The wind on a client changes smoothly between the host's updates instead of in steps, which showed in sails, flags and the wind sound.
- When a guest unseals a crate, the host no longer hears the seal break.
- Belt items of another player hang at the hips on avatar models whose skeleton has no
Hipsbone, instead of at the feet. - A client's log is no longer flooded with PhysX warnings about kinematic bodies when it receives the host's items.
- Sails and yards no longer shake on a client: the game's sail physics no longer fights the pose the host sends.
- The sea a client sees follows the host's even when the host is asleep alone or far from the client: the height of the inertia waves now uses the host's distance to land and sleep state.
- A mug or bowl the host sets down no longer falls over and spills on the other players' screens.
- An item taken off a lamp hook on another player's machine no longer freezes in the air when dropped; a client can no longer hang a second item on a hook the host already uses.
- A good a client buys is ordinary stock for the host too, not cargo of the first mission. A mission good taken from a belt slot keeps its mission and its state.
- A crate a client bought can only be unsealed once the host knows it; unsealing it earlier created contents the host never had. Items inside a crate keep pointing at it when it gets the host's id, and the crate window no longer drags extra items to hidden slots.
- Dirt sync skips objects that have no dirt texture instead of failing every half second.
- Goods whose mission slot names another product are treated as ordinary stock.
Many of these fixes come from the reports and fixes in jankykev's fork (jankykev/SailwindCoop). Thank you!
[0.6.0] - 2026-10-18
The protocol is still 92, so 0.6.0 connects to 0.5.0 - 0.5.3. Everything new works on the machine that has it: the menu is your own, only a player on 0.6.0 can be knocked over, and the boat fix is the guest's. Update every machine anyway.
Added
- Co-op in the game's own menu: Co-op on the title screen joins a crew (games on this network, Steam friends, join again, join by address), and Co-op in the Escape menu hosts the loaded world, shows the session and ends it; in a world without a session it also lists the games to join, so a player whose session ended can join again from there. The F8 window stays for the other settings.
- An item another player throws at you knocks you over: you fall, and Space gets you up. The
others see you lying on the deck. Turn it off for yourself with
Gameplay/KnockdownByItems.
Fixed
- On a guest's machine a boat's body could stay behind its hull: the wake, foam and hull sounds did not follow the boat, and after a disconnect the boat was left without its physics.
[0.5.3] - 2026-10-11
The protocol is still 92, so 0.5.3 connects to 0.5.0, 0.5.1 and 0.5.2. Update every machine anyway: each fix works only on the machine that has it, and with an older build in the session firewood in a stove and a tilted pot of soup still behave the old way for that player.
Fixed
- A guest filling a bottle, a kettle or a pot from a barrel got the water, but the barrel stayed full.
- A mug or a bowl a guest put on a table stood tilted for the other players, fell over and spilled.
- A crate could be thrown about after it was opened: its window kept dragging back the items another player had already taken out.
- Soup in a pot a guest carried did not spoil, and its freshness jumped back when the pot was put down.
- The Debug panel's island teleport could capsize the host's boat and throw it away once the game went on. The boat is now moved the way the game's own recovery moves it and ends up moored at the port.
- A guest's copy of a boat could take hits, waves over the side and a leak of its own and sink while the host's boat was whole. A guest's game no longer counts them; they come from the host.
- Firewood put into a stove stayed a loose item for everyone but the player who put it in: it lay beside the stove, could be picked up while burning and did not move with the stove. It now sits inside the stove for every player.
- A pot of soup tilted in one player's hands was also spilled by every other player's game that saw it, so it emptied faster than it should. Eating soup could also drop the frame rate.
- A guest now hears a kettle boil, and a stove's "1 / 1" firewood text is the same for everyone.
- Much less network traffic with food aboard: every piece of food and every burning lamp used to be sent to all players twice a second for the whole session.
- When a guest broke the seal of a crate, the crate's contents window opened on the host's screen and not on the guest's. It now opens for the player who unsealed the crate.
- The Debug panel's island list missed five ports (Dragon Cliffs, Fort Aestrin, Serpent Isle, Saffron Island, On'na) and had nine entries that led nowhere. Every port of the game is listed now; On'na has no place for a boat in the game and takes a player on foot only.
[0.5.2] - 2026-10-10
The protocol is still 92, so 0.5.2 connects to 0.5.0 and 0.5.1. Update every machine anyway: each fix works only on the machine that has it.
Fixed
- A player who joined from a loaded world and was then recovered (passed out from thirst or hunger, or Recover in the Escape menu) stayed on the dark "recovering..." screen for ever.
- A recovery that cannot finish is now ended after two minutes instead of keeping the screen dark.
- A guest's recovery no longer casts off the ropes and resets the anchor on its own copy of the boat. With a shared wallet its fee comes out of the guest's own money, not the crew's.
- After the host's teleport the sea could look different to the host and to a player right next to it. Players who came along now take the host's world origin.
- A player being recovered no longer counts as lying down for the crew's shared sleep.
Changed
- When the host is recovered, the boat goes to the port with whoever is aboard, and the game pauses for everyone for about a second and a half, as it does after a teleport. A guest recovered aboard stays on the boat.
[0.5.1] - 2026-10-10
The protocol is still 92, so 0.5.1 connects to 0.5.0. Update every machine anyway: the two versions handle a teleport differently, and in a mixed crew the sea can look different to each player after one.
Fixed
- A crew member standing on a sailing boat no longer rises above the deck and sinks into it in the eyes of the others.
- After Teleport to boat, or a teleport from the Debug panel, the picture shook and the shadows jumped for minutes. The world now settles at once.
- The Debug panel's teleports moved the hull without the rest of the boat and left it moored.
Changed
- When the host teleports, the game pauses for everyone for about a second and a half while the boat's new place and the sea reach the crew.
[0.5.0] - 2026-10-10
Everyone must update. The protocol is now 92: 0.5.0 cannot connect to 0.4.3 or earlier.
Added
- Dice tables can also be placed on level piers and island ground, using shared world coordinates.
- Deck dice: a folding table with three dice, a cup and a score board for two to five players; three rounds with one optional reroll, pair +4, triple +12. Everything is done at the table: the hint under the crosshair says what the pick-up and use buttons do. Players who do not sit down see the same rolls and score.
- The table is set up from the gesture wheel (
G, Dice table). One table per player, one per boat, five in a world. A table is not saved with the world and leaves with its owner. - A party can be paused and resumed, a player who reconnects returns to the same seat, and the score board shows the rules and the history of finished parties. The history belongs to the world: it follows the save, its backups and its copies, and a new game starts an empty one.
- Close view of the dice table: sitting down brings the table close and frees the cursor, and the
table is played with the mouse buttons.
Topens and closes it (UI.DiceViewKey);Dice.CloseUp = falseleaves it to the key. The other players see no difference. - Optional stakes in coins, enabled by default (
Dice.AllowStakes, personal wallets only). Existing configs retain their saved value; setAllowStakes = trueunder[Dice]to enable them if previously disabled. - Reconnecting has been reworked. Joining or reconnecting from a loaded world now goes through the main menu and a full reload: the game leaves the current world, returns to the title screen and loads the host's world from scratch. It does this by itself; the game does not have to be restarted.
- A Steam host sees their Steam ID and the Copy ID button while hosting, not only before it.
- A join refused because the two builds cannot play together now says so: which side has the older mod and who has to update. A host that still runs 0.4.3 or older refuses without a reason; the message then says that the versions most likely differ.
- The crew card of the
F8menu notes when a crewmate plays with a later version of the mod that can still play with yours. Nothing is checked on the internet and nothing is installed. - A full session now refuses a join with "the session is full".
- The other players are heard: their footsteps on wood, sand, stone and in shallow water, a step when they land from a jump, and their swimming, all from where they are and fading with distance. The sounds are the game's own.
- Games on the local network are found by themselves: the LAN tab of the
F8menu lists them above the address field, each with the host's name, crew size, address and a Join button. A host with another version of the mod is listed with the reason it cannot be joined. Typing an address still works. A host can stay unlisted withAnnounceOnLan = falseunder[Server]; a host that admits Steam friends only is never listed.
Changed
-
Export report now also holds the last few hundred lines the mod would have logged, kept in memory even when logging is off, the character's needs, the game's time scale, the sleep state and the installed plugins. The file name ends with the role.
-
A Steam session is open to anyone by default, over Steam and on the LAN port (
Steam/FriendsOnlyis now off). Existing configs retain their saved value: press Anyone in the F8 menu, or setFriendsOnly = falseunder[Steam]. -
Sleep. Whoever lies down, sleeps: the time skip starts when every player lies down, rested or not (a rested crew skips time only at a mooring or ashore). A player who sleeps while someone stays up recovers at a quarter of the speed of the shared sleep, until rested instead of for a fixed time; hunger and thirst stand still. A rested player who stays in bed does not get tired, hungry or thirsty. A player who collapsed outside a bed is woken by any key, and a hit that damages the boat or water coming over its side wakes a player asleep by himself. A player woken by his own hunger or thirst during the shared sleep gets up alone; the others sleep on.
-
The
[Avatar]config section is gone: the avatar height offset is fixed, and old entries in an existing config file are ignored.
Fixed
- On a game version the mod does not support, the co-op menu key did nothing and the log was
empty. The mod now says on screen that it did not start and which game version it needs, and
writes the reason to
BepInEx/LogOutput.log. - The game's wind sound broke after a player joined: it stopped following the wind and the game wrote "Attempt to set pitch to infinite value" to its log every frame.
- During the shared sleep the host recovered much faster than the guests.
- With three or more players, the avatar of a player who left stayed in the world on the other guests' machines.
[0.4.3] - 2026-10-07
The protocol is still 89. Hosts should update: a host on 0.4.2 or earlier still refuses players with another version.
Changed
- Different versions can play together when the protocol is the same. A host on 0.4.3 or later accepts a player with any version of the mod that uses the same protocol number (shown as Wire Protocol in the README). Before, the versions had to match exactly.
- Internal cleanup of the mod list check.
[0.4.2] - 2026-10-07
Everyone must update. The protocol is still 89, but players with different versions of the mod cannot connect to each other.
Changed
- No gameplay changes. The Thunderstore package was rebuilt and its page text was shortened.
[0.4.1] - 2026-10-07
Everyone must update. The protocol is still 89, but players with different versions of the mod cannot connect to each other.
Changed
- The Thunderstore edition can play over Steam. It now has the LAN / Steam switch, the
friends list and Join Game in Steam, and its archive carries
Facepunch.Steamworks.Win64.dllandsteam_api64.dll.
[0.4.0] - 2026-10-07
Everyone must update. Protocol 89: this build cannot play with 0.3.1 or earlier.
Added
-
Hand money to another player. Look at a crewmate standing next to you and hold
H: your avatar holds out a hand with a coin. The mouse wheel changes the amount, the middle mouse button changes the currency. The other player looks at you and pressesHto take it; release the key to cancel. The key isUI.GiveKeyin the config file. -
Shared wallet. The host can switch Money to Shared in the co-op menu (F8) while hosting: the whole crew then spends and earns the host's money and sees one balance. A guest's own money is kept and comes back when the guest leaves or the host switches back to Personal.
Fixed
- An item bought in a shop stayed on the shelf for the other players, who could buy it again.
- A guest who bought an elixir, snake oil, oakum or a lamp kept it only for themselves: the host never saw the item, and for the guest it hung in the air after being put down.
Changed
- Mission rewards are divided. A delivery reward is split equally between the players who are in the world; what does not divide stays with the host. Before, every player received the whole reward. Reputation is still given to everyone in full.
[0.3.1] - 2026-10-07
Added
- Join through Steam itself. A friend who hosts over Steam has Join Game in your Steam friends list, and the host can send Invite to Game. Do it from the main menu; if the game is not running, Steam starts it and the join begins at the title screen.
Changed
- With the menu left in Steam mode, the mod now connects to Steam a few seconds after the game starts instead of when the menu is first opened. Steam can pass a join request only to a game that is connected to it.
- Friends only on a Steam host now also closes the LAN port: only Steam friends can join. Anyone accepts players by Steam ID and LAN players on the UDP port. The button applies to a session that is already running; players who are in stay.
- A Steam player removed with Kick cannot rejoin until the host starts a new session.
- Sessions over Steam wait 12 seconds without packets before dropping a player, instead of 5.
- A locked or full Steam session is no longer shown to friends as one they can join.
Fixed
- A Steam host could stop hearing a player after a connection failure until hosting was restarted.
- Joining over Steam now fails at once when Steam reports that the host is not in the game, does not own it or is offline, instead of waiting half a minute.
- Quitting the game during a Steam session is seen by the others at once, not after a timeout.
- A guest refused by a Friends only host is told that this is a possible reason.
Network
- Everyone must update. The protocol is still
86, but0.3.1and0.3.0refuse each other at the handshake because the mod version differs.
Not yet verified in game: every Steam change above (it needs two PCs with different Steam accounts).
[0.3.0] - 2026-10-06
Added
- Other mods are compared when joining. Before the world is sent, the host tells the joining player which other BepInEx mods it runs. With the same mods nothing changes. Otherwise the F8 menu opens a Mods section listing what is missing or different, with Join anyway and Cancel.
ModSyncExcludelists plugin GUIDs that are never compared (the XUnity translator by default).- The crew list shows
Modswhile a joining player is comparing mods. - Play over Steam without an IP address. The F8 menu has a LAN / Steam switch. In Steam mode the host is reachable by Steam ID, and a joining player sees Steam friends who are in the game, with Join next to a friend who is hosting. No port forwarding or VPN is needed. Steam must be running, and each player needs their own Steam account that owns Sailwind.
- A Steam host still accepts LAN players on its UDP port. LAN play itself is unchanged and does not need Steam.
- By default a Steam host accepts only Steam friends (
Steam/FriendsOnly, the Friends only button). - The mod now ships two more files that must sit next to
SailwindCoop.dll:Facepunch.Steamworks.Win64.dllandsteam_api64.dll. - Teleport to boat. A button in the F8 menu puts you back on the deck: where you last stood, next to the crew, or amidships. For a player who fell overboard or was left ashore.
Changed
- The F8 menu was redesigned. It now shows only the session (connection settings, or the running session), the crew and Teleport to boat. Avatar, the status overlay, logging, reports and the debug panel moved under a Settings section that is collapsed by default. The window is as tall as its content.
- Joining over a slow connection pauses the host for less time. The world sent to a joining player is now compressed to about a quarter of its size.
Fixed
- Goods no longer look like mission cargo on a guest. A good the host got during the session (bought at a market, or cargo of a mission in a slot other than the first) showed the destination and due date of the first mission on a guest's screen. The guest now gets the mission slot of each good from the host.
- Goods created with the debug item spawn are ordinary goods, not mission cargo.
- Other players' arms follow what they do. An avatar now reaches for the item it carries and puts its hands on the winch, wheel or rope the player is holding. Not yet verified in game.
- Gesture wheel. Hold
Gin a session, pick a gesture with the mouse and release: Wave, Land ho!, Point, Come here, Applause, Shrug, Salute, Hooray. "Land ho!" shouts, and other players hear it from where you stand. The key isUI.EmoteKey; it is shown in the F8 menu and in a one-time on-screen hint. Not yet verified in game. - Sleep waits for the whole crew. Time is skipped only when every player is in a bed. A player who lies down alone, or collapses from exhaustion, sleeps by himself: his screen goes dark, he recovers at the usual sleep speed and does not get hungry or thirsty, while the world keeps going for the others. Not yet verified in game.
- Fixed: during a shared sleep guests lost food and water about 16 times slower than the host.
- Players lie in their beds. The avatar of a player who is in a bed lies on its back on that bed instead of standing in it. Not yet verified in game.
Network
- Everyone must update. The wire protocol moved from
80to86;0.2.xand0.3.0refuse to connect to each other.
Not yet verified in game: the comparison step and the menu section; the Steam connection (it needs two PCs with different Steam accounts).
[0.2.1] - 2026-10-05
Changed
- NPC avatar gait follows movement speed relative to the deck or ground, with smoother transitions and a limited running cadence.
- NPC avatars now use procedural crouch, look and turn poses. Crouching bends the legs more deeply and smoothly lowers the visual model along Y without moving the network root.
Fixed
- Leg movement uses model-space axes instead of assuming the NPC bones' local axes.
- NPC skin discovery includes inactive NPCs in loaded scenes and checks for skinned meshes
with bones instead of rejecting every hierarchy containing a node named
combiner.
Network
- Wire protocol remains
80. These animation changes add no fields or messages to player synchronization; bone poses and crouch height are calculated locally.
[0.2.0] - 2026-10-05
Changed
- Everyone must update. The network protocol moved from
57to80;0.1.6and0.2.0refuse to connect to each other. - Sailwind 0.39 is now required. The mod uses classes unavailable in older game builds.
- Every owned boat has independent controls, anchors, mooring lines, pumps, hatches and hull damage. Boats stay active on the host while any crewmate is nearby, even when the host is far away.
- The host's mission journal is mirrored by guests without mixing in missions from their profiles.
- Controls, anchors, mooring lines, hull damage, storms, items, instruments and missions are sent only when they change. Joining players request the current values once.
Added
- Guests can pick up, carry, pay out and drop anchors; everyone sees the anchor in its carrier's hands.
- Guests can start shared sleep for the whole crew.
- Guest shipyard orders for sails, parts, cleaning and repair reach the host and every crewmate. The ordering player pays once; local shipyard previews stay out of the shared world and save.
- Food preservation, spoilage, cooking progress, soup and kettle contents, fuel and stove slots travel with items. Consumption and use of food, drinks, knives, elixirs, oakum, oil and candles take effect for everyone at the same moment.
- Pocket watch lids, quadrants, scroll pages, chip log lines and fishing rod state are visible to other players, including the line, bobber, rod bend and hooked fish.
- Chart drawings are shared, survive late joins and persist in the host's world save. Folding and unfolding maps and furniture is shared.
- Hull scrubbing removes the same dirt for everyone, stroke by stroke.
- Wind totem orbs are visible in another player's hands; guest casts change weather for the crew.
- Sailwind 0.39 tobacco packs can be cut by guests, house doors are shared with late arrivals, and sleeping in house beds skips time as in single player.
Stability
- Failed game hook groups disable only the affected feature and name it in an on-screen notice.
- Character profiles and received world saves use atomic writes with backups. Readable backups are recovered; unreadable profiles and incompatible save versions stop the join with a message.
- Packets are accepted only from handshaken peers and in the expected direction. Snapshots too large for one datagram are delivered reliably.
- Unanswered requests are abandoned after five seconds instead of blocking the object indefinitely.
- Lamps retain their identity when item lists are reordered; late packets cannot resurrect destroyed items.
- Fixed guest winches failing on every control update due to an inactive steering wheel check.
- Fixed guests being unable to release mooring ropes or length coils and pick them up after dropping.
Reporting problems
Enable F8 → Logging before reproducing a problem and attach BepInEx/LogOutput.log
plus an Export report file.
[0.1.6] - 2026-09-22
Added
- AI ships are now the same ships for everyone. Until now every machine sailed its own private fleet: a trader the host was passing simply was not there for the guest, and a wreck the host had rammed was still afloat on the other screen. AI ships now run on the host and are mirrored to everyone, sails and all.
- AI ships stay alive around any crewmate, not just the host. The game normally freezes a ship once it is far from the player, which meant a guest who sailed ahead met motionless hulls; the range is now measured to whichever player is nearest.
- The F8 menu now shows the whole crew with loading/ready state, individual ping and current boat.
- Hosts can close the session to new players and remove a connected guest. Rejected or removed players receive a readable reason instead of a generic timeout.
- Short co-op notifications report joins, readiness, departures, session access, anchor and sleep events.
- A previously connected guest can reconnect from the main menu with one button; reconnect still performs a full safe world join rather than trying to merge into an already loaded client world.
- Export report writes one bounded diagnostic text file with protocol/session/crew/join state and recent warnings, even when normal logging was off.
Fixed
- A mission cargo delivered by a guest now counts for the whole crew: the host's mission journal advances, and the payout reaches the host and every guest. Before, only the delivering guest's own screen counted it.
- A guest standing near the host while the host delivered cargo is no longer paid twice for it.
- A guest joining a host who owns several boats no longer sees two boats stacked in one place. When the host had sailed far away from one of their boats, the guest's copy of that boat was dragged onto the host's current ship (and players or items could end up on the wrong hull). Boats are now matched by their save identity instead of their order in a scan, and a guest's boats stay untouched until the host's world has finished loading.
- A guest's money and reputation are now kept when the connection drops (host quits, network timeout). Before, they were saved only on an F8 disconnect or when quitting the game while still connected.
- Hosting or joining again without disconnecting first now closes the previous session cleanly, saving the guest's progress and freeing any join that was still queued.
- Cargo carried by a guest should no longer stay behind on the host's screen at the spot where it was picked up. If it still happens, the log (with logging on) now records why.
Notes
- The wire protocol moved from
53to57, so every machine must be updated together again. - Trading vessels that carry goods between ports are not covered yet — they are part of the economy rather than the sea traffic, and their prices are already settled by the host.
[0.1.5] - 2026-08-13
A stability release: joins that finish cleanly, boats and items that stay where they belong, a sea that is the same sea on every machine, and a mod that is quiet unless you ask it not to be.
Added
- The co-op menu now reports problems that previously only reached the log file: a joining player who never finished loading, an unreadable or missing host save, a client rejected because the host has no world loaded, and a world that was un-paused automatically after a join. If something goes wrong during a join, the reason is on screen.
- Logging can be switched on and off from the F8 menu at any time, without restarting the game.
Changed
- Logging is now off by default. A normal session writes nothing to
BepInEx/LogOutput.log. Turn it on from the co-op menu (F8 → Logging) when you need to diagnose something or report a bug; the choice is remembered in the config file. Serious errors are still written even with logging off — a few lines, never a flood — so a broken installation can never look identical to a healthy one. - Debug tools are hidden unless explicitly enabled in the config, so a public build no longer exposes them by accident. The menu says which mode it is in.
- Joins are now handled one at a time. If several players connect at once, each waits its turn for the world transfer instead of the transfers overlapping; the queue releases itself if a transfer stalls, so one bad join no longer blocks everyone behind it.
- Fewer scene-wide searches per frame while sailing, which removes a source of stutter — and with it the frame hitches that could drop a player through the deck.
Fixed
- Fixed boats sinking into the waves on the client. The ocean ran on each machine's own clock, and the shape of a wave is a function of that clock — so the host placed the boat on a crest at a spot where the client was drawing a trough, and a passing wave swallowed the hull. The client's sea now runs on the host's clock, and so do the size and direction of the waves, which each machine used to decide for itself on its own free-running weather cycle. The water is also drawn at the same instant as the boat itself (the hull is rendered slightly in the past to smooth out network jitter; the water used to be drawn at the present moment) and no longer lags behind by the connection's latency.
- Fixed the client's sea running on while the host had the game paused, and fixed the water tearing across the screen when the host un-paused with the boat below the surface.
- Fixed other players walking on the spot while the boat sails. A crewmate standing still on deck was shown marching (and turning, when the ship came about), because the mod worked out whether someone was walking from how fast their position changed — and on a moving ship, the ship's own motion counts. Walking and turning are now measured at the source, against the deck the player is actually standing on.
- The client is now held still while the host has the game paused. Opening the host's menu stops the host's world, but a guest could still walk around it, step off the ship or fall in the water. Guests are now frozen for the duration and told why on screen; they are released the moment the host resumes, or if the connection drops.
- Fixed a joining player being attached to the wrong boat. While the world was still spawning boats, a boat could briefly answer to another boat's number, and a guest could be teleported onto — or have their view locked to — a hull that was not theirs. Boat numbering is now withheld until it is proven stable on both machines.
- Fixed items jumping to the player. Items carried on a deck could snap to whoever was looking at them for a fraction of a second after the boat set changed (most visibly right after buying a boat).
- Fixed the world staying frozen after a player joined. If the host opened the game menu during the join freeze and closed it afterwards, the world could end up paused with nothing left to un-pause it, which needed killing the game. This is now detected and undone automatically.
- Fixed a join un-pausing the game behind an open settings menu. Joining while the host already had the game paused no longer resumes the world, and no longer changes physics settings owned by that menu.
- Fixed a guest being left behind when the client's boat snaps into place on join. The player is now carried with the deck in the same step, instead of the boat moving out from under them.
- Fixed mooring ropes and deck controls going unresponsive for about three seconds after a boat was bought or the boat set otherwise changed.
- Fixed remote players sometimes taking up to half a second to appear after a world finished loading, including after the host reloads a save or leaves a shipyard.
- Fixed a stalled world transfer holding the host frozen until the two-minute safety timeout, and fixed a transfer cancelled by a disconnect interfering with the next player's join.
- Fixed failures inside the mod's own error handling going unreported, which could leave a subsystem silently doing nothing for a whole session.
Notes
- The wire protocol moved from
47to53. Every machine must be updated together —0.1.3and0.1.5cannot connect to each other. - The co-op menu gained a Dump water state button. Press it on both machines at the same moment and
compare the two
debug/water-*.txtfiles if the sea ever looks different on one of them. - The water fixes and the two player fixes are verified on two machines: the client's ocean clock now
matches the host's to a few milliseconds, the wave field matches exactly, crewmates stand still on a
sailing deck, and a guest is held in place while the host has the game paused. The rest of this release
is verified by code review only — please report anything that behaves differently from
0.1.3with logging switched on.
[0.1.3] - 2026-07-07
feat(sync): Enhance player synchronization and item handling
- Improved player synchronization on boats by stabilizing local positions and adding a fallback mechanism for boat detection.
- Introduced a new PatchHealth reporting system to monitor the success of various synchronization patches across different game systems (Save, Shop, Shipyard, Sleep).
- Added comprehensive item synchronization patches to ensure consistent item interactions (pickup, drop, eat, nail, etc.) across clients and hosts.
- Implemented a protocol smoke test to validate message types and ensure proper serialization/deserialization of network messages.
[0.1.2] - 2026-07-06
Added
- Added the F8 Sailwind Co-op menu for hosting, joining, disconnecting, avatar selection, diagnostics, and debug tools.
- Added a high-contrast dark menu backdrop/window background for readability in bright scenes and the main menu.
Changed
- Replaced separate F6/F7/F8/F9/F10/F11 co-op hotkeys with menu-driven controls.
- Moved the debug panel to the left side of the screen so it does not overlap the co-op menu.
- The co-op menu captures cursor input while open and closes companion Avatar/Debug panels when closed.
[0.1.1] - 2026-07-06
Added
- Added character skin switching through the avatar selection menu.
[0.1.0] - 2026-07-04
Added
- Added host save streaming for joining clients: the host sends the current world save in reliable chunks, and the client loads it into a dedicated co-op slot.
- Added a separate client co-op profile for persistent character progress across sessions: currency, reputation, needs, known prices, missions, journal data, and personal belt inventory.
- Added join-pause handling while the host save is being transferred and loaded by the client.
- Added wave state synchronization so client sea surface and host-authoritative boat position stay aligned.
- Added fishing rod cast visual sync, including bobber position, line length, and rod bend.
- Added client support for throwing, placing, hanging, loading/unloading, and inventory movement of synced items.
- Added debug tools for island teleport and expanded coordinate diagnostics in the overlay.
Changed
- Expanded item synchronization to cover more runtime state: attached/placed items, crates, cargo, inventory slots, sold goods, market-spawned goods, rod hooks, and lamp hooks.
- Improved economy, mission, and journal synchronization, including richer mission reward data and client-side trade flow handling.
- Updated the wire protocol from
39to47and added message typesSaveSnapshotBegin,SaveSnapshotChunk,SaveSnapshotEnd,ClientWorldLoaded, andRodState. - Updated documentation and project status notes for the new save/profile, item, economy, and debug workflows.
Fixed
- Fixed client purchase of trade goods in port.
- Fixed host interaction lockouts after a client unloaded items from cargo.
- Fixed client-side unloading behavior.
- Fixed moving items while the boat is underway.
- Fixed client cross-session inventory handling.
- Fixed client fastener/attachment handling.
- Fixed grill/brazier visuals turning into a white cube after pickup/drop replication.
- Fixed several fishing-related synchronization issues.
Notes
- Client world loading now depends on the host's streamed save and overwrites the configured local co-op slot on the client.
- All peers must use the same mod build because the protocol changed after
0.1.0.
[0.0.1] - 2026-06-29
Added
- Initial public LAN co-op release for Sailwind.
- Host/join/disconnect controls and diagnostic overlay.
- LAN and VPN/tunneling play support through LiteNetLib UDP.
- Host-authoritative boat, environment, controls, anchor, mooring, interaction, and player state synchronization.
- Default remote player avatar bundle:
avatar.bundle. - Basic avatar customization by replacing the included
avatar.bundlewith a compatible Unity 2019 Windows x64 AssetBundle.
Notes
- This is an early release. Save-game progress is owned by the host and is not synced as separate guest progress.
- All players should use the same mod version and install
SailwindCoop.dll,LiteNetLib.dll, andavatar.bundletogether.