npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

webrtc2-config

v1.0.0

Published

WebRTC2 Config - Configuration management for WebRTC applications with STUN/TURN servers, ICE settings, media constraints, and cross-platform defaults

Readme

@webrtc2/config - WebRTC Configuration Management

npm version TypeScript WebRTC

Configuration management for WebRTC applications - STUN/TURN servers, ICE settings, media constraints, and cross-platform defaults for React Native, Web, and Electron.

🚀 WebRTC Configuration Made Simple

@webrtc2/config provides comprehensive configuration management:

  • 🧊 ICE Server Configuration: STUN/TURN server management
  • �� Media Constraints: Video, audio, and screen sharing settings
  • 🌐 Cross-Platform Defaults: Optimized settings for each platform
  • ⚙️ Environment-Based Config: Development, staging, production
  • 🔧 Dynamic Configuration: Runtime configuration updates
  • 📊 Performance Presets: Optimized settings for different use cases

📦 Installation

npm install @webrtc2/config

🎯 Quick Start

Basic Configuration

import { 
  createWebRTCConfig, 
  defaultWebRTCConfig,
  getOptimalConfig 
} from '@webrtc2/config';

// Use default configuration
const config = defaultWebRTCConfig;

// Create custom configuration
const customConfig = createWebRTCConfig({
  iceServers: [
    { urls: 'stun:stun.l.google.com:19302' },
    {
      urls: 'turn:your-turn-server.com:3478',
      username: 'user',
      credential: 'password'
    }
  ],
  enableVideo: true,
  enableAudio: true
});

// Get platform-optimized configuration
const mobileConfig = getOptimalConfig('mobile');
const desktopConfig = getOptimalConfig('desktop');

Environment-Based Configuration

import { 
  ConfigManager,
  Environment 
} from '@webrtc2/config';

const configManager = new ConfigManager();

// Load configuration for different environments
const devConfig = configManager.getConfig(Environment.DEVELOPMENT);
const prodConfig = configManager.getConfig(Environment.PRODUCTION);

console.log('Development STUN servers:', devConfig.ice.stunServers);
console.log('Production TURN servers:', prodConfig.ice.turnServers);

🧊 ICE Server Configuration

STUN Server Setup

import { 
  STUNConfig,
  createSTUNServers,
  validateSTUNServers 
} from '@webrtc2/config';

// Create STUN server configuration
const stunConfig: STUNConfig = {
  servers: [
    'stun:stun.l.google.com:19302',
    'stun:stun1.l.google.com:19302',
    'stun:stun2.l.google.com:19302'
  ],
  timeout: 5000,
  retries: 3
};

const stunServers = createSTUNServers(stunConfig);

// Validate STUN servers
const validation = await validateSTUNServers(stunServers);
console.log('STUN validation results:', validation);

TURN Server Configuration

import { 
  TURNConfig,
  createTURNServers,
  loadBalanceTURNServers 
} from '@webrtc2/config';

// TURN server configuration
const turnConfig: TURNConfig = {
  servers: [
    {
      urls: ['turn:turn1.example.com:3478', 'turns:turn1.example.com:5349'],
      username: 'user1',
      credential: 'password1',
      region: 'us-east-1',
      priority: 1
    },
    {
      urls: ['turn:turn2.example.com:3478', 'turns:turn2.example.com:5349'],
      username: 'user2',
      credential: 'password2',
      region: 'eu-west-1',
      priority: 2
    }
  ],
  loadBalancing: 'round-robin',
  failover: true,
  credentialType: 'password'
};

const turnServers = createTURNServers(turnConfig);

// Load balance TURN servers based on user location
const balancedServers = await loadBalanceTURNServers(turnServers, 'us-east-1');

ICE Configuration Optimization

import { 
  ICEConfig,
  optimizeICEConfig,
  createICEConfiguration 
} from '@webrtc2/config';

// Comprehensive ICE configuration
const iceConfig: ICEConfig = {
  stunServers: ['stun:stun.l.google.com:19302'],
  turnServers: [
    {
      urls: 'turn:turn.example.com:3478',
      username: 'user',
      credential: 'password'
    }
  ],
  iceCandidatePoolSize: 10,
  bundlePolicy: 'max-bundle',
  rtcpMuxPolicy: 'require',
  iceTransportPolicy: 'all',
  enableIPv6: true,
  enableDscp: true
};

// Optimize for specific network conditions
const optimizedConfig = optimizeICEConfig(iceConfig, {
  networkType: 'cellular',
  bandwidth: 'limited',
  latency: 'high'
});

// Create RTCConfiguration
const rtcConfig = createICEConfiguration(optimizedConfig);

🎥 Media Configuration

