Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
RavenEye
For server owners. Restores the vanilla map, to listed admins only, on no-map worlds - with every player pinned, sharing or not. Inert for non-admins joining a server; a host or solo player gets the map on their own world.
| Date uploaded | a day ago |
| Version | 0.2.2 |
| Download link | RavenIronStudios-RavenEye-0.2.2.zip |
| Downloads | 14 |
| Dependency string | RavenIronStudios-RavenEye-0.2.2 |
This mod requires the following mods to function
denikson-BepInExPack_Valheim
BepInEx pack for Valheim. Preconfigured with the correct entry point for mods and preferred defaults for the community.
Preferred version: 5.4.2360README
ποΈ RavenEye
The world has no map. The raven does not need one. It sees every fire, every footprint, every fallen warrior, and it tells only those who keep the hall.
The vanilla map, for admins only, on a world that has none, with every player on it.
For server owners. On a world running the nomap modifier, the people on the server's adminlist.txt get the ordinary minimap and large map back, exactly as the game draws them, with a pin for every player online, whether or not those players ever chose to share their position.
For anyone else joining a server, it does nothing. Nothing new is drawn, and if you remove it the world is exactly what it was.
A Valheim mod by Raven Iron.
This version is the Valheim 1.0.16 build. Nothing else is new.
| You | It |
|---|---|
| run it on Valheim 1.0.21 | its references into the game check clean against the 1.0.21 client and dedicated server; it has not yet been played on 1.0.21 |
| If⦠| Then⦠| |
|---|---|---|
| π₯οΈ | you run the server | install it on the server. Nothing happens without it. |
| π‘οΈ | you are an admin | install it on your client too, to receive the roster and show the map. |
| π | you host a world from your own game, or play solo with it installed | you are that world's admin, so you get the map. To keep a no-map run map-less, set ShowMap = false, type raveneye map off, or leave RavenEye out of that profile. |
| π§ | you made the world no-map by typing nomap |
that command also switched your own character's map off. raveneye map on clears it. |
| π§ͺ | you are installing an early release | seen working on a dedicated no-map server and on a solo no-map world. Not yet watched through: a dead player's marker holding for its full time, a second player on a listen-hosted world, and a host whose own nomap is still on. If one misbehaves, send raveneye status and the server log. |
The map you already know, with everyone on it.
| πΊοΈ Your own map | everywhere this character has walked (the game records it even on a no-map world), your pins, the large map on M, the minimap in the corner |
| π A pin per player | every other player online, moving as they move on the game's own shared-position cadence; names show when you zoom in on the large map |
| π The fallen | a player who died stays on the map where they fell for three minutes, marked "(dead)", because "help me find where I died" is the request an admin hears most |
| π Worlds with a map | nothing changes by default; players' share-position choice stands. RevealWhenMapEnabled also shows admins the players who turned sharing off. |
π Read the saga β why it does not reveal the terrain
RavenEye does not reveal the map itself. An admin's map starts with whatever that character has explored, and player pins are drawn over the fog. To see the whole world, use the game's own console: devcommands, then exploremap. It is one line and it already requires admin. The game has no way to un-explore, so that is a choice we would rather you made deliberately than have made for you.
One vanilla behaviour changes for a granted admin exactly as it would on a map world: reading a Vegvisir pins the location and opens the map, instead of turning your head toward it.
Whoever the server says. There is nothing to configure.
| π The server's own list | RavenEye reads adminlist.txt with the same check the game uses before it honours a remote console command, a kick or a ban |
| β±οΈ Seconds, not restarts | add an ID and they have the map within a few seconds; remove it and the map is gone within a few seconds |
| π Nothing to forge | a client cannot ask for the map, cannot claim to be an admin, and never sends the server anything |
π Read the saga β how the roster travels, and what it cannot promise
The server sends the roster to each admin over that admin's own connection, the one channel no other client can address, so no other player can intercept or forge it. The roster carries a name, a character id, a position and a dead flag, and nothing else.
The map unlock is on the honour system. The game keeps its no-map rule in a single flag that any client mod can flip in one line, with or without RavenEye. What RavenEye actually protects is the roster: the positions of players who are not sharing them, which only the server can supply, and which it supplies to admins alone.
A pin is where the server last saw a player. That position is reported by the player's own game, roughly every two seconds. It answers "where is everyone", and it is not evidence for a moderation decision.
Whoever runs the world gets the map on it, and any admin can turn it down.
| π Hosts and solo players | the game treats the one running the world as its admin, and so does RavenEye, whether the world got its no-map rule from the "No map" setting or from the nomap command |
| βοΈ Playing it the hard way | ShowMap = false in the client config, or raveneye map off. The server keeps granting; your client declines. raveneye map on takes it back. |
| π The no-map achievement | while RavenEye grants you the map, trips to the world's edges do not count toward it, even if your character's own nomap hides the map. With RavenEye's map switched off, the game counts them as it normally would. |
π Read the saga β the character's own nomap
Vanilla's nomap console command does two things in one keystroke. It toggles a per-character preference, keyed by the character's name, so it follows that character to every world and every server. And when a host types it, it sets the world's no-map rule. The usual way to make a no-map world on a listen host is exactly that command, which means the host's own character is opted out, and no grant will show them a map until it is cleared.
RavenEye respects that preference: it lifts the world's rule, never the character's. raveneye map on clears it for you, and raveneye status says so in words when it is the reason.
First ten minutes: install on the server β install on each admin's client β put the admins' IDs in adminlist.txt β join a no-map world β the map is there.
| Command | |
|---|---|
raveneye status |
your role, the grant, and in words why the map is or is not showing |
raveneye roster |
every player the roster carries |
raveneye map on / off |
use, or refuse, the granted map on this client; on also clears the character's own nomap |
π οΈ When the map does not appear
Type raveneye status. It says why, in words:
| It says | Meaning |
|---|---|
| "no roster has arrived since this join" | this client is not on the server's adminlist.txt, or the server is not running RavenEye |
| "the server revoked it Ns ago" | you were removed from the list, or the server switched the feature off |
| "stale β last roster Ns ago, past the grace" | the server stopped sending or stalled |
| "Client.ShowMap is off" | you switched it off; raveneye map on |
| "THIS CHARACTER'S OWN MAP IS OFF" | this character typed nomap; raveneye map on |
| "server RavenEye vβ¦" and a rejection naming a format version | the server and this client run different RavenEye versions; update the older side |
π οΈ Installing with Gale
On a Gale-managed client the plugin folder is %APPDATA%\com.kesomannen.gale\valheim\profiles\<profile>\BepInEx\plugins\, not the Steam folder.
| Works with vanilla | Needs it on the server | Needs it on both ends |
|---|---|---|
| players who are not admins: nothing to install; if a modpack installs it anyway, it is inert for them on someone else's server | sending the roster; the admin check | an admin's map and pins |
Version matching: the server and each admin's client must run the same RavenEye version. A mismatch shows in raveneye status as a rejection naming the format version.
| Mod | How they get on |
|---|---|
| Mods that unlock the map for everyone | RavenEye's unlock becomes redundant; the pins still work |
| Season and weather mods (Seasonality, Seasons) | unaffected: RavenEye does not touch the environment, map rendering or world generation |
| Cairn (Raven Iron) | complementary: Cairn is for players finding their way on a world with no map; RavenEye is for the person on duty |
| The Raven's Call (Raven Iron) | unrelated apart from the name: no shared code or data. One shows admins where people are now; the other keeps a server's chronicle. |
| Everything else | RavenEye's patches are postfixes that yield to any other mod. It adds no prefabs, no UI and no overlay, and writes nothing into the world or any character's save. |
π Server β set on the server (dedicated or listen host); read there only
| Section | Setting | What it does |
|---|---|---|
| Server | Enabled |
the whole feature, on this world (default on) |
| Server | IntervalSeconds |
how often the roster goes out, 0.5 to 5 seconds (default 2) |
| Server | GraceSeconds |
how long an admin keeps the map if the server goes silent; a demotion does not wait for this (default 60) |
| Server | DeathGraceSeconds |
how long a dead player's last position stays on the map; 0 turns it off (default 180) |
| Server | RevealWhenMapEnabled |
on a world with a map, also show admins the players who hide their position (default off) |
| Server | VerboseLogging |
log every send; grants and revocations are logged regardless (default off) |
π₯οΈ Local β each admin's own client
| Section | Settings |
|---|---|
| Client | ShowMap: use the map when the server grants it (default on) |
Needs: BepInExPack Valheim Β· Also on Hexium
Support Raven Iron. Every Raven Iron mod is free, and stays free: all of it, always. Nothing is held back for patrons, and nothing ever will be. If you'd like to help cover server hosting and test hardware:
| π Website | https://ravenirongames.com/ |
| β€οΈ Patreon | https://www.patreon.com/cw/RavenIronGames |
| π¬ Discord | https://discord.gg/AGKDEurAVa: a channel per mod, and where the testing happens |
A Valheim mod by Raven Iron.
CHANGELOG
Changelog
0.2.2 β 2026-09-25
Updated due to 1.0.16 Patch.
0.2.1
Two fixes and a README correction, plus the housekeeping listed under "Also in this release".
Who gets the map, the roster, the admin gate and the death grace work as before. The 0.2.1 DLL
was built from the commit tagged v0.2.1; the GitHub release (https://github.com/RavenIron-Games/RavenEye/releases/tag/v0.2.1) names that commit and gives the DLL's md5.
- No no-map achievement progress while RavenEye grants you the map. The game decides that
you are exploring without a map from the world's no-map setting alone, and RavenEye leaves
that setting in place. So an admin, a host or a solo player sailing to the world's edges with
RavenEye's map up was counted toward the game's no-map exploration achievement. RavenEye now
tells the game that trip does not count while RavenEye grants you the map, even if your
character's own
nomaphas it hidden. With RavenEye's map switched off (ShowMap = falseorraveneye map off), the game counts as it always did. - One broken patch no longer takes the whole mod down. If a future Valheim update renames or removes one of the game methods RavenEye hooks, only that hook stops working and the rest carries on. The BepInEx log names the part that could not load. Before, the whole mod stopped at start-up. This does not cover every change an update can make: if one renames or removes a whole game class that the rest of RavenEye also uses, a game method RavenEye calls rather than hooks, or a game field it reads or writes, more than that one part can stop working. (Corrected in 0.2.2.)
- README correction: a host or solo player gets the map on their own world. The README
said RavenEye does nothing for a player who is not on an admin list. That is only true for a
player who joins someone else's server. Whoever runs the world is its admin, so a player
hosting from their own game, or alone on a single-player no-map world, gets the map with
RavenEye installed. To keep a solo no-map run map-less, set
ShowMap = false, typeraveneye map off, or leave RavenEye out of that profile.
Also in this release:
- The DLL no longer carries the build machine's folder path. Every earlier build embedded the absolute path of its debug-symbols file, a path that included the build machine's user name. The build now maps its source folders to a neutral placeholder, so the shipped DLL names no local path.
- A "Support Raven Iron" section in the README, with the Raven Iron website, Patreon and Discord links. Every Raven Iron mod is free and stays free; nothing is held back for patrons.
- The store page's link now goes to the Raven Iron website; under 0.2.0 it was the Source link to the GitHub repository, which stays at https://github.com/RavenIron-Games/RavenEye.
- Built against Valheim 1.0.15.
Tested in game on 2026-09-24, on the same code as this release (commit e189400; only
documents and the store page's website link changed after it) β DLL md5
485fe614040d9953e2ae3e1de4950a5f, 43,008 bytes β on a Valheim 1.0.15 dedicated server
(crossplay) with one client, and on a local no-map world played as its host. Boot on both sides
showed patches=4, nothing FAILED. On the local no-map world, played as host, the map was
granted to the host at the start; while it was granted, a trip to the world's edge counted
ExploreWest and never ExploreWestNoMap (the game's own stat lines): the achievement guard
held. With raveneye map off the same trip counted ExploreWestNoMap as it always did, and
raveneye map on granted the map again. Joining the dedicated server's own world, which has a
map, correctly granted nothing and left the map as the game set it. Not tried in game: a dead
player's pin holding for its full three minutes; a second player's pin on a listen host's
map (this run saw the host granted as authority, not a second player joining that host); the
achievement guard seen as an admin client on a dedicated no-map server rather than as the host
(the server used for this run has a map); the guard with the character's own nomap hiding the
map (there the credit is withheld either way, because the grant check does not read that
setting); a host who made the world no-map by typing nomap (their own character's map is then
off until raveneye map on; this run's world was not made that way); the platform achievement
itself (the guard withholds the four Exploreβ¦NoMap stats; that these are what the game's
no-map achievement counts is read from their names, not from the game's achievement data); and a
forced patch-install failure, which cannot be forced without changing the code (7 off-game tests
cover the rule; patches=4 with nothing FAILED is the regression check in game). Every
in-game reading in this paragraph comes from the BepInEx and game log lines; only the
raveneye status replies, which do not reach the client log, were read on screen. Off-game: 154 checks, 0 failed.
0.2.0
Valheim 1.0. If you updated the game, 0.1.0 was broken and this is the fix.
- Rebuilt for Valheim 1.0.12. Nothing about the map, the roster, the admin gate or the death
grace changed. The game did: 1.0.7 added a parameter to
Terminal.ConsoleCommand's constructor, and .NET binds a call like that by its exact signature at runtime, so theraveneyeconsole registration in the 0.1.0 binary threwMissingMethodExceptionon a 1.0.x game. Losing that command matters more here than in most mods β it is the instrument that tells an admin why the map is or is not showing, and "the map did not appear" has at least eight causes with one symptom. - Source link fixed. The repository moved to the
RavenIron-Gamesorganisation, so the "Source" link on this page pointed at a URL that no longer resolves. - Why 0.1.0 looked healthy. It compiled clean against 1.0.7 the day the update landed. A clean build proves the source matches today's game β it says nothing about a DLL built weeks earlier. The break was found by reading the shipped binary's own reference table and resolving each entry against the live game assemblies.
0.1.0
First release.
The vanilla map, for admins only, on a world that has none β with every player on it.
- Admins get the ordinary map back on a
nomapworld: minimap, large map, their own exploration and pins, drawn by the game's own code. Nothing new on screen. - Every online player is pinned, name and icon, whether or not they share their position β the same vanilla player pin, on the same two-second cadence vanilla uses.
- A dead player stays on the map at the place they fell, marked "(dead)", for three
minutes (
DeathGraceSeconds) β the answer to "where did I die?" on a world with no map. - The server decides who is an admin, from its own
adminlist.txt, with the same check the game applies to remote commands, kicks and bans. Edits take effect within seconds: a demotion is sent explicitly and relocks within one interval. - Non-admins see nothing. A client with the mod and no admin entry receives no data and the map stays locked. Only a name, a character id, a position and a dead flag are ever sent.
- Forge-proof by construction. The roster travels on each admin's own server connection, not the shared routed channel other clients can address.
- Silence is only a backstop. If the server crashes or stalls, the map survives
GraceSeconds(60) and then lapses β generous on purpose, so an autosave hitch never slams the map shut under an admin's cursor. - Playing honestly is a toggle:
ShowMap = falseorraveneye map offdeclines the grant on your client. The game's own per-characternomapopt-out is respected, andraveneye map onclears it. - Does nothing on a world that has a map unless
RevealWhenMapEnabledis set, in which case admins also see players who hide their position. - Terrain is not revealed. The game's
devcommands+exploremapremain the deliberate way to do that; the game cannot un-explore.
Console: raveneye status | roster | map on|off. status states the grant's reason in
words β not on the adminlist, server without the mod, revoked, stale, toggle off, the
character's own opt-out, or a version mismatch naming the side to update β because from the
seat they all look the same.
Built against Valheim 0.221.12. 143 off-game tests, each load-bearing one proven to fail
without its fix. Designed under a three-critic adversarial review; docs/DESIGN.md records
what it changed.
Early release. Verified live on a dedicated no-map server on 2026-09-06: the map appearing for an admin, another player's pin moving, the explicit revoke on removal from the admin list, and the client toggle. Not yet watched through: a dead player's marker holding for its three minutes, and a listen host as the admin.