Multi-video uploads for React and React Native. Drop zone, file list, progress tracking, retries, and validation, out of the box.
See the codeHeadless cross-platform video upload for React and React Native. Manage upload state, progress, validation, and status polling — bring your own UI or use the included composable components.
| Package | Description |
|---|---|
@hyperserve/video-uploader | Core hooks, state machine, validation |
@hyperserve/video-uploader-react | Web UI components (DropZone, FileList, etc.) |
@hyperserve/video-uploader-react-native | React Native UI components |
@hyperserve/video-uploader-adapter-hyperserve | Official backend adapter for Hyperserve |
# Core + web components + Hyperserve adapter
npm install @hyperserve/video-uploader @hyperserve/video-uploader-react @hyperserve/video-uploader-adapter-hyperserve
# React Native
npm install @hyperserve/video-uploader @hyperserve/video-uploader-react-native @hyperserve/video-uploader-adapter-hyperserve
This example uses the Hyperserve adapter, which needs an API key from a free Hyperserve account. Any other backend works too via a custom adapter.
import { createHyperserveConfig } from "@hyperserve/video-uploader-adapter-hyperserve";
import { UploadProvider } from "@hyperserve/video-uploader";
import { DropZone, FileList } from "@hyperserve/video-uploader-react";
const config = createHyperserveConfig({
createUpload: async (file, options) => {
const raw = (file as import("@hyperserve/video-uploader").WebFileRef).raw;
return fetch("/api/create-upload", {
method: "POST",
body: JSON.stringify({ name: raw.name, ...options }),
}).then((r) => r.json());
},
completeUpload: async (videoId) => {
await fetch(`/api/complete-upload/${videoId}`, { method: "POST" });
},
// optional: omit if you drive status updates via webhook or SSE instead of polling
pollVideoStatus: async (videoId) =>
fetch(`/api/video-status/${videoId}`).then((r) => r.json()),
uploadOptions: { isPublic: true, resolutions: ["480p", "1080p"] },
});
export function App() {
return (
<UploadProvider config={config}>
<DropZone supportingText="MP4, WebM, MOV — up to 500 MB" />
<FileList />
</UploadProvider>
);
}
Full docs at videouploader.fyi — guides, component API, adapter setup, and custom backend walkthrough.
MIT
Built and maintained by Hyperserve, video infrastructure for developers.
237 commits
TypeScript
77.7%
MDX
18.6%
JavaScript
1.8%
Multi-video uploads for React and React Native. Drop zone, file list, progress tracking, retries, and validation, out of the box.
See the codeHeadless cross-platform video upload for React and React Native. Manage upload state, progress, validation, and status polling — bring your own UI or use the included composable components.
| Package | Description |
|---|---|
@hyperserve/video-uploader | Core hooks, state machine, validation |
@hyperserve/video-uploader-react | Web UI components (DropZone, FileList, etc.) |
@hyperserve/video-uploader-react-native | React Native UI components |
@hyperserve/video-uploader-adapter-hyperserve | Official backend adapter for Hyperserve |
# Core + web components + Hyperserve adapter
npm install @hyperserve/video-uploader @hyperserve/video-uploader-react @hyperserve/video-uploader-adapter-hyperserve
# React Native
npm install @hyperserve/video-uploader @hyperserve/video-uploader-react-native @hyperserve/video-uploader-adapter-hyperserve
This example uses the Hyperserve adapter, which needs an API key from a free Hyperserve account. Any other backend works too via a custom adapter.
import { createHyperserveConfig } from "@hyperserve/video-uploader-adapter-hyperserve";
import { UploadProvider } from "@hyperserve/video-uploader";
import { DropZone, FileList } from "@hyperserve/video-uploader-react";
const config = createHyperserveConfig({
createUpload: async (file, options) => {
const raw = (file as import("@hyperserve/video-uploader").WebFileRef).raw;
return fetch("/api/create-upload", {
method: "POST",
body: JSON.stringify({ name: raw.name, ...options }),
}).then((r) => r.json());
},
completeUpload: async (videoId) => {
await fetch(`/api/complete-upload/${videoId}`, { method: "POST" });
},
// optional: omit if you drive status updates via webhook or SSE instead of polling
pollVideoStatus: async (videoId) =>
fetch(`/api/video-status/${videoId}`).then((r) => r.json()),
uploadOptions: { isPublic: true, resolutions: ["480p", "1080p"] },
});
export function App() {
return (
<UploadProvider config={config}>
<DropZone supportingText="MP4, WebM, MOV — up to 500 MB" />
<FileList />
</UploadProvider>
);
}
Full docs at videouploader.fyi — guides, component API, adapter setup, and custom backend walkthrough.
MIT
Built and maintained by Hyperserve, video infrastructure for developers.
237 commits
TypeScript
77.7%
MDX
18.6%
JavaScript
1.8%