Appearance
Storage
Systema uses two storage layers with different scoping:
figma.root.pluginData -- per-file, shared across all users
| Key | Contents |
|---|---|
systema_config | Full theme configuration (all themes as JSON) |
systema_layout | UI 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
| Key | Contents |
|---|---|
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)
| Key | Contents |
|---|---|
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_hash | FNV-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:
| Key | Contents |
|---|---|
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.