Skip to content

Storage

Systema uses two storage layers with different scoping:

figma.root.pluginData -- per-file, shared across all users

KeyContents
systema_configFull theme configuration (all themes as JSON)
systema_layoutUI layout state: panel widths, scroll positions, window size, active tabs, display/AI settings, agent overrides, disabled agents
systema_pushed{ themeId, themeName, pushedAt, schemaHash } of the theme currently represented by this file's Systema variables. Written after every successful push, read on startup to mark the active theme in the UI and on push to detect cross-theme overwrites

Any user who opens the file sees the same config and layout. Last save wins.

figma.clientStorage -- per-user, private

KeyContents
systema_chat_v3_{fileKey}_{themeId}Chat history for a specific theme (LZ-string compressed JSON). Per-user, per-file, per-theme
systema_api_key_{provider}API keys for anthropic, openai, openrouter, gemini

Each user has their own chat history and API keys — not shared across collaborators.

Variable collection tags (pluginData on collections)

KeyContents
systema_managed = "true"Marks the collection (or a preview scene-node) as Systema-created. Only things with this tag are swept on replace-theme or cleared by Danger Zone actions
systema_theme = {themeId}Links the collection to a specific theme id. Under the single-theme-in-Figma policy there's only one active id in the file, but the tag is still written — used for OOM-safe filtering during index and as a fallback "which theme lives here" lookup when systema_pushed is empty
systema_hashFNV-1a hash of the collection's tokens (paths + per-mode values) from the last push. Used for fast-skip when re-pushing an unchanged collection

Per-variable plugin data:

KeyContents
systema_tid = {stable-semantic-id}Computed by buildTid([...pathParts]) in the token engine. Survives path renames and collection-structure switches, letting the push flow find an existing variable by meaning instead of by name

Settings export/import

All settings (display, AI config, agent overrides, API keys) can be exported as a JSON file and imported on another file or machine via the Settings dialog header buttons.


All rights reserved.