Files
Toju/docs-site/docs/plugin-development/api/storage.md
Myx 0a714428f6 docs: improve doucmentation
improve doucmentation and fix small store changes
2026-04-30 01:16:48 +02:00

2.5 KiB

sidebar_position
sidebar_position
10

Storage API

Plugins can store local client data and per-server data. Desktop builds use Electron persistence when available; browser fallback uses renderer storage.

Required Capabilities

Method Capability
clientData.read(key) storage.local
clientData.write(key, value) storage.local
clientData.remove(key) storage.local
serverData.read(key) storage.serverData.read
serverData.write(key, value) storage.serverData.write
serverData.remove(key) storage.serverData.write
storage.get(key) storage.local
storage.set(key, value) storage.local
storage.remove(key) storage.local

Client Data

Client data belongs to this local user and client.

export async function activate(context) {
  await context.api.clientData.write('soundboard:volume', {
    masterVolume: 0.7,
    updatedAt: 1777473600000
  });

  const value = await context.api.clientData.read('soundboard:volume');

  context.api.logger.info('Loaded client data', value);
}

Server Data

Server data is local per-user/per-server state. It is not arbitrary signal-server persistence.

export async function activate(context) {
  await context.api.serverData.write('soundboard:favorites', [
    { id: 'chime', label: 'Chime', url: 'https://cdn.example.com/chime.wav' },
    { id: 'ready', label: 'Ready Check', url: 'https://cdn.example.com/ready.wav' }
  ]);

  const favorites = await context.api.serverData.read('soundboard:favorites');

  context.api.logger.info('Loaded server favorites', favorites);
}

Remove Data

export async function activate(context) {
  await context.api.clientData.remove('soundboard:volume');
  await context.api.serverData.remove('soundboard:favorites');
}

Legacy Synchronous Storage

The storage.* methods are legacy local storage helpers. Prefer clientData.* for new plugins when async reads are acceptable.

export function activate(context) {
  context.api.storage.set('quick-toggle', { enabled: true });

  const saved = context.api.storage.get('quick-toggle');

  context.api.logger.info('Legacy storage value', saved);

  context.api.storage.remove('quick-toggle');
}

Manifest Data Declarations

Declare important data keys in the manifest.

{
  "data": [
    {
      "key": "soundboard:volume",
      "scope": "client",
      "storage": "local"
    },
    {
      "key": "soundboard:favorites",
      "scope": "server",
      "storage": "serverData"
    }
  ]
}