- C# 99.7%
- Shell 0.3%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
Bumps Microsoft.NET.Test.Sdk from 17.12.0 to 18.10.1 Bumps System.Security.Cryptography.ProtectedData from 9.0.0 to 10.0.12 Bumps xunit from 2.9.2 to 2.9.3 Bumps xunit.runner.visualstudio from 2.8.2 to 4.0.0 --- updated-dependencies: - dependency-name: System.Security.Cryptography.ProtectedData dependency-version: 10.0.12 dependency-type: direct:production update-type: version-update:semver-major dependency-group: nuget - dependency-name: Microsoft.NET.Test.Sdk dependency-version: 18.10.1 dependency-type: direct:production update-type: version-update:semver-major dependency-group: nuget - dependency-name: xunit dependency-version: 2.9.3 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget - dependency-name: xunit.runner.visualstudio dependency-version: 4.0.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: nuget ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> |
||
| .github | ||
| build | ||
| docs | ||
| Linkpearl | ||
| Linkpearl.Core.Tests | ||
| Linkpearl.Harness | ||
| Linkpearl.Probe | ||
| scripts | ||
| .gitignore | ||
| CLAUDE.md | ||
| Directory.Build.props | ||
| Linkpearl.slnx | ||
| Plugin_Logo.png | ||
| README.fr.md | ||
| README.md | ||
| repo.json | ||
See your friends' modded looks in Final Fantasy XIV,
straight from player to player, with no server in between.
linkpearl-sync.github.io · Roadmap
English · Français
Note
The plugin's interface is in French for now. Below, each in-game label is quoted exactly as it appears, followed by its meaning.
Install
In game, type /xlsettings, open the Experimental tab, and paste this address into Custom Plugin Repositories:
https://linkpearl-sync.github.io/repo.json
Click +, then Save. Then open /xlplugins, search for Linkpearl Sync and install it.
Important
Groups and Public need version 0.4.0 or later for every member. Versions before 0.3.0 no longer connect at all: keep the plugin up to date.
Requirements: Penumbra and Glamourer, installed and enabled.
What Linkpearl does
You pair with a friend, in game, in two clicks. From then on, each of you sees the other as they dressed up: Penumbra mods, Glamourer state, and what neighbouring plugins show.
- Player to player. Your files go straight from your game to your friend's, end-to-end encrypted. No server stores or redistributes them. When a direct connection is impossible, they pass through the rendezvous service's relay, which carries them without being able to read them.
- Only with the people you chose. Nothing is shared unless you both agree.
- More than outfits. Modded animations, visual effects and sounds, plus what Customize+, SimpleHeels, Honorific, Moodles and PetNicknames show.
Getting started
First launch
A short introduction opens and asks you to choose where to keep the cache (local storage that avoids downloading received looks again) and its Taille maximale du cache (maximum cache size). You can change both at any time in the settings.
The plugin window opens with /lpearl, or by clicking the Linkpearl entry in the game's server info bar.
At the bottom of the window, Service disponible (service available) or Service indisponible (service unavailable) tells you whether the rendezvous service is responding. An existing session can continue even if the service becomes unavailable.
Pairing
A pair is a player added to your Linkpearl contacts.
- Get close to your friend. An orange icon next to their name means they use Linkpearl.
- Right-click their character, then Linkpearl : demander le pairage (request pairing). You can also use the À proximité (nearby) page of the window.
- Your friend gets a notification and accepts with one click.
That's it: your looks are exchanged whenever you are within range of each other.
Pairing is done face to face: Accepter (accept) stays greyed out while the requester is out of sight, and an answer from a player you cannot see is ignored. If two different answers arrive under the same name, Linkpearl cancels the pairing as a precaution: ask again, standing next to each other. If the window warns that your mailbox on a service is held by another connection, and you have no other game open, someone may be trying to intercept your pairing requests.
Glyph colours
| Colour | Meaning |
|---|---|
| Green | paired and connected |
| Orange | uses Linkpearl, not paired yet |
| Blue | sent you a pairing request |
| Grey | paired, offline or paused |
| Purple | member of one of your groups |
| Red | paired, but something failed: see the Pairs page |
Day to day
- Reapply a look that didn't apply properly: right-click the character, Linkpearl : réappliquer (reapply).
- Direct or relayed: on the Pairs page, an icon next to each connected peer's name shows whether the session is direct or goes through the relay, with the latency in its tooltip.
- Pause a peer: Pairs page, pause button. The connection closes and their look is removed.
- Block animations, effects or sounds: for everyone from the window's title bar, or for a single peer from the Pairs page. Nothing you block is downloaded.
- The cache: folder and size in Réglages > Cache (Settings > Cache). Past the size you chose, the oldest looks go first, never the ones currently in front of you.
- Back up your characters and pairings: Réglages > Sauvegarde (Settings > Backup), at the top of the page. A single file, password-protected if you like, lets you resume the same Linkpearl identity after a reinstall or on another PC.
Groups
A group syncs all its members with each other, without pairing them one by one: a free company, a roleplay circle. Everything happens on the Groupes (Groups) page of the window.
- Create: Créer un groupe (create a group), give it a name (letters, digits and dashes, no spaces), optionally a password, then Créer (create). With a password, any member online lets in whoever knows it. Without one, you or a moderator approve each newcomer.
- Share the code: under Inviter (invite), the code (
ABCD-EFGH-JKLM@service) and its Copier le code (copy the code) button. Send it by /tell. The page shows it to the owner and the moderators only. - Join: Rejoindre un groupe (join a group), paste the code, the password if the group has one, then Rejoindre (join). A member must be online to answer, or a moderator if the group approves each newcomer. Joining needs Être visible par les autres joueurs (be visible to other players) turned on: that is how the group answers you.
- Approve: requests to join show up on the Demandes (Requests) page for the owner and the moderators, with Accepter (accept) and Refuser (decline).
- Moderate: on a member's row, Exclure (exclude) takes two clicks, and the owner can Nommer modérateur (make moderator). Under Gérer le groupe (manage the group): an Admission panel with Mot de passe (password) or Validation par un modérateur (approval by a moderator), a Mot de passe (password) panel with Définir (set) or Changer (change) once one is set, the Exclus (excluded) list with Lever (lift) or Personne n'est exclu (no one is excluded) when it's empty, and a Zone sensible (danger zone) with Nouveau code (new code) and Dissoudre le groupe (dissolve the group).
- Leave or dissolve: Quitter le groupe (leave the group). The owner doesn't leave: they dissolve the group with Dissoudre le groupe (dissolve the group), under Gérer le groupe. Members find out when they next meet the owner, so keep the group in your list until they have, then Retirer de la liste (remove from the list).
The code is a door, not a key: on its own, it lets no one in. After excluding someone who knew the password, change the code and the password.
Mode public
At the top of the Groupes (Groups) page, Mode public (public mode) is off by default. The first activation is confirmed with Activer le mode public (enable public mode). You then see the modded appearance of every visible player who enabled it, and they see yours, with no code and no pairing, even if you do not know one another. These strangers' animations, visual effects (VFX), and sounds are off by default. The Animations, VFX, and Sons (sounds) buttons turn them back on for everyone in public mode; under Joueurs rencontrés (players met), a player's effects button sets them for that player alone, and Suivre le mode public (follow public mode) restores the shared setting. Bloquer (block), in two clicks, stops all appearance sharing with that player; the Bloqués (blocked) list lets you Débloquer (unblock). Disabling public mode keeps your blocks for next time.
Linkpearl cannot prove that a stranger in public mode really plays the character they show, not even for a player who does not use the plugin: block any look that seems hijacked. Unblocking frees the character first; the blocked Linkpearl identity stays in the list (identité Linkpearl bloquée, blocked Linkpearl identity) until you unblock it too.
Services' ban lists
Each rendezvous service can publish a list of banned characters. A character listed by one of your services is not paired, not admitted into your groups, not seen through public mode, and their appearance is not applied on your side, even if they are one of your pairs. Their row carries the bloqué par un service (blocked by a service) chip, with the reason on hover. Such a list is a matter of reputation, not proof: removing a service from your settings lifts its bans.
Privacy
- Your files leave your game only for the peers you accepted, end-to-end encrypted.
- For two players to find each other, Linkpearl goes through a rendezvous service. It never sees your files or your looks. It does see pairing requests go by, with the characters' names and public keys, and the IP addresses of those who use it.
- If you keep Être visible par les autres joueurs (let other players see me, on by default), the service can know that your character is online, and so can anyone who asks it about your character's name: that is what lets others recognise you. You can turn it off in Réglages > Visibilité (Settings > Visibility).
- The connection to the rendezvous service is not encrypted. Someone who controls your network (a public Wi-Fi, for instance) sees what the service sees, and could slip in during a first pairing just as a dishonest service could. Sessions between players stay end-to-end encrypted, and a pair already accepted cannot be impersonated.
- Joining a group also goes through the rendezvous service, which sees the code and the character's name and world. As with pairing, trust is established on first contact: for a group with a password, a long password is what really protects it.
- You can host your own rendezvous service in one command: see Host a rendezvous (Linux with systemd; the server then updates itself), or the step-by-step guide. You and your friends just need to share at least one. By default a new service also applies to the open network, and joins it after 72 hours of reliable answers (
--no-announceto stay out).
Questions or problems?
Open an issue describing what you did and what you saw. The Dalamud log (/xllog) helps a lot. Issues in English or French are both welcome.
For the curious, the technical page explains connections, encryption and federation, and the network page shows the open network live. For contributors, the design and the protocol are described in docs/ (in French).