FeaturesTemplatesShowcaseTownie
AI
BlogDocsPricing
Log inSign up
bons
bonsblob
Remix of std/blob
Public
Like
blob
Home
Code
2
README.md
S
main.tsx
Branches
1
Pull requests
Remixes
History
Environment variables
Val Town is a collaborative website to build and scale JavaScript apps.
Deploy APIs, crons, & store data – all from the browser, and deployed in miliseconds.
Sign up now
Code
/
Code
/
Search
README.md

Blob Storage - Docs ↗

Val Town comes with blob storage built-in. It allows for storing any data, like text, JSON, or images. You can 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.

You may find this admin viewer helpful for viewing and editing your blobs.

Get JSON
Create val
import { blob } from "https://esm.town/v/std/blob"; let blobDemo = await blob.getJSON("myKey"); console.log(blobDemo); // returns `undefined` if not found
Set JSON
Create val
import { blob } from "https://esm.town/v/std/blob"; await blob.setJSON("myKey", { hello: "world" });
List keys
Create val
import { blob } from "https://esm.town/v/std/blob"; let allKeys = await blob.list(); console.log(allKeys); const appKeys = await blob.list("app_"); console.log(appKeys); // all keys that begin with `app_`
Delete by key
Create val
import { blob } from "https://esm.town/v/std/blob"; await blob.delete("myKey");

Examples

  • Counter
  • RSS Notifications (saving the last run time)
  • Picture: Save & Read

Error Handling

  • blob.get can throw ValTownBlobNotFoundError
  • Any method can throw ValTownBlobError for unexpected errors.

Utilities

Our Blob SDK also includes some utility functions to make working with blobs easier.

Copy
Create val
import { blob } from "https://esm.town/v/std/blob"; await blob.copy("myKey", "myKeyCopy");
Move
Create val
import { blob } from "https://esm.town/v/std/blob"; await blob.move("myKey", "myKeyNew");

Lower-level API

We 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.

Limitations

  • 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.
  • Keys for blobs can be up to 512 characters long.

📝 Edit docs

Code
README.md
S
main.tsx
Go to top
X (Twitter)
Discord community
GitHub discussions
YouTube channel
Bluesky
Product
FeaturesPricing
Developers
DocsStatusAPI ExamplesNPM Package Examples
Explore
ShowcaseTemplatesNewest ValsTrending ValsNewsletter
Company
AboutBlogCareersBrandhi@val.town
Terms of usePrivacy policyAbuse contact
© 2025 Val Town, Inc.