Mave for developers

Video in a few
lines of code.

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>

Works in plain HTML, React, Vue, Svelte and any CMS that lets you add HTML.

Player & embeds

Video that fits your website.

A full player, a quiet background clip or video opened on click. Try them here — using the same components you can put on your own site.

A player, ready to embed.

Adaptive playback, subtitles and playback controls. Bring your video; Mave handles delivery.

Docs

Video as part of the page.

A muted, looping clip for a header, product detail or visual story. No player controls in the way.

Clip documentation

Open video on click.

Keep your page focused. Let visitors open the full player when they want to watch.

How to add a popup
View the embed code
<script type="module" src="https://cdn.video-dns.com/npm/@maveio/components/+esm"></script>

<!-- Player -->
<mave-player embed="ubg502qJu7jOKXP"></mave-player>

<!-- Clip -->
<mave-clip embed="ubg500Zc6dNVD8e"></mave-clip>

<!-- Popup -->
<button x-mave-pop="ubg506rsMmzDwXQ">Watch the video</button>

Works with your website.

Use an embed, a component or a CMS integration. You don't need to rebuild your website around Mave.

Components

Web components for
every part of video.

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.

Configure

Attributes,
not SDKs.

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
index.html
<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

Automate everything
behind the player.

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.

Create a video
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.created
  • video.uploaded
  • video.processing
  • video.ready
  • video.archived
  • video.unarchived
  • video.deleted

In your control

Your app. Your rules.

Sign tokens on your own server, fetch every rendition from a predictable URL and generate frames on the fly.

Uploads from your app

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.

Upload component

Hotlink protection

Only play videos on your own pages. The protected player needs a token signed with your API key, with an expiry you choose.

Hotlink protection

Predictable sources

Every 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

Frames on the fly

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 table

CLI

Your library,
from the terminal.

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 documentation

Open by default

Read the code.
Build on it.

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.

Start building.

Create a free account, upload a video and paste the snippet. Or read the docs first.