The AddPipe Platform is now SOC 2 Type I attested. Read the announcement

Home/Product/Recording client

Video, audio and screen recording. One JavaScript client.

Embed a lightweight recorder with streaming uploads, automatic connection retries and a decade of workarounds for browser bugs. Record video up to 4K and audio on desktop and mobile, plus screen recording on desktop. Use our UI or your own. Nothing for users to install.

80 kB gzipped 4 HTTP requests WCAG AA UI EN FR DE ES + your own

One client. Four ways to capture.

The same embed and the same APIs whether you need a voice memo, a 4K webcam take, a screen walkthrough, or a file the user already has.

Audio

Microphone recording in a lighter audio-only mode, with a warning when the input level is too low to be useful.

DesktopMobile

Camera

Webcam and phone camera video up to 4K (3840×2160), with optional background blurring and a face-positioning guide.

DesktopMobile

Screen

Screen, window or tab, with system audio, microphone and an optional webcam overlay, on Chrome, Firefox and Safari.

Desktop

Upload

Users can submit an existing audio or video file through the same widget, and it goes through the same processing pipeline.

DesktopMobile

Millions of recordings a year means we meet every bug before you do.

Each of these started as a support ticket somewhere and is now a workaround in the client. The links go to the write-ups.

01 · ConnectionsHigh latency, low bandwidth, dropped links

02 · Browser changesBehavior that shifted between releases

03 · Browser bugsThings the spec never intended

04 · UsersReasonable things people do mid-recording

05 · CapabilitiesDevices that can't do what was asked

  • Older Android devices that fail to encode at the requested resolution, dropped to a codec they can handle instead of failing
  • Firefox's non-persistent camera dialog, worked around with a picture-in-picture playback mode

Camera and microphone selection that updates in real time.

Let users choose their camera and microphone from a list that updates as devices connect or disconnect. Disconnected devices stay visible, so users can see what changed. Explore the device selector.

01

Updates in real time

Connect a webcam or pair a headset after the page loads and it appears in the list, with a notification badge on the settings control.

02

Keeps showing disconnected devices

A device that vanished stays visible, marked as disconnected, so the user understands why their picture went dark instead of hunting for it.

03

Accounts for the switching delay

Switching cameras or mics takes a moment in every browser. The UI reflects the in-between state rather than freezing or flickering.

04

Respects browser-level decisions

When the browser or OS has already chosen or restricted a device, the selector follows that decision instead of fighting it.

Tested on the hardware your users actually own.

Every client release goes through real devices, virtual machines and a long list of corner cases, on macOS, Windows, iOS and Android.

Real devices

A shelf of machines chosen for being awkward:

  • A Windows PC with no sound card
  • A Mac mini, a popular Mac with no microphone
  • Webcams from Microsoft, Logitech and OBSBOT, including 60 fps and 4K models
  • An iPhone XS, the earliest iPhone with Continuity Camera
  • An older Android phone that can't encode at high resolutions

Virtual devices

UTM, Parallels and BrowserStack for immediate access to OS and browser combinations we don't keep on the shelf, desktop and mobile.

Corner cases

A maintained checklist of the ways a recording session goes sideways:

  • Connecting a webcam after the client initialized
  • Disconnecting a Bluetooth headset while recording
  • Taking a phone call mid-recording
  • Revoking permissions, sleeping the laptop, switching tabs

Easy to embed. Yours to control.

The 2.0 embed code mounts one or several recorders in a page or single-page app. The JS APIs let you hide the native UI entirely and react to every state change.

// hide AddPipe's controls, use your own buttons
PipeSDK.insert("recorder", {
  size: { width: 640, height: 390 },
  qualityurl: "avq/1080p.xml",
  accountHash: "YOUR_ACCOUNT_HASH",
  eid: "YOUR_ENV_ID",
  showMenu: false,
  mrt: 300
}, (recorder) => {
  // control API
  $("#start").onclick = () => recorder.record();
  $("#stop").onclick  = () => recorder.stopVideo();

  // events API
  recorder.onReadyToRecord      = () => enable("#start");
  recorder.onRecordingStarted   = () => showTimer();
  recorder.onConnectionClosed   = () => toast("Reconnecting…");
  recorder.onSaveOk = (id, name, duration) => done(name, duration);
});

HTML and JS embed codes

One embed per recorder, several per page if you need them, in plain HTML or from JavaScript.

JS Control API

Hide the native UI and call record, stop, playback and more from your own interface with the control API.

JS Events API

Ready, started, stopped, connection lost, saved: every state change fires an event on desktop and mobile.

npm and React

The npm package for bundlers, and a fully typed React hook for TypeScript and JavaScript projects. See the React demo.

The rest of what's in the 80 kB.

Streams as it records

Media is sent to the ingestion server from the first second. On a decent connection there's no upload wait when the user presses stop.

Delivered by CDN

pipe.js is served from Amazon CloudFront worldwide, or from our EU delivery servers for the EU silo. Four requests, 80 kB gzipped.

Your look, your size

Dimensions, colors and controls are configurable, or replace the UI entirely with the control API.

Four languages, or yours

English, French, German and Spanish built in, plus your own language file for anything else.

Accessible

Pipe’s recorder UI is built to WCAG 2.2 Level AA. Our VPAT documents current support criterion by criterion.

Background blurring

Blur what's behind the user for privacy-sensitive recordings such as interviews and identity checks.

Picture in picture

A PiP playback mode, added to work around Firefox's camera privacy dialog losing its state.

Time limits and countdown

Cap recording length per embed and show a countdown before recording starts.

Versioned, with a changelog

Every non-trivial change is published on the changelog with its build slug; versioning is documented.

Recording client FAQs.

Which browsers are supported?

All major desktop and mobile browsers on Windows, macOS, Linux, iOS and Android. Where a browser lacks a capability, the client degrades to what the device can do rather than failing; see the casebook above.

Do my users need an app or a AddPipe account?

No. Recording runs in the browser on your page. Your users never see or interact with AddPipe as a service.

Can I host pipe.js myself?

You can, but we advise against it: the client is updated frequently in response to browser changes, and a self-hosted copy misses those. If you must, pull the latest build regularly; the versioning docs explain how.

How big is the client and how is it loaded?

About 80 kB gzipped over four HTTP requests, served from Amazon CloudFront or, for EU-silo customers, from our EU delivery servers.

Is there a record of what changed?

Yes: the changelog lists non-trivial client changes with their build slugs.

How do I get started?

Start free trial, generate an embed code from the dashboard, paste it into a page and record. Recordings appear in the dashboard immediately.

What does it cost?

Plans start at $50 a month plus VAT or sales tax, and every plan begins with the free trial. Details on the pricing page.

What if I need help integrating?

Contact us and you'll hear back from an engineer. For work beyond AddPipe, our custom development partners can help.

Something else? Email us.

Try the recording client in your own app.

Embed the recorder and test it with your devices, browsers and workflows. Try the complete platform free for 14 days. No credit card required.