storage
Use when uploading or downloading files, generating presigned URLs, configuring storage ACLs, or persisting file references (avatars, attachments, images) in a Butterbase app
npx skills add butterbase-ai/butterbase-skills --skill storage --agent claude-code
Same command for any agent — swap --agent for codex, cursor, copilot.
Weekly change comes from our own snapshots, not the repository page — it measures attention, not adoption.
# Butterbase Storage Butterbase stores files in S3 (or LocalStack in dev) and exposes them via presigned URLs. Every file gets a stable `object_id` (UUID) that you persist in your tables; URLs are generated on demand and expire. All storage operations go through one tool: **`manage_storage`** with an `action` parameter. | Action | Purpose | |--------|---------| | `upload_url` | Generate a 15-minute presigned PUT URL and reserve an `object_id` | | `download_url` | Generate a 1-hour presigned GET URL for a stored object | | `list` | List objects (scoped by caller's role) | | `delete` | Permanently remove an object from S3 + database | | `update_config` | Toggle app-level `publicReadEnabled` and other storage settings | --- ## 1. The mental model: `object_id` vs `s3_key` | Field | What it is | When you use it | |-------|-----------|-----------------| | `object_id` | UUID, stable, app-level handle | Persist in your tables (e.g. `users.avatar_id`, `posts.image_id`) | | `s3_key` | Internal bucket path like `app_abc/user_uuid/file.jpg` | Internal only — **never** treat this as a URL | **Critical:** `s3_key` is **not** a URL. You cannot use it as `<img src>` or `<a href>`. Always store the
- 1. The mental model: objectid vs s3key
- 2. The upload lifecycle
- Step 1 — request an upload URL
- Step 2 — PUT the bytes
- Step 3 — persist the objectid
- 3. Generating download URLs
- 4. Access control
- Per-object public flag
- App-wide public read
- 5. Listing and deleting
- 6. Quotas & error codes
- 7. Common patterns
- User avatar
- Public marketing image
curl -X PUT "{upload_url}" \What does the storage skill do?
Use when uploading or downloading files, generating presigned URLs, configuring storage ACLs, or persisting file references (avatars, attachments, images) in a Butterbase app
How do I install it?
Run `npx skills add butterbase-ai/butterbase-skills --skill storage --agent claude-code` — it drops the skill into your project so the agent can pick it up. Swap the --agent value for codex, cursor or copilot if you use one of those.
Where does this skill come from?
From butterbase-ai/butterbase-skills, a repository with 532 stars. We read it straight from the repository tree rather than a submitted listing, so what you see here is what is actually published.
Is a popular skill a good skill?
Not necessarily. Stars measure attention, not adoption — a repository can trend for a week and be abandoned. That is why we show the weekly change from our own snapshots next to the total, instead of a single flattering number.