object-storage

Implements GCS-backed object storage with presigned URL uploads for pnpm monorepo web apps.

Updated Apr 20, 2026
One-click install
npx skills add https://github.com/AmirEmad11/instabot --skill object-storage-amiremad11
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: object-storage
Source: https://github.com/AmirEmad11/instabot/tree/main/.local/skills/object-storage
Command: npx skills add https://github.com/AmirEmad11/instabot --skill object-storage-amiremad11

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill requires @google-cloud/storage, google-auth-library, @uppy/aws-s3, @uppy/core, @uppy/dashboard, @uppy/react, and includes references (resource) components.

What problem does it solve? Setting up file upload and storage in a web app requires wiring together cloud buckets, presigned URLs, access control, and client upload UI. This Skill provides a complete, ready-to-copy implementation of Replit's App Storage (GCS-backed object storage) for Express + React pnpm monorepo projects. ## Core Features & Use Cases - Presigned URL Upload Flow: Server generates presigned GCS URLs so clients upload files directly to Google Cloud Storage without proxying bytes through the backend. - Server Modules: Provides an ObjectStorageService (GCS client wrapper with Replit sidecar auth), an ACL policy framework, and Zod-validated Express routes for uploads and object serving. - Client Package: Ships an Uppy v5-based ObjectUploader component and a useUpload React hook for custom upload UIs. - Use Case: A user asks to add profile photo uploads to their React app. The Skill provisions the bucket, adds OpenAPI endpoints, copies server and client files, and wires up protected uploads with Replit Auth and ACL policies. ## Quick Start Ask the AI to set up object storage with file upload support in your pnpm monorepo web app.

Frequently Asked Questions about object-storage

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I add file uploads to an Express and React app?

Use a two-step presigned URL flow: the client sends JSON metadata to POST /api/storage/uploads/request-url, receives a presigned GCS URL, then uploads the file directly to Google Cloud Storage with a PUT request. The backend never handles file bytes.

How do presigned URL uploads work with Google Cloud Storage?

The server generates a presigned PUT URL via the Replit sidecar endpoint, valid for 900 seconds. The client uploads file bytes directly to that URL, bypassing the backend entirely. The returned objectPath is stored in your database for later serving.

Can I use this object storage setup with Expo or React Native?

No, this Skill is for web stacks only (Express plus React with Vite). For Expo or React Native mobile apps, use the expo_object_storage blueprint instead, which provides Expo-specific client utilities and avoids incompatible web libraries.

How do I protect uploaded files with user authentication?

Set up Replit Auth first, then uncomment the auth check block in routes/storage.ts to guard endpoints with req.isAuthenticated(). Use req.user.id as the owner when setting ACL policies via the objectAcl.ts framework. PostgreSQL is also required for protected uploads.

Why does Uppy v5 cause React version conflicts in pnpm?

Uppy v5 declares react>=19 as a peer dependency while the project uses React 18. Add pnpm overrides for react and react-dom in the root package.json to force a single React version, then run pnpm install.

What does the App Storage service suspended error mean?

This error indicates the cloud budget has been exceeded for object storage. Inform the user about the budget limit and call the notify_cloud_budget_exceeded tool with service_name set to object_storage. Do not use this handling for other error types.