Where to store global binary data for a vscode extension

Viewed 3214

I've written a language server extension for VS code. In order to improve start-up time, I'd like to cache some global state. I'm struggling to find a safe, user transparent, location.

  • The cache is shared between all workspaces
  • It consists of 200-300MB of serialized data
  • It should persist between updates of the extension
  • The extension is cross-platform

I've discovered the following four options, but none of them seem appropriate:

  1. ExtensionContext.extensionPath: This is almost perfect. Obvious to the user, safe sandboxed space. However, it's wiped on extension update.
  2. ExtensionContext.storagePath: This is not global, and hard for the user to clear, so would very quickly end up using GBs of storage space.
  3. ExtensionContext.globalState: Placing 300MB of binary data into a JSON dictionary store seems bad.
  4. %UserData%/linux/OSX equivalents: Adding and deleting files in uncontrolled general userspace is a risk I'd rather avoid.

Where's the appropriate place to store this data?

2 Answers

The January 2019 release of VS Code added ExtensionContext.globalStoragePath, which is a global version of storagePath

An absolute file path in which the extension can store global state. The directory might not exist on disk and creation is up to the extension. However, the parent directory is guaranteed to be existent.

https://code.visualstudio.com/updates/v1_31#_global-storage-path

Related