Tablet System — Changelog
Ce contenu n’est pas encore disponible dans votre langue.
All notable changes to this pack are recorded here.
The format follows Keep a Changelog and the pack follows Semantic Versioning.
The version below must always match the one declared in Runtime/AssemblyInfo.cs — that
is the version the FOS Hub shows, and the one the Hub compares against the installed Core.
Nothing yet.
[2.2.1] — 2026-08-25
Section titled “[2.2.1] — 2026-08-25”- The world creator now keeps the role their account is listed with. Creating the instance used to force the founder role and discard a higher one set in the account list, so a creator listed as Owner joined as a lesser role. When that role could not assign roles, nobody in the instance could.
[2.2.0] — 2026-08-22
Section titled “[2.2.0] — 2026-08-22”-
Close when leaving, a checkbox on the tablet manager. Ticked — the default, and what every existing world already does — the tablet closes on its own when the player walks away. Unticked, it stays open until closed by hand.
It was already possible to switch that behaviour off, in two ways, and neither read as a setting: clearing the reference point, or dragging the close distance to zero. The second one even reads backwards — zero looks like “close immediately”, and means “never close”.
When the box is unticked, the close distance slider in the settings panel is locked. A control that moves without doing anything reads as a fault.
[2.1.1] — 2026-08-21
Section titled “[2.1.1] — 2026-08-21”- The staff manager was not synchronising in manual mode, despite declaring it. The
shipped prefab carried
FOSPlayerRegistryon the same GameObject, and VRChat applies a single sync mode per object: the registry declaresNoVariableSync, and the staff manager inherited it. Its nine synchronised arrays therefore travelled under a mode that cannot carry them, with no message of any kind — the moderation state stayed on the owner’s machine while everything looked right in solo testing. The registry now sits on its own child object,Player Registry, in the prefab and in the example scene. Nothing to rewire: the field points at the component, which did not change.
[2.1.0] — 2026-08-20
Section titled “[2.1.0] — 2026-08-20”Groundwork for the Pro edition. On its own, Standard behaves exactly as it did in 2.0.0.
- A role selector on each row of the role panel — two arrows, a label, an apply
button — for worlds that define more roles than the four built in. Three buttons
whatever the number of roles.
FOS Essentials > FOS Tablet System > Build role selectorbuilds and wires it by cloning one of your existing role buttons, so it inherits your colours and your font instead of arriving with ours. The four fixed buttons keep working; leave the new fields empty and nothing changes. - Permissions are a set of capabilities, not just a rank: freeze, isolate, mute,
teleport to a player, change roles, community settings, act on an equal rank, open the
staff panel, view the log. Every moderation action — authority side and button side —
goes through one decision point,
FOSCanDo. - Refused actions are recorded in the log. A refusal reaching the authority means either a role that changed between the click and the request, or a modified client; both are worth a trace. Switchable off on the staff manager.
- A role can be attached to an account, as a floor: its holder arrives with it, can be promoted above it for one instance, and can never be pushed below it.
- The founder role and the role on arrival are configurable, instead of being fixed at admin and visitor.
FOSEffectiveRoleOffor anything that displays, falling back to the arrival role while the synchronised list has not reached a player yet.FOSRoleOfstays the one to ask when deciding a permission, where no answer must mean refusal.
Changed
Section titled “Changed”- The two staff visibility lists of
FOSTabletPermissionsask a capability instead of comparing ranks: shown to moderators means “may open the staff panel”, shown to admins means “may edit the community settings”. Identical with the four default roles. It stops being identical the day a world defines its own: a role sitting at level 2 would otherwise inherit the moderation panel from a rank comparison, without holding a single one of its powers.FOSIsStaff,FOSIsAdmin, the staff counter, the instance memory and the network authority handover follow the same rule now. - The rule deciding a role change lives in one place,
FOSCanSetRole, asked by both the authority and the interface. It was written twice — once to decide, once to grey out a button — which is how two copies of a rule eventually stop agreeing. - “Only an admin makes an admin” became a grant ceiling per role. With no matrix, everyone grants up to their own rank, exactly as before.
- The upper bound of a role change comes from the number of declared roles instead of a hardcoded admin level.
- A role with no name shows its number instead of falling back to “Visitor”, which was a lie on any rank above admin.
- Check button wiring now runs the checker shipped with the Core, which every FOS pack
shares, instead of the pack’s own copy. Same menu entry, same result. This raises the
Core this pack needs to 1.3.0, where that checker lives — the Core also exposes it for
the whole line under
FOS Essentials > Check event wiring.
- A role attached to a custom set could change by itself. The automatic admin succession compared ranks to the two original constants — admin is 3, moderator is 2. In a world where admin sits at 4, it no longer saw the admin present, believed the instance orphaned, took the first player at rank 2 and “promoted” them to rank 3. Assigning a role therefore turned it into another one, silently, on every assignment and every player leaving. The succession now asks who can still administer, and promotes the highest-ranked player already trusted with roles to the lowest role that can administer.
- The first player of an instance never received any state change. Rebuilding the player list did not go through the single point that notifies subscribers, and one never receives one’s own deserialisation — so for the instance creator, and for them only, everything depending on the role stayed at its startup value.
- The instance memory no longer reserves its slots. It filled 32 entries with empty
strings from the start, close to 400 of the 540 bytes of every serialisation, only to
express “nobody is remembered”. It now grows one entry at a time and shrinks when a
role is forgotten;
memorySizeis a ceiling, not a size. - Every serialisation is preceded by a check on the nine synchronised arrays — nulls, lengths out of step — repaired with a warning that names the array. VRChat retries a failed serialisation forever without ever naming the variable at fault, which is the kind of breakage that costs an evening to find.
Without the Pro edition, the capability matrix and the account list are empty and permissions are derived from rank — every decision is the one 2.0.0 made.
One visible difference: in the role panel, promoting the founder to admin is no longer offered. It was a no-op, since the founder is already admin, and the interface now matches the authority instead of following a rule of its own.
2.0.0 — 2026-08-19
Section titled “2.0.0 — 2026-08-19”Full rewrite on the FOS Essentials Core. The tablet does the same job as before, and almost none of it is the same code.
Not backward compatible with 1.0.x — hence the major version. Class names, fields and several method names differ, and a prefab you have modified does not carry over on its own. The upgrade path is at the end of this entry.
Requires FOS Essentials Core 1.1.0. Ships with FOS Localization 1.0.0 and FOS Teleport 1.0.0, both used by the tablet.
- In-game translation, any number of languages. Text and images go through FOS Localization: a real table editor, CSV export and import for translators, and the player’s choice remembered between visits. The old system was two hardcoded languages.
- The moderation log reads in each player’s own language. What travels on the network is the action — a code, the names involved, a value — not a ready-made sentence, so the host’s language is no longer imposed on the instance. English and French are built in.
- Teleporting to a player is now logged, along with role recovery from the instance memory and automatic admin succession. Twelve distinct actions instead of catch-all messages.
- The log shows the author’s real rank at the time of the action, and puts the newest entry first.
- Button wiring checker:
FOS Essentials > FOS Tablet System > Check button wiringlists every control whose event matches no existing method. A wrong event name raises no error in VRChat — the control is simply dead, silently. - Inspector diagnostics: missing references are reported in place, in your language.
- Gizmos for the auto-close radius and the isolation zone, visible in the scene view.
- Extension points: any behaviour can follow the moderation state, a toggle group or
the current language through
FOSRegister. - Inspectors, tooltips and messages translated into English, French, Spanish and German.
Changed
Section titled “Changed”- Toggle groups replace the key-based toggle manager. One component per group, each button pointing at its group directly. A typo in a string key used to produce a dead button with no error; that is now impossible to write.
- A toggle group holds one state applied to all its objects. Before, each object was flipped independently: one object left off in the scene split the group in two, for good.
- Teleporting uses FOS Teleport, which brings a cooldown, optional room alignment,
velocity control and one-click
OnClickwiring. - Every behaviour derives from
FOSBehaviour: the FOS banner in the inspector, prefixed logs that can be switched on per component, and safe ownership helpers. - The pack now lives in
Assets/FOS/TabletSystem/Standard/, making room for the coming editions. - The moderation log reports failed network serialisations instead of failing silently.
- The player list could contain an empty slot, which made network serialisation fail in a loop: the state stopped reaching every other player, with nothing to explain why.
- A player joining could be missing from the list, because nothing guarantees the order in which two components receive the same event.
- The instance memory could stop working after an ownership transfer, silently and for good.
- Log entries were attributed to the object’s owner rather than to the moderator who performed the action.
Upgrading from 1.0.x
Section titled “Upgrading from 1.0.x”The class names, the fields and several method names have changed. A prefab you have modified will not carry over on its own.
- Import the package and let Unity compile.
- Open
FOS Essentials > Huband check that everything is green. - Run Check button wiring on your tablet: it lists every control to repoint.
- Compare your old prefab with the new one for the renamed fields — the inspector marks the missing references in red.
Keeping your old version until the new one is wired is the safe path.
Fixed three timing problems that only appeared under particular join orders.
- The admin bootstrap is also secured from
OnPlayerJoined, in case it runs beforeStart(). - A stale list entry can no longer demote the instance founder.
- The permission panel reads the current role at start instead of assuming visitor —
Start()only runs when the object first becomes active, which could happen long after the real role had been applied, and cut an admin off from their own panel.
First sold release.
- Summoning, teleport menu, local toggles, community rules, staff panel with roles, freeze, temporary isolation, mute, and a synchronised moderation log. FR/EN localisation.
- Built on the security rework of the internal 0.6 line: the object’s owner is the only authority, moderation actions are requests validated against the real calling player, synced variables carry state and never commands, ownership is restricted to staff, the first player of the instance becomes admin rather than the master, and staff roles are remembered for the current instance only.
