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.
PortalAtlas
Personal portal atlas for Valheim. Record gates as you find them; admins can Refresh the full world list. Dedicated Refresh needs Server Devcommands. Optional Auto-pin. Vanilla pairing stays.
| Date uploaded | 20 hours ago |
| Version | 1.2.6 |
| Download link | SonicDM-PortalAtlas-1.2.6.zip |
| Downloads | 35 |
| Dependency string | SonicDM-PortalAtlas-1.2.6 |
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.2333ValheimModding-Jotunn
Jötunn (/ˈjɔːtʊn/, 'giant'), the Valheim Library was created with the goal of making the lives of mod developers easier. It enables you to create mods for Valheim using an abstracted API so you can focus on the actual content creation.
Preferred version: 2.30.2JereKuusela-Server_devcommands
Enables devcommands and utilities for server admins.
Preferred version: 1.115.0README
Portal Atlas
Personal portal journal and map panel for Valheim. Record gates as you find them, sort and search them on the large map, and optionally Refresh world for a full server-wide list if you are an admin. Vanilla tag pairing is unchanged.

| Version | 1.2.6 |
| GUID | sonicdm.valheimportallist |
| Dependencies | BepInExPack Valheim, Jötunn, Server Devcommands (dedicated Refresh only) |
Requirements
| What you want | Game client | Dedicated server |
|---|---|---|
| Journal + panel only | Portal Atlas + Jötunn | Not required |
| Refresh world on a dedicated server | Portal Atlas + Jötunn + Server Devcommands, and your id in the server adminlist.txt |
Portal Atlas + Jötunn + Server Devcommands |
| Offline / listen host (you host the world) | Portal Atlas + Jötunn | — (you are the host; Refresh works locally) |
Notes:
- Gale / r2modman install Jötunn and Server Devcommands from
manifest.jsonon the client. - The dedicated server must also have Portal Atlas and Jötunn (same as other Jötunn mods). Put Server Devcommands on the server if you use admin Refresh.
- You do not need to turn on vanilla
devcommands/ cheats. Server Devcommands already confirms admin viaadminlist.txt.
How to use
- Approach, use, or travel through a portal — it is saved to your local journal (per world + character).
- Open the large map (
M) → Portals, or runportals. - Filter by tag; sort by Name, To me, or Map click.
- Select a row → Pin, Ping, or Ping exit.
- If Refresh is available: Refresh world loads a live server list (session only). Use Add to journal on rows you want to keep. Show known returns to the journal.
Approach range (journal + optional auto-pin): config Pins.ApproachRangeMeters (default 8).
Clear saved only removes pins this mod created. Manually placed map pins are never touched.
Refresh world
Never runs automatically when the panel opens. Never writes your journal by itself.
On a dedicated server, after you join, the client handshakes with the host (PortalAtlas_Hello / HelloAck). Refresh is enabled only when:
- The host has Portal Atlas (handshake succeeds), and
- Server Devcommands reports you as admin.
The panel shows a status line under the Refresh button, for example:
| Status | Meaning |
|---|---|
Refresh: ready (admin) / ready (server x.y.z, admin) |
Handshake OK and you are admin — button works |
Refresh: ready (you are host) |
Offline / listen host — local scan |
Refresh: checking server… |
Waiting for the host handshake |
Refresh: server incompatible (no Portal Atlas) |
Host did not answer — install Portal Atlas (+ Jötunn) on the dedicated server |
Refresh: Server Devcommands missing |
Install Server Devcommands on this client (and the server) |
Refresh: not an admin |
Handshake OK, but you are not on adminlist.txt / not authorized yet |
Refresh: scanning… |
Host is building the world list |
When Refresh is unavailable, the button stays visible but greyed out.
Install
Client: install with Gale / r2modman / Thunderstore (SonicDM-PortalAtlas).
Dedicated server: install the same package (or drop PortalAtlas.dll) and Jötunn. Add Server Devcommands if admins should use Refresh. Restart the server after installing.
Both client and server should run the same Portal Atlas version when using Refresh.
Commands
| Command | Purpose |
|---|---|
portals |
Toggle the Portals panel (opens the large map if needed) |
portallist |
Export every portal to CSV under BepInEx/cache/PortalAtlas/ (host, or dedicated admin) |
Files
Under BepInEx/cache/PortalAtlas/ (not config):
- Journal JSON per world + character
- Host CSV / tag summary / text report (startup dump and
portallist)
Troubleshooting
| Problem | Check |
|---|---|
| No Portals button / panel | Jötunn installed on the client; look for Portal Atlas … loaded in BepInEx/LogOutput.log |
server incompatible |
Portal Atlas + Jötunn on the dedicated server; matching version; server log shows the mod loaded |
not an admin |
Steam / PlayFab id in adminlist.txt; Server Devcommands on client and server; wait until it says you are authorized |
| Refresh hangs / disconnect icon | Update to 1.2.5+ (time-sliced scan). Ensure server and client both have that build |
Set General.DebugLogging = true in the mod config for [DEBUG] lines (journal, handshake, Refresh RPC, access) in BepInEx/LogOutput.log.
CHANGELOG
Changelog
1.2.6
- Client handshake on connect (
PortalAtlas_Hello/HelloAck): Refresh world only works when the dedicated host has Portal Atlas and Server Devcommands reports admin. - Panel shows a Refresh status line (ready / checking server / missing mod / need admin) and greys the button when Refresh is unavailable.
1.2.5
- Refresh world on a dedicated server uses Server Devcommands on the admin client for the button, and PortalAtlas.dll on the dedicated host for the scan RPC.
- Dedicated host needs Jötunn as well (standard headless skip via
GUIManager.IsHeadless()); one DLL for client and server. - Refresh / host CSV scan is time-sliced (~2ms per frame) so the server keeps networking while scanning; uses
GetPortalListinstead of a full ZDOMan walk.
1.2.4
- Removed the configurable toggle key (default
P). Open the panel from the large map Portals button or theportalscommand.
1.2.3
- Renamed to Portal Atlas (Thunderstore
PortalAtlas, GitHubValheim-PortalAtlas). - Cache folder is now
BepInEx/cache/PortalAtlas/(copies existing files fromValheimPortalListonce if present). - GUID unchanged (
sonicdm.valheimportallist) so BepInEx config carries over.
1.2.2
- Dedicated Portals panel from the large map button, toggle key (default
P), orportals. - Personal known-portal journal: record on approach / interact / teleport; stored under
BepInEx/cache/PortalAtlas/. - Full world list only after explicit Refresh world (session-only; never writes the journal). Use Add to journal to keep a world row.
- Refresh access: dedicated clients via Jötunn
PlayerIsAdmin/adminlist.txt; local and listen hosts can always refresh. - Ping / Ping exit open the map, center on the portal, and place the player ping.
- Panel closes when the large map closes.
- Toggle key ignored while chat, console, rename prompts, or the panel filter have focus.
- Temporary tinted map overlay while the panel is open; optional Auto-pin for permanent portal pins.
- Connection status (connected / one-way / unconnected / missing) using live portal connection ZDO links.
- Map-click nearest sort; scrollable list; map zoom blocked while the cursor is over the panel.
- Debounced journal saves and lighter approach / UI polling to reduce hitching.