Overview
The Browsers constant provides predefined browser configurations for WhatsApp Web connections. Different browser configurations can affect the connection behavior, message history sync, and device identification.
Type Definition
type BrowsersMap = {
ubuntu(browser: string): [string, string, string]
macOS(browser: string): [string, string, string]
baileys(browser: string): [string, string, string]
windows(browser: string): [string, string, string]
appropriate(browser: string): [string, string, string]
}
Each function returns a WABrowserDescription tuple: [OS, Browser, Version]
Available Configurations
Browsers.ubuntu()
The browser name to use (e.g., ‘Chrome’, ‘Firefox’, ‘MyApp’).
Returns ['Ubuntu', browser, '22.04.4']
import { Browsers } from '@whiskeysockets/baileys'
const config = Browsers.ubuntu('Chrome')
// Returns: ['Ubuntu', 'Chrome', '22.04.4']
const sock = makeWASocket({
browser: Browsers.ubuntu('MyApp'),
auth: state
})
Browsers.macOS()
The browser name to use (e.g., ‘Safari’, ‘Chrome’, ‘Desktop’).
Returns ['Mac OS', browser, '14.4.1']
import { Browsers } from '@whiskeysockets/baileys'
const config = Browsers.macOS('Safari')
// Returns: ['Mac OS', 'Safari', '14.4.1']
// This is the default configuration
const sock = makeWASocket({
browser: Browsers.macOS('Chrome'), // Default
auth: state
})
Browsers.baileys()
The browser/app name to use (e.g., ‘MyApp’, ‘Bot’).
Returns ['Baileys', browser, '6.5.0']
import { Browsers } from '@whiskeysockets/baileys'
const config = Browsers.baileys('MyBot')
// Returns: ['Baileys', 'MyBot', '6.5.0']
const sock = makeWASocket({
browser: Browsers.baileys('WhatsAppBot'),
auth: state
})
Browsers.windows()
The browser name to use (e.g., ‘Edge’, ‘Chrome’).
Returns ['Windows', browser, '10.0.22631']
import { Browsers } from '@whiskeysockets/baileys'
const config = Browsers.windows('Edge')
// Returns: ['Windows', 'Edge', '10.0.22631']
const sock = makeWASocket({
browser: Browsers.windows('Chrome'),
auth: state
})
Browsers.appropriate()
Returns browser configuration based on your current operating system and release version.
import { Browsers } from '@whiskeysockets/baileys'
// Automatically detects OS and uses appropriate configuration
const config = Browsers.appropriate('Chrome')
// On macOS: ['Mac OS', 'Chrome', '14.4.1']
// On Ubuntu: ['Ubuntu', 'Chrome', '22.04.4']
// On Windows: ['Windows', 'Chrome', '10.0.22631']
// On others: ['Ubuntu', 'Chrome', release()]
const sock = makeWASocket({
browser: Browsers.appropriate('MyApp'),
auth: state
})
The appropriate() function uses the following platform detection:
const PLATFORM_MAP = {
aix: 'AIX',
darwin: 'Mac OS',
win32: 'Windows',
android: 'Android',
freebsd: 'FreeBSD',
openbsd: 'OpenBSD',
sunos: 'Solaris',
linux: undefined, // Falls back to 'Ubuntu'
haiku: undefined, // Falls back to 'Ubuntu'
cygwin: undefined, // Falls back to 'Ubuntu'
netbsd: undefined // Falls back to 'Ubuntu'
}
Utility function to get the platform ID for a given browser string.
The browser name (case-insensitive).
Returns the platform type ID. Defaults to ‘1’ (Chrome) if not found.
import { getPlatformId } from '@whiskeysockets/baileys'
const platformId = getPlatformId('chrome')
// Returns platform ID based on proto.DeviceProps.PlatformType
Usage Examples
QR Code Connection with Custom Browser
import makeWASocket, { Browsers } from '@whiskeysockets/baileys'
const sock = makeWASocket({
browser: Browsers.ubuntu('MyApp'),
printQRInTerminal: true,
auth: state
})
// QR code will show "MyApp" on Ubuntu
Desktop Configuration for Full History
To receive more message history, use a desktop configuration:
import makeWASocket, { Browsers } from '@whiskeysockets/baileys'
const sock = makeWASocket({
browser: Browsers.macOS('Desktop'),
syncFullHistory: true,
auth: state
})
Dynamic Browser Selection
import makeWASocket, { Browsers } from '@whiskeysockets/baileys'
const useQR = true
const appName = 'MyWhatsAppBot'
const sock = makeWASocket({
browser: useQR
? Browsers.ubuntu(appName) // Shows on QR code scan
: Browsers.appropriate(appName), // Matches system
printQRInTerminal: useQR,
auth: state
})
Pairing Code with Custom Name
import makeWASocket, { Browsers } from '@whiskeysockets/baileys'
const sock = makeWASocket({
browser: Browsers.baileys('MyCustomBot'),
printQRInTerminal: false,
auth: state
})
if (!sock.authState.creds.registered) {
const code = await sock.requestPairingCode('1234567890')
console.log(`Pairing code: ${code}`)
}
Browser Configuration Impact
Message History
Different browser configurations can affect how much message history you receive:
- Desktop configurations (e.g.,
Browsers.macOS('Desktop')) typically receive more history
- Mobile-like configurations may receive less history
- Combined with
syncFullHistory: true for maximum history sync
const sock = makeWASocket({
browser: Browsers.macOS('Desktop'),
syncFullHistory: true,
auth: state
})
Device Identification
The browser configuration is visible in WhatsApp’s “Linked Devices” section:
// Shows as "Chrome on Ubuntu" in WhatsApp
browser: Browsers.ubuntu('Chrome')
// Shows as "MyApp on Baileys" in WhatsApp
browser: Browsers.baileys('MyApp')
Default Configuration
When not specified, Baileys uses:
const DEFAULT_CONNECTION_CONFIG = {
browser: Browsers.macOS('Chrome'),
// ... other defaults
}
Complete Example
import makeWASocket, {
Browsers,
useMultiFileAuthState,
DisconnectReason
} from '@whiskeysockets/baileys'
import { Boom } from '@hapi/boom'
const { state, saveCreds } = await useMultiFileAuthState('auth_info')
const sock = makeWASocket({
browser: Browsers.ubuntu('MyWhatsAppClient'),
syncFullHistory: true,
auth: state
})
sock.ev.on('connection.update', (update) => {
const { connection, lastDisconnect, qr } = update
if (connection === 'close') {
const shouldReconnect =
(lastDisconnect?.error as Boom)?.output?.statusCode !== DisconnectReason.loggedOut
if (shouldReconnect) {
console.log('Reconnecting...')
// Reconnect logic
}
} else if (connection === 'open') {
console.log('Connected! Device shows as "MyWhatsAppClient on Ubuntu"')
}
if (qr) {
console.log('Scan this QR code with WhatsApp')
// QR will display "MyWhatsAppClient" as the client name
}
})
sock.ev.on('creds.update', saveCreds)
Best Practices
-
Use descriptive names: Choose browser names that identify your application
browser: Browsers.ubuntu('MyCompanyBot')
-
Match your deployment: Use
appropriate() for automatic OS detection
browser: Browsers.appropriate('MyApp')
-
Desktop for history: Use desktop configurations when full history is needed
browser: Browsers.macOS('Desktop')
syncFullHistory: true
-
Consistent branding: Keep the same browser name across reconnections
const APP_NAME = 'MyApp'
browser: Browsers.ubuntu(APP_NAME)
Source Code Reference
From src/Utils/browser-utils.ts:19-26:
export const Browsers: BrowsersMap = {
ubuntu: browser => ['Ubuntu', browser, '22.04.4'],
macOS: browser => ['Mac OS', browser, '14.4.1'],
baileys: browser => ['Baileys', browser, '6.5.0'],
windows: browser => ['Windows', browser, '10.0.22631'],
appropriate: browser => [PLATFORM_MAP[platform()] || 'Ubuntu', browser, release()]
}
See Also