Skip to the content
Docs

Data Retention & Privacy

On this page9

What is stored

DataTableWhy
Identity generation, voice frequency, face keyrecognition_identitiesOne row per character. The voice frequency and the face key are derived values, not readable text.
What A remembers about Brecognition_memoriesThe core feature.
How well A knows Brecognition_familiarityScan speed.
Names people gave each otherrecognition_introductionsWaiting names, until a scan attaches them.
Scan historyrecognition_scansThe admin trend chart and timeline.
Action snapshotsrecognition_proofsDispute handling. Tamper-evident.
Admin actionsrecognition_admin_logAccountability. Tamper-evident.
Anomaliesrecognition_anomaliesPossible cheating, for staff to review.
Papersrecognition_reportsCamera reports, statements, descriptions.
Photosrecognition_photosOnly when PhotoHost = 'local'.
Devicesrecognition_devicesSerial, owner, battery, preset.
Virtual itemsrecognition_itemsStandalone servers only.
Death sessionsrecognition_death_sessionsNew Life Rule outcomes and witness lists.
Identity resetsrecognition_identity_resetsFace implants and admin resets.
Clothing knowledgerecognition_clothing, recognition_clothing_baselineWhat each item covers. Not about players.
Setting overridesrecognition_settingsIn-game admin changes.

Personal identifiers appear in exactly two shapes: the character key your framework uses (citizenid, identifier, license, depending on your setup) and, where your framework exposes it, the character name. License identifiers are stored where the framework's own key is a license (standalone, and some frameworks) — they are never added on top.

Where a player's own settings live

HUD position, scale, icon shape and the marks toggle are saved on the player's own PC, not on your server. They are not in any table, they are not in any export, and they do not follow the player to another server.

Retention

lua
ServerConfig.Retention = {
    HistoryDays       = 60,
    ProofDays         = 60,
    AnomalyDays       = 30,
    AdminLogDays      = 180,
    DeathSessionDays  = 60,
    DeviceDays        = 180,
    IdentityResetDays = 365,
}
KeyDefaultWhat it prunes
HistoryDays60recognition_scans.
ProofDays60recognition_proofs, oldest first.
AnomalyDays30recognition_anomalies.
AdminLogDays180recognition_admin_log.
DeathSessionDays60recognition_death_sessions.
DeviceDays180Devices that have not been used for this long.
IdentityResetDays365Face implant and identity reset history.

Memories and reports are not on that list: they are deleted when they expire, which is what their tier or Config.Report.KeepDays already says. Familiarity is never deleted by age — it is reset only by the death rule or a face implant.

lua
ServerConfig.Prune = {
    IntervalMinutes = 15,
    BatchSize = 2000,
}
KeyDefaultWhat it does
IntervalMinutes15How often the clean-up runs.
BatchSize2000Rows deleted per step, so it never locks a table.

Run it now with recognition:prune (needs the settings level).

Deleted characters

lua
ServerConfig.CharacterPrune = {
    Enabled = true,
    IntervalHours = 6,
    PageSize = 200,
    DeleteHints = true,
    DeleteHintDelaySeconds = 10,
}
KeyDefaultWhat it does
EnabledtrueRemove data belonging to characters that no longer exist.
IntervalHours6How often the sweep runs.
PageSize200Characters checked per step.
DeleteHintstrueA "delete character" request the script sees triggers an early check.
DeleteHintDelaySeconds10How long after that hint to check.

Frameworks with their own delete list (ESX, Qbox, 0R v3) purge our identity row themselves once you have done the install step. This job is the safety net for everything else, and it also removes memories, familiarity and introductions that point at an identity that is gone — on every framework.

Deleting one player's data

  1. Delete the character in your framework or character selector. Everything above then applies, automatically, within IntervalHours.
  2. To force it immediately, run recognition:prune in the server console.
  3. To wipe a character's recognition identity without deleting the character, use an identity reset:
Code
recognition:resetidentity <id|charKey> <reason>

That gives the character a new identity generation: everybody forgets them, their familiarity is cleared, and the old memories are no longer reachable. It needs the identity level and a written reason, and it is logged.

What goes to Discord

Controlled entirely by ServerConfig.Discord:

KeyDefaultEffect on privacy
IncludeServerIdstrueServer ids in messages.
IncludeNamestrueCharacter names in messages.
IncludeCharKeystrueCharacter keys in messages.
IncludeLicensesfalseLicense identifiers. Off by default.

Config.Admin.ShowLicenses is a separate switch for the in-game panel. Showing a license to a logged-in admin inside the game is a different decision from publishing it into Discord.

Who can see what

DataWho
Memories, familiarity, scans, the pair viewadmins with view
Editing or deleting a memoryadmins with edit, with a written reason
Exports to Discordadmins with export
Identity resets and implantsadmins with identity, with a written reason
Proofs and the admin logadmins with view; both tamper-evident
Your own character's data, as an adminnobody, while BlockSelfView is on

Every admin read is logged when Config.Admin.LogViews is on (the default).

The salt

lua
ServerConfig.SecretSalt = ''       -- convar: recognition_secret

Character voices, tattoo codes and the proof log all depend on it. Set it in server.cfg with set before the first start and never change it. Left empty, it is generated into the database, which is weaker and warned about at every boot.

Privacy checklist

  • IncludeLicenses = false in ServerConfig.Discord.
  • Webhooks point at private staff channels.
  • recognition_secret is a set convar, not setr, not config.lua.
  • Config.Admin.RequireReason = true, so every write has a written reason.
  • Config.Admin.BlockSelfView = true and BlockSelfEdit = true.
  • Config.Admin.LogViews = true.
  • Only the staff who need each level have that ACE.
  • Retention numbers match what your server actually promises its players.