Skip to main content

Supported browsers

Minecraft Web Client uses modern web APIs and requires a recent browser version.

Desktop browsers

Chrome / Edge

Minimum version: 103+Status: ✅ Fully supportedBest performance and all features work.

Firefox

Status: ✅ Fully supportedAll features work with good performance.

Safari

Status: ✅ Fully supportedWorks well on macOS and iOS.

Opera

Status: ⚠️ Supported with caveatsSee known issues below.

Mobile browsers

iOS Safari

Minimum version: iOS 14+Status: ✅ Fully supportedTouch controls work great. Note: 300 MB file limit for zip files.

Android Chrome

Minimum version: Android 13+, Chrome 103+Status: ✅ Fully supportedExcellent performance with touch controls.

Minimum browser versions

Based on the project’s browserslist configuration:

Production targets

{
  "iOS": ">= 14",
  "Android": ">= 13",
  "Chrome": ">= 103",
  "not dead": true,
  "not ie <= 11": true,
  "not op_mini all": true,
  "> 0.5%": true
}
Not supported: Internet Explorer, Opera Mini

Required browser features

The client uses several modern web APIs:

Essential features

Required for 3D rendering using Three.js.Check support: Open browser console and type:
!!document.createElement('canvas').getContext('webgl2')
Required for connecting to proxy servers and multiplayer.All modern browsers support this.
Used for storing worlds, settings, and cache.Note: Private/incognito mode may have limited storage.
Used for mesher workers (4 workers for chunk rendering).All modern browsers support this.
Required for capturing mouse movement in-game.User must click to grant permission.

Enhanced features (Chromium only)

These features improve the experience but aren’t required:
API: navigator.keyboard.lock()Availability: Chromium browsers onlyPurpose: Allows using any key combination (like Ctrl+W) in fullscreen without triggering browser shortcuts.
API: navigator.keyboard.getLayoutMap()Availability: Chromium browsers onlyPurpose: Displays correct keyboard symbols for keybindings on different layouts (QWERTY vs AZERTY).
API: requestPointerLock({ unadjustedMovement: true })Availability: Most modern browsersPurpose: Disables system mouse acceleration (important for Mac users). Also known as “raw input”.
This is enabled by default in game settings for better control precision.
API: window.crypto.subtleAvailability: All modern browsersPurpose: Required for chat features when joining online servers with authentication.

Known browser issues

Opera Mini

Issue: Right-click-and-hold opens a new tab due to mouse gestures.Solution: Disable mouse gestures in Opera Mini settings.

Vivaldi

Issue: Some users experience control issues with raw input.Solution: Disable ControlsRaw Input in game settings if experiencing problems.

Safari (all versions)

Safari has some limitations with Web APIs but the game still works well. Some advanced keyboard features may not be available.

Mobile-specific considerations

iOS limitations

iOS Safari has a ~300 MB limit for files loaded into memory.Impact: Large zip world files may fail to load.Workaround: Use folder loading or smaller worlds.
iOS may restrict storage in private browsing mode.Solution: Use normal browsing mode for world saves.
The virtual keyboard may interfere with touch controls.Solution: Use joystick controls and minimize chat usage.

Android optimizations

  • Use Chrome for best performance
  • Close background apps
  • Reduce render distance in settings
  • Enable hardware acceleration in Chrome flags

Testing infrastructure

This project is tested with BrowserStack.
Special thanks to BrowserStack for providing testing infrastructure!

Performance expectations

Desktop

  • Render distance: 8-16 chunks (depending on hardware)
  • Frame rate: 60+ FPS on modern hardware
  • Chunk loading: Near-instant with mesher workers

Mobile

  • Render distance: 4-8 chunks recommended
  • Frame rate: 30-60 FPS (device dependent)
  • Battery usage: Moderate to high
Reduce render distance in SettingsVideo for better performance on mobile.

Feature detection

You can check browser support in the console:
// Check WebGL2 support
const canvas = document.createElement('canvas')
const gl = canvas.getContext('webgl2')
console.log('WebGL2:', !!gl)

// Check Pointer Lock support
console.log('Pointer Lock:', 'pointerLockElement' in document)

// Check Keyboard Lock support (Chromium only)
console.log('Keyboard Lock:', 'keyboard' in navigator && 'lock' in navigator.keyboard)

// Check raw input support
console.log('Raw Input:', 'DocumentOrShadowRoot' in window)

// Check storage
if ('storage' in navigator && 'estimate' in navigator.storage) {
  navigator.storage.estimate().then(estimate => {
    console.log('Storage available:', (estimate.quota / 1024 / 1024 / 1024).toFixed(2) + ' GB')
  })
}

Browser permissions

The game requires these permissions:
When requested: When you click to start playingPurpose: Capture mouse movement for looking aroundRequired: Yes
When requested: When entering fullscreen (Chromium only)Purpose: Use game keybindings without triggering browser shortcutsRequired: No (enhances experience)
When requested: When loading a folderPurpose: Read and write world filesRequired: Only for folder loading
When requested: Never (not currently used)Purpose: N/ARequired: No

Troubleshooting compatibility

Possible causes:
  • WebGL2 not supported
  • Hardware acceleration disabled
  • Browser too old
Solutions:
  1. Update your browser to the latest version
  2. Enable hardware acceleration in browser settings
  3. Try a different browser (Chrome recommended)
  4. Check browser console for errors (F12)
Possible causes:
  • Pointer lock denied
  • Browser extension interfering
  • Incorrect focus
Solutions:
  1. Click the game window to request pointer lock
  2. Disable browser extensions temporarily
  3. Ensure game window has focus
  4. Try raw input toggle in settings
Possible causes:
  • Too many workers/tabs open
  • Integrated graphics
  • Old hardware
Solutions:
  1. Close other browser tabs
  2. Reduce render distance
  3. Disable resource packs
  4. Use Chrome for better performance
Possible causes:
  • Private browsing mode
  • Storage quota exceeded
  • iOS file size limit
Solutions:
  1. Use normal browsing mode
  2. Clear browser cache/data
  3. Use smaller world files on iOS
  4. Check available storage

Advanced browser features used

For developers and curious users, here are the rare/advanced Web APIs used:
APIUsageBrowser support
Crypto.subtleChat authentication for online serversAll modern browsers
requestPointerLock({ unadjustedMovement: true })Raw mouse input (disable acceleration)Chrome, Firefox, Safari
navigator.keyboard.lock()Capture all keys in fullscreenChromium only
navigator.keyboard.getLayoutMap()Display correct keybinding symbolsChromium only
WebGL23D rendering with Three.jsAll modern browsers
Web WorkersMesher workers for chunk renderingAll modern browsers
File System Access APIRead/write world foldersChromium, Edge, Safari (partial)

Next steps

Quickstart

Start playing now

Mobile guide

Optimize for mobile devices

Settings

Configure for your device

Debugging

Browser console and debugging

Build docs developers (and LLMs) love