Video Constraints

import { 
  VideoConfig,
  createVideoConstraints,
  getVideoPresets 
} from '@webrtc2/config';

// Video configuration presets
const videoPresets = getVideoPresets();
console.log('Available presets:', videoPresets);
// { '240p': {...}, '480p': {...}, '720p': {...}, '1080p': {...} }

// Custom video configuration
const videoConfig: VideoConfig = {
  resolution: {
    width: { ideal: 1280, max: 1920, min: 640 },
    height: { ideal: 720, max: 1080, min: 480 }
  },
  frameRate: { ideal: 30, max: 60, min: 15 },
  facingMode: 'user',
  aspectRatio: 16/9,
  codec: 'VP9',
  bitrate: {
    max: 2000000,
    start: 1000000,
    min: 500000
  }
};

const videoConstraints = createVideoConstraints(videoConfig);

Audio Constraints

import { 
  AudioConfig,
  createAudioConstraints,
  getAudioPresets 
} from '@webrtc2/config';

// Audio configuration
const audioConfig: AudioConfig = {
  sampleRate: 48000,
  channelCount: 2,
  echoCancellation: true,
  noiseSuppression: true,
  autoGainControl: true,
  googEchoCancellation: true,
  googAutoGainControl: true,
  googNoiseSuppression: true,
  googHighpassFilter: true,
  codec: 'OPUS',
  bitrate: {
    max: 128000,
    start: 64000,
    min: 32000
  }
};

const audioConstraints = createAudioConstraints(audioConfig);

// Audio presets for different use cases
const musicConfig = getAudioPresets().music;
const voiceConfig = getAudioPresets().voice;
const podcastConfig = getAudioPresets().podcast;

Screen Sharing Configuration

import { 
  ScreenShareConfig,
  createScreenShareConstraints 
} from '@webrtc2/config';

// Screen sharing configuration
const screenConfig: ScreenShareConfig = {
  video: {
    width: { ideal: 1920, max: 3840 },
    height: { ideal: 1080, max: 2160 },
    frameRate: { ideal: 15, max: 30 },
    cursor: 'always',
    displaySurface: 'monitor'
  },
  audio: {
    echoCancellation: false,
    noiseSuppression: false,
    autoGainControl: false
  },
  preferCurrentTab: false,
  selfBrowserSurface: 'exclude'
};

const screenConstraints = createScreenShareConstraints(screenConfig);

🌐 Cross-Platform Configuration

React Native Configuration

import { 
  ReactNativeConfig,
  createReactNativeConfig,
  optimizeForMobile 
} from '@webrtc2/config';

// React Native optimized configuration
const rnConfig: ReactNativeConfig = {
  video: {
    width: 640,
    height: 480,
    frameRate: 30,
    facingMode: 'user'
  },
  audio: {
    echoCancellation: true,
    noiseSuppression: true
  },
  platform: {
    ios: {
      enableBackground: true,
      enablePictureInPicture: true
    },
    android: {
      enableHardwareAcceleration: true,
      enableSoftwareEchoCancellation: false
    }
  }
};

const mobileConfig = createReactNativeConfig(rnConfig);

// Auto-optimize for mobile constraints
const optimizedMobile = optimizeForMobile({
  batteryLevel: 'low',
  networkType: 'cellular',
  deviceType: 'phone'
});

Electron Configuration

import { 
  ElectronConfig,
  createElectronConfig,
  optimizeForDesktop 
} from '@webrtc2/config';

// Electron desktop configuration
const electronConfig: ElectronConfig = {
  video: {
    width: 1280,
    height: 720,
    frameRate: 30
  },
  audio: {
    sampleRate: 48000,
    channelCount: 2
  },
  desktop: {
    enableScreenShare: true,
    enableMultipleDisplays: true,
    enableSystemAudio: true,
    enableNotifications: true
  },
  webPreferences: {
    webSecurity: false,
    nodeIntegration: true,
    contextIsolation: false
  }
};

const desktopConfig = createElectronConfig(electronConfig);

Web Browser Configuration

import { 
  WebConfig,
  createWebConfig,
  detectBrowserCapabilities 
} from '@webrtc2/config';

// Detect browser capabilities
const capabilities = await detectBrowserCapabilities();

// Web-optimized configuration
const webConfig: WebConfig = {
  video: {
    width: 1280,
    height: 720,
    frameRate: 30
  },
  audio: {
    echoCancellation: true,
    noiseSuppression: true
  },
  browser: {
    enableAdapter: true,
    enablePolyfills: true,
    enableH264: capabilities.h264Supported,
    enableVP9: capabilities.vp9Supported
  }
};

const browserConfig = createWebConfig(webConfig);

