Skip to main content

Open New Browser Instance

Creates a new browser instance with a unique identifier, enabling isolated browsing sessions and multi-instance browser automation.

Syntax​

const instance = await codebolt.openNewBrowserInstance(options);

Parameters​

BrowserInstanceOptions​

  • instanceId (string, optional): Custom instance ID. If not provided, a unique ID will be generated
  • setActive (boolean, optional): Whether to set this instance as the active one. Default: true

Return Value​

Returns a promise that resolves to an object containing the new instance ID:

{
instanceId: "browser-1234567890-abc123"
}

Examples​

Create New Instance (Auto-Generated ID)​

import codebolt from '@codebolt/codeboltjs';

// Create new instance with auto-generated ID
const instance = await codebolt.openNewBrowserInstance();
console.log(`New instance created: ${instance.instanceId}`);

// Instance is automatically set as active
await codebolt.browser.goToPage('https://example.com');

Create New Instance with Custom ID​

const customInstance = await codebolt.openNewBrowserInstance({
instanceId: "my-custom-browser-instance"
});

console.log(`Custom instance created: ${customInstance.instanceId}`);

Create Instance Without Setting as Active​

const backgroundInstance = await codebolt.openNewBrowserInstance({
instanceId: "background-browser",
setActive: false
});

console.log(`Background instance created: ${backgroundInstance.instanceId}`);
// This instance is NOT the active one

// Current active instance remains unchanged
await codebolt.browser.goToPage('https://example.com'); // Uses previous active instance

// Later, switch to the background instance
await codebolt.setActiveBrowserInstance(backgroundInstance.instanceId);
await codebolt.browser.goToPage('https://google.com'); // Now uses background instance

Multi-Instance Setup​

async function setupMultiInstanceBrowsing() {
// Create instances for different tasks
const researchInstance = await codebolt.openNewBrowserInstance({
instanceId: "research-browser",
setActive: false
});

const socialInstance = await codebolt.openNewBrowserInstance({
instanceId: "social-browser",
setActive: false
});

const workInstance = await codebolt.openNewBrowserInstance({
instanceId: "work-browser",
setActive: true // This becomes the active instance
});

console.log('Created instances:', {
research: researchInstance.instanceId,
social: socialInstance.instanceId,
work: workInstance.instanceId
});

return { researchInstance, socialInstance, workInstance };
}

// Usage
const instances = await setupMultiInstanceBrowsing();

Instance Pool Management​

class BrowserInstancePool {
constructor(maxSize = 5) {
this.instances = [];
this.maxSize = maxSize;
}

async createInstance(options = {}) {
if (this.instances.length >= this.maxSize) {
throw new Error(`Maximum pool size (${this.maxSize}) reached`);
}

const instance = await codebolt.openNewBrowserInstance({
setActive: false, // Don't automatically set as active
...options
});

this.instances.push(instance);
console.log(`Instance ${instance.instanceId} added to pool`);

return instance;
}

async getInstance(instanceId) {
const instance = this.instances.find(inst => inst.instanceId === instanceId);
if (instance) {
await codebolt.setActiveBrowserInstance(instanceId);
return instance;
}
throw new Error(`Instance ${instanceId} not found in pool`);
}

listInstances() {
return this.instances.map(inst => inst.instanceId);
}

async removeInstance(instanceId) {
const index = this.instances.findIndex(inst => inst.instanceId === instanceId);
if (index !== -1) {
this.instances.splice(index, 1);
await codebolt.closeBrowserInstance(instanceId);
console.log(`Instance ${instanceId} removed from pool`);
}
}
}

// Usage
const pool = new BrowserInstancePool(3);

const instance1 = await pool.createInstance({ instanceId: "pool-1" });
const instance2 = await pool.createInstance({ instanceId: "pool-2" });

await pool.getInstance("pool-1");
await codebolt.browser.goToPage('https://example.com');

Isolated Session Management​

async function createIsolatedSession(sessionName, startUrl) {
const instanceId = `session-${sessionName}-${Date.now()}`;

const instance = await codebolt.openNewBrowserInstance({
instanceId,
setActive: false // Don't disturb current active instance
});

// Switch to new instance temporarily
const previousActive = await codebolt.listBrowserInstances()
.then(instances => instances.find(inst => inst.isActive)?.instanceId);

await codebolt.setActiveBrowserInstance(instanceId);

// Setup the isolated session
await codebolt.browser.newPage();
if (startUrl) {
await codebolt.browser.goToPage(startUrl);
}

console.log(`Isolated session '${sessionName}' created with ID: ${instanceId}`);

// Restore previous active instance
if (previousActive) {
await codebolt.setActiveBrowserInstance(previousActive);
}

return instance;
}

// Usage
const session1 = await createIsolatedSession("research", "https://scholar.google.com");
const session2 = await createIsolatedSession("shopping", "https://amazon.com");

Use Cases​

Task Isolation​

Separate browser instances for different tasks or contexts.

Parallel Processing​

Run multiple browser operations simultaneously.

Session Management​

Maintain separate sessions for different users or accounts.

Resource Management​

Control browser instance lifecycle and resource usage.

Testing​

Create isolated environments for testing different scenarios.

Error Handling​

async function safeCreateInstance(options = {}) {
try {
const instance = await codebolt.openNewBrowserInstance(options);
console.log(`Successfully created instance: ${instance.instanceId}`);
return instance;
} catch (error) {
console.error('Failed to create browser instance:', error.message);

// List existing instances for debugging
const existing = await codebolt.listBrowserInstances();
console.log('Existing instances:', existing.map(inst => inst.instanceId));

throw error;
}
}

Notes​

  • Unique IDs: Instance IDs must be unique within the current session
  • Auto-Generation: If no instanceId provided, a unique ID is generated automatically
  • Active by Default: New instances are set as active unless setActive: false
  • Isolation: Each instance maintains separate cookies, storage, and session state
  • Resource Usage: Each instance consumes system resources

Best Practices​

  1. Descriptive IDs: Use meaningful instance IDs for easier management
  2. Cleanup: Close instances when no longer needed to free resources
  3. Pool Management: Limit the number of concurrent instances
  4. Error Handling: Handle creation failures gracefully
  5. State Tracking: Keep track of created instances for proper cleanup