Upload files to Firebase Storage with automatic retries, batch uploads, and pre-upload validation.
Full documentation: firebase-storage-kit.vercel.app/docs
npm install firebase firebase-storage-kitAlso works with Yarn, pnpm, or Bun. See Installation for all package managers.
import { getStorage } from "firebase/storage";
import { StorageManager } from "firebase-storage-kit";
const storage = getStorage(app);
const manager = new StorageManager(storage);
const handle = manager.uploadFile(file, {
path: `uploads/${file.name}`,
validate: {
maxSizeBytes: 10 * 1024 * 1024,
allowedMimeTypes: ["image/jpeg", "image/png", "image/webp"],
allowedExtensions: [".jpg", ".jpeg", ".png", ".webp"],
},
retry: { maxRetries: 3 },
});
handle.on("progress", (upload) => {
console.log(upload.progress);
});
handle.on("retry", ({ attempt, maxAttempts, delayMs }) => {
console.log(`Retry ${attempt}/${maxAttempts} in ${delayMs}ms`);
});
handle.on("success", (upload) => {
console.log(upload.downloadURL);
});
handle.on("error", (upload) => {
if (upload.error?.name === "ValidationError") {
console.error("Invalid file:", upload.error.message);
return;
}
console.error("Upload failed:", upload.error?.message);
});import { useStorageManager, useUpload } from "firebase-storage-kit/react";
const manager = useStorageManager(storage);
const handle = manager.uploadFile(file, {
path: `uploads/${file.name}`,
validate: {
maxSizeBytes: 10 * 1024 * 1024,
allowedMimeTypes: ["image/jpeg", "image/png", "image/webp"],
allowedExtensions: [".jpg", ".jpeg", ".png", ".webp"],
},
retry: { maxRetries: 3 },
});
const upload = useUpload(handle);See React hooks.
MIT