A player, ready to embed.
Adaptive playback, subtitles and playback controls. Bring your video; Mave handles delivery.
DocsMave for developers
Web components for your front end. A REST API, webhooks and a CLI for everything behind it.
Mave handles encoding, adaptive streaming, subtitles and cookieless analytics, hosted in Europe. You keep control over your markup, your styling and your data.
<script
type="module"
src="https://cdn.video-dns.com/npm/@maveio/components/+esm"
></script>
<mave-player embed="ubg502qJu7jOKXP"></mave-player>import { Player } from "@maveio/components/react";
export default function Hero() {
return <Player embed="ubg502qJu7jOKXP" />;
}$ npm install @maveio/components
// Anywhere in your front end
import "@maveio/components";Works in plain HTML, React, Vue, Svelte and any CMS that lets you add HTML.
Components
Native custom elements that work in any framework, or none at all. Configure them with attributes, style them with CSS and extend them with slots.
<mave-player>Adaptive streaming, subtitles, audio tracks and themes. The heart of every embed.
<mave-clip>A muted loop that plays when it is visible and pauses when it is not. Use it like an image.
<mave-text>The transcript of a video on your page, synchronized with playback.
<mave-audio>Play audio uploads, or the audio tracks of a video, with the same controls.
<mave-upload>Let people upload from your own site, scoped with a token you sign.
<mave-list>Show the videos of your space or of a single collection.
<mave-files>Offer downloads of specific renditions of a video.
Configure
Every setting from the Mave dashboard is also an attribute. Set a color, pick the controls, load your own JavaScript theme or place your own HTML inside the player with slots.
Try the settings live<mave-player
embed="ubg502qJu7jOKXP"
color="#2563eb"
theme="/themes/brand.js"
controls="play time seek volume subtitles fullscreen"
subtitles="all"
active-subtitle="original">
<!-- Shown once the video has ended -->
<div slot="end-screen" style="display: none;">
<a href="/demo">Book a demo</a>
</div>
</mave-player>API and webhooks
Create videos from a URL, organize them in collections and react to what happens with webhooks, instead of polling.
Authenticate every request with a bearer token from the dashboard. Read-only keys can make GET requests; creating, updating and deleting needs a read-write key.
curl -X POST https://api.mave.io/v1/videos \
-H "Authorization: Bearer $MAVE_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"collection": "ubg50fRgMoWlCUU",
"input_url": "https://example.com/launch.mp4"
}'Webhook events
video.createdvideo.uploadedvideo.processingvideo.readyvideo.archivedvideo.unarchivedvideo.deletedIn your control
Sign tokens on your own server, fetch every rendition from a predictable URL and generate frames on the fly.
Add <mave-upload> to your site and sign a JWT scoped to a space, a collection or a single video. Give it an expiry, so you can revoke access at any time.
Only play videos on your own pages. The protected player needs a token signed with your API key, with an expiry you choose.
Hotlink protectionEvery rendition, manifest and poster has a deterministic URL. Use them in your own player or pipeline.
space-ubg50.video-dns.com/2qJu7jOKXP/h264_sd.mp4
Sources Request any frame of a video as an image. Set the time and size in the URL.
image.mave.io/ubg502qJu7jOKXP.jpg?time=4&width=360
Images $ brew install maveio/tap/mave
$ mave login
$ mave videos upload ./video.mp4 --wait
$ mave collections create --name "Product videos"
$ mave videos list --format tableCLI
Upload files, check your library and create collections with the Mave CLI.
Commands return JSON by default, so the CLI fits in scripts, CI and AI assistants that run terminal commands. Moving from Vimeo? Import your videos with their titles and folders.
CLI documentationOpen by default
The components that power the player and the client-side package that collects viewing data are open source. See exactly what runs on your website.
Hosted in Europe. No tracking cookies. No lock-in.
Create a free account, upload a video and paste the snippet. Or read the docs first.