⚙️ Dynamic Configuration

Runtime Configuration Updates

import { 
  ConfigManager,
  ConfigUpdater 
} from '@webrtc2/config';

const configManager = new ConfigManager();
const configUpdater = new ConfigUpdater();

// Update configuration at runtime
configUpdater.updateVideoQuality('720p');
configUpdater.updateAudioCodec('OPUS');
configUpdater.updateICEServers([
  { urls: 'stun:new-stun-server.com:19302' }
]);

// Listen for configuration changes
configManager.on('config-changed', (newConfig) => {
  console.log('Configuration updated:', newConfig);
});

// Apply configuration updates
await configManager.applyUpdates(configUpdater.getUpdates());

Network-Adaptive Configuration

import { 
  NetworkAdaptiveConfig,
  NetworkMonitor 
} from '@webrtc2/config';

const adaptiveConfig = new NetworkAdaptiveConfig({
  enableAdaptation: true,
  monitorInterval: 5000,
  thresholds: {
    bandwidth: {
      high: 2000000,  // 2 Mbps
      medium: 1000000, // 1 Mbps
      low: 500000     // 500 kbps
    },
    latency: {
      low: 50,     // 50ms
      medium: 100, // 100ms
      high: 200    // 200ms
    }
  }
});

// Automatically adapt configuration based on network conditions
adaptiveConfig.on('adaptation', (newConfig, reason) => {
  console.log('Configuration adapted:', reason, newConfig);
});

📊 Performance Presets

Quality Presets

import { 
  QualityPresets,
  PerformancePresets,
  createPresetConfig 
} from '@webrtc2/config';

// Quality-based presets
const qualityPresets = QualityPresets;
const lowQuality = qualityPresets.LOW;      // 240p, 15fps, low bitrate
const mediumQuality = qualityPresets.MEDIUM; // 480p, 30fps, medium bitrate
const highQuality = qualityPresets.HIGH;    // 720p, 30fps, high bitrate
const ultraQuality = qualityPresets.ULTRA;  // 1080p, 60fps, ultra bitrate

// Performance-based presets
const performancePresets = PerformancePresets;
const batteryOptimized = performancePresets.BATTERY_SAVER;
const balancedPerformance = performancePresets.BALANCED;
const maxPerformance = performancePresets.PERFORMANCE;

// Create configuration from preset
const config = createPresetConfig('HIGH_QUALITY', {
  platform: 'web',
  networkType: 'wifi'
});

Use Case Presets

import { 
  UseCasePresets,
  createUseCaseConfig 
} from '@webrtc2/config';

// Specialized configurations for different use cases
const presets = UseCasePresets;

const videoCallConfig = presets.VIDEO_CALL;     // Optimized for 1-on-1 calls
const groupCallConfig = presets.GROUP_CALL;     // Optimized for group calls
const webinarConfig = presets.WEBINAR;          // Optimized for webinars
const gamingConfig = presets.GAMING;            // Low latency for gaming
const broadcastConfig = presets.BROADCAST;      // High quality broadcasting

// Create configuration for specific use case
const meetingConfig = createUseCaseConfig('GROUP_CALL', {
  maxParticipants: 10,
  enableScreenShare: true,
  enableRecording: false
});

🔧 Configuration Validation

Schema Validation

import { 
  ConfigValidator,
  validateWebRTCConfig,
  ConfigSchema 
} from '@webrtc2/config';

const validator = new ConfigValidator();

// Validate configuration against schema
const validation = validator.validate(config, ConfigSchema.WEBRTC_CONFIG);

if (!validation.valid) {
  console.error('Configuration errors:', validation.errors);
} else {
  console.log('Configuration is valid');
}

// Validate specific sections
const iceValidation = validateWebRTCConfig.ice(config.ice);
const mediaValidation = validateWebRTCConfig.media(config.media);

Configuration Testing

import { 
  ConfigTester,
  testConfiguration 
} from '@webrtc2/config';

const tester = new ConfigTester();

// Test configuration with real servers
const testResults = await tester.testConfig(config);

console.log('STUN server test:', testResults.stun);
console.log('TURN server test:', testResults.turn);
console.log('Media access test:', testResults.media);

// Quick configuration test
const quickTest = await testConfiguration(config);
console.log('Configuration test passed:', quickTest.success);

📚 Related Packages

🤝 Contributing

We welcome contributions! Please see our Contributing Guide for details.

📄 License

MIT License - see LICENSE for details.


Keywords: WebRTC config, WebRTC configuration, STUN TURN servers, ICE configuration, media constraints, WebRTC settings, cross-platform config, React Native WebRTC config, Electron WebRTC config, WebRTC optimization