spacegho.st / ffxiv mods

Dalamud plugin · friends and chat · peer to peer

XivLantern

Light a lantern for your friends

Friends light a lantern to say they are here. /lantern is a friend list of your own, with presence and a note you type, 1:1 chat that waits for a friend who is offline, and channels you make and invite friends into. It runs peer to peer over iroh: there is no Lantern server. It is off until you turn it on, and nothing from the game is ever sent.

XivLantern: a warm paper lantern under an aetheryte crystal, friends' lanterns in the night sky
Honest status

Everything is tested on a Linux host: the network layer, its C interface, the C# binding and the plugin's logic. The Windows build of the network layer passed its selftest and talked to a native node under a stock Wine 11 in a container. The plugin builds against Dalamud 15 but has never been loaded by it. Nothing has been observed in the game yet, not even /lantern selftest, which is the next proof. The author channel has no author key configured yet, and says so. It is released (0.1.0); the changelog marks what has been seen working in game.

What it does

A separate chat that draws in game. XivLantern never reads or sends your character's name, world, location or chat, never bridges in-game chat, and never automates or sends a game action. Your friends see the name you type; a test fails the build if the plugin ever asks the game who you are.

The plugin is a thin window over a Rust network layer, lantern.dll, that it carries with it. Friendship is keyed on each node's id, every message is signed by its sender, and nothing is ever accepted for you.

Features

Everything below is built and host-tested; none of it has been observed in game yet.

Friends by invite

Make a one-time invite and send it privately; whoever uses it first becomes your friend, on both sides. Invites expire, and you see who redeemed yours.

unverified in game

Whose lantern is lit

Presence: online, away, busy or invisible, and a note you type. A server info bar entry shows your unread count.

unverified in game

1:1 chat that waits

A message to a friend who is offline goes out when they are next online, and you see when it arrives.

unverified in game

Channels

Make a channel for your static or FC and invite friends in. Anyone holding a channel's ticket can join and read it, so keep tickets out of public places.

unverified in game

The author channel, opt in

Announcements from the mod's author, signed with a key that never leaves the author's machine and checked before they are shown. Nobody else can post there. You can write back for support, and get an answer.

unverified in game

Safety first

Block anyone (they are not told), mute a friend or channel, per-person rate limits that drop floods before they are shown, size limits on every message, and no auto-accept.

unverified in game

Toasts, quietly

Toasts for new messages, following your mutes; channel and online toasts are off by default.

unverified in game

A selftest

/lantern selftest checks, inside the game, that the connection works directly and through a relay, and prints what it found. With Lantern off it uses a throwaway node.

unverified in game

IPC for other plugins

XivLantern.v1.GetStatus, GetFriends, SendToFriend, OpenChat and a MessageReceived event. Reading and sending are each refused until you allow them.

unverified in game

Who sees what

Nothing connects until you turn XivLantern on, and its first screen says all of this before you do.

  • Your friends see your node id, the name and status you type, what you send them, and your IP addresses.
  • Channel members see your node id and everything posted there. Messages are signed, not secret from members.
  • The relays. By default, n0's iroh relays help friends find each other: they see your IP address and when you are online, and forward encrypted traffic they cannot read. You choose: n0's relays, a relay URL you or your FC run, or relays off, which contacts no third party at all and works on a LAN or with open ports.
  • The author channel, if you join it, shows your node id (and on direct paths, your IP address) to the members it connects you through.
  • Nothing from the game: not your character's name, world, location or chat.

Third-party plugins are against the FFXIV terms of service. XivLantern keeps its exposure small: it never automates a game action and never sends game packets.

Screenshots and clips

Planned shots. Empty frames are placeholders for screenshots and clips that will be captured in game.

Loading the shot list…

Install

Two ways, and both are kept on purpose: one click from the plugin repository, or build it from source and load it as a dev plugin.

One click

Add the repository once; every mod here installs and updates like any other plugin.

https://spacegho.st/mods/ffxiv/plugins.json
  1. In game, type /xlsettings → the Experimental tab.
  2. Under Custom Plugin Repositories, paste the URL into the empty row, press +, and leave its checkbox ticked.
  3. Save and Close.
  4. /xlpluginsAll Plugins → search XivLanternInstall.

XivLantern has a stable release, so it shows under All Plugins straight away. Nothing in it has been marked verified in game yet; the changelog says which parts are.

Dalamud will warn you that this is a third-party repository nobody but its author has reviewed. That is true. The repository page says more, including how test builds work.

Build it yourself

The dev plugin path: exactly the code in your checkout, no repository, no auto-update. It is how the author runs it, and the honest way to read the code before you trust it.

git clone https://github.com/Spaceghost/xivlantern-dalamud
cd xivlantern-dalamud
tools/build-native.sh       # lantern.dll, with cargo and mingw-w64
tools/fetch-dalamud.sh && export DALAMUD_HOME=$PWD/.dalamud
dotnet build src/XivLantern.Plugin/XivLantern.Plugin.csproj -c Release
tools/package.sh            # latest.zip
  1. Needs Rust with the x86_64-pc-windows-gnu target and mingw-w64, and the .NET 10 SDK. The author builds in a container, never on the machine the game runs on.
  2. Unpack latest.zip into a folder of its own.
  3. In game: /xlsettingsExperimentalDev Plugin Locations → add the path of that folder's XivLantern.dll (under Wine, a Z:\… path) → +Save and Close.
  4. /xlpluginsDev ToolsInstalled Dev Plugins → enable XivLantern. Dev plugins are added disabled.
  5. Then /lantern selftest, and please report what it prints.

If you later switch to the one-click install, disable the dev plugin first so the two copies cannot fight over the same name. The README has the details.

Requirements

  • FFXIV with Dalamud (API level 15), on Windows or Linux under Wine. The network layer ships inside the plugin.
  • Friends running XivLantern too. It talks only to other XivLantern nodes.
  • Optional: your own iroh relay, or relays off on a LAN or with open ports.
  • Known limits: a message goes to one device of a friend, not all of them; channels keep no history for late joiners; and anyone holding a channel's ticket can read it.

Community screenshots

Screenshots of XivLantern shared by players. Every one is reviewed by the site owner before it is shown here. Every mod's are in the gallery, and what XivLantern should do next is up for a vote.

Loading…

Add yours

Sharing a screenshot needs a sign-in, so that everything sent to this site comes from an account.

Signing in with FFXIV needs an XIVAuth account and shares no character.

Hide your own name and chat first, and never share a terminal showing tokens or private paths. Metadata is stripped from the image before it is stored. Your upload is linked to your GitHub or XIVAuth account id, which the site owner can see; the public sees only the image and the credit you typed. To have a shot removed, contact the owner through github.com/Spaceghost.