How to Record Your Screen in the Browser (No Software Needed)

Use the browser's built-in Screen Capture API to record your screen, window, or tab with zero installs.

🎬 πŸ–₯️ πŸŽ™οΈ ⏺️ πŸ“Ή

TL;DR: Modern browsers have a built-in Screen Capture API that lets you record your screen, a specific window, or a browser tab — no downloads, no extensions, no accounts. It uses two APIs: getDisplayMedia (captures the screen) and MediaRecorder (saves it as a video file). Everything stays local on your device.

Quick scenario: your coworker finds a weird bug and asks you to record it. Or you need to make a 30-second tutorial showing someone how to use a feature. In the old days, you would download OBS, spend 10 minutes configuring it, realize the audio is not working, troubleshoot that, and by then you have forgotten what you were trying to record.

Here is the modern alternative: just do it right in your browser. No software to install, no extensions to add, no account to create. Your browser already has a screen recording API built in. Let me show you how it works.

2015: "I need to record my screen. Let me download three apps, watch a YouTube tutorial, and sacrifice a USB microphone to the tech gods." 2026: "Let me click this button."

What Your Browser Can Capture

When you start a screen recording, the browser gives you three choices through its native permission dialog:

πŸ”’ The user always picks what to share. No website can secretly record your screen. Ever.

A visible indicator (usually a colored border or "sharing" badge) appears while recording is active. You can stop sharing at any time through the browser UI. Privacy is baked in.

The Two APIs That Make It Work

1. getDisplayMedia (Start Capturing)

This API prompts the user to pick what to share and returns a video stream:

async function startCapture() {
  const stream = await navigator.mediaDevices.getDisplayMedia({
    video: {
      width: { ideal: 1920 },
      height: { ideal: 1080 },
      frameRate: { ideal: 30 }
    },
    audio: true  // request tab/system audio
  });
  return stream;
}

The audio: true option captures tab audio (like a YouTube video playing). System-wide audio depends on your OS — macOS does not support it through the browser, unfortunately.

2. MediaRecorder (Save It)

Once you have the video stream, MediaRecorder turns it into a downloadable file:

function recordStream(stream) {
  const chunks = [];
  const recorder = new MediaRecorder(stream, {
    mimeType: 'video/webm;codecs=vp9'
  });

  recorder.ondataavailable = (e) => {
    if (e.data.size > 0) chunks.push(e.data);
  };

  recorder.onstop = () => {
    const blob = new Blob(chunks, { type: 'video/webm' });
    const url = URL.createObjectURL(blob);
    const a = document.createElement('a');
    a.href = url;
    a.download = 'recording.webm';
    a.click();
    URL.revokeObjectURL(url);
  };

  recorder.start(1000); // 1-second chunks
  return recorder;
}

A Complete Working Example

Here is a minimal but fully functional screen recorder in about 50 lines of JavaScript. This is essentially what our tool does under the hood:

let mediaRecorder;
let recordedChunks = [];

document.getElementById('start').addEventListener('click', async () => {
  const stream = await navigator.mediaDevices.getDisplayMedia({
    video: { frameRate: { ideal: 30 } },
    audio: true
  });

  recordedChunks = [];
  mediaRecorder = new MediaRecorder(stream, {
    mimeType: getSupportedMimeType()
  });

  mediaRecorder.ondataavailable = (e) => {
    if (e.data.size > 0) recordedChunks.push(e.data);
  };

  mediaRecorder.onstop = () => {
    const blob = new Blob(recordedChunks, { type: mediaRecorder.mimeType });
    const url = URL.createObjectURL(blob);
    const a = document.createElement('a');
    a.href = url;
    a.download = `recording-${Date.now()}.webm`;
    a.click();
  };

  // Auto-stop when user clicks browser's "Stop sharing" button
  stream.getVideoTracks()[0].onended = () => {
    if (mediaRecorder.state !== 'inactive') mediaRecorder.stop();
  };

  mediaRecorder.start(1000);
});

document.getElementById('stop').addEventListener('click', () => {
  mediaRecorder.stop();
  mediaRecorder.stream.getTracks().forEach(t => t.stop());
});

function getSupportedMimeType() {
  const types = [
    'video/webm;codecs=vp9,opus',
    'video/webm;codecs=vp8,opus',
    'video/webm',
    'video/mp4'
  ];
  return types.find(t => MediaRecorder.isTypeSupported(t)) || '';
}
🎯 ~50 lines of JavaScript. No frameworks. No dependencies. Just browser APIs.

Adding Microphone Audio (Voiceovers)

Want to narrate while recording? You need to merge the screen stream with a microphone stream:

async function getScreenWithMicrophone() {
  const screenStream = await navigator.mediaDevices.getDisplayMedia({
    video: true, audio: true
  });

  const micStream = await navigator.mediaDevices.getUserMedia({
    audio: { echoCancellation: true, noiseSuppression: true }
  });

  // Merge audio tracks
  const audioContext = new AudioContext();
  const destination = audioContext.createMediaStreamDestination();

  if (screenStream.getAudioTracks().length > 0) {
    const systemSource = audioContext.createMediaStreamSource(screenStream);
    systemSource.connect(destination);
  }

  const micSource = audioContext.createMediaStreamSource(micStream);
  micSource.connect(destination);

  return new MediaStream([
    ...screenStream.getVideoTracks(),
    ...destination.stream.getAudioTracks()
  ]);
}

The echoCancellation and noiseSuppression options are your friends here. Without them, your recording might include echo feedback or that lovely keyboard clacking soundtrack nobody asked for.

Format Support Across Browsers

Browser Formats
Chrome / EdgeWebM (VP8, VP9), sometimes MP4
FirefoxWebM (VP8)
SafariMP4 (H.264), WebM in newer versions

Need MP4 for social media or PowerPoint? Record as WebM first, then convert with FFmpeg or an online converter.

Tips for Better Recordings

Screen recording does not work on mobile browsers — getDisplayMedia is desktop only. On phones, use the built-in OS screen recorder (iOS Control Center or Android quick settings).

Common Use Cases

Fun fact: every screen recording of a bug report increases the chance of it actually getting fixed by approximately 800%. I may have made that number up, but you know it feels right.

Browser-based screen recording has come a long way. For quick demos, bug reports, and tutorials, it completely eliminates the need for separate software. The API is simple, the quality is solid, and — best of all — everything stays right on your machine.

Try It Yourself

Record your screen, window, or tab directly in your browser. No downloads, no sign-up. Your recording never leaves your device.

Open Screen Recorder →