Skip to content

Blob Storage

Val Town now comes with blob storage built-in. It allows for storing any data: text, JSON, images. Access it via std/blob.

Blob storage is scoped globally to your account. If you set a blob in one val, you can retrieve it by the same key in another val. It’s backed by Cloudflare R2. Blob-stored data counts towards your total Val Town storage - 10mb on the free plan and 1gb on pro. Check our pricing page to learn more.


ExampleRun in Val Town ↗
import { blob } from "";
await blob.setJSON("myKey", { foo: "bar" });
export let blobDemo = await blob.getJSON("myKey");


These functions are the ones most commonly used for storing JSON data, including simple strings.

  • async getJSON(key: string) - Retrieves a blob as JSON for a given key. Returns undefined if the key is not found.
  • async setJSON(key: string, value: any) - Sets a blob for a given key with a value that is automatically converted to JSON.

List keys

  • async list(prefix?: string): List your blob keys. optionally provide a prefix to filter the query.

Copy key

  • async copy(previous: string, next: string): Copy a blob from one key to another.

Move key

  • async move(previous: string, next: string): Move a blob from one key to another.

Delete keys

  • async delete(key: string): Delete the specified key.

Lower-level get/set

We do provide access to the lower-level getter and setters, which are useful if you are storing non-JSON or binary data, need to stream in your response or request data, or do anything else lower-level.

  • async get(key: string): Retrieves a blob for a given key.
  • async set(key: string, value: string | BodyInit): Sets the blob value for a given key. See BodyInit.


Error Handling