A TypeScript library for easily managing X Virtual Frame Buffer (Xvfb) processes in Node.js applications. Perfect for headless GUI testing with tools like Puppeteer, Playwright, or Selenium.
npm install xvfb-ts- Linux/Unix system with Xvfb installed
- Node.js >= 20.17.0
import { Xvfb } from 'xvfb-ts';
const xvfb = new Xvfb();
// Start the virtual display
await xvfb.start();
// Run your headless GUI tests here
// e.g., launch a browser, run Electron app, etc.
// Clean up when done
await xvfb.stop();interface XvfbOptions {
displayNum?: number; // X display number (default: auto-assigned >= 99)
reuse?: boolean; // Reuse existing display (default: false)
timeout?: number; // Startup timeout in ms (default: 500)
silent?: boolean; // Suppress stderr output (default: false)
xvfb_args?: string[]; // Additional Xvfb arguments (default: [])
}start()- Start the Xvfb process (returns Promise)stop()- Stop the Xvfb process (returns Promise)display()- Get the display string (e.g., ":99")
import { Xvfb } from 'xvfb-ts';
const xvfb = new Xvfb({ displayNum: 88 });
await xvfb.start();
console.log(`Display: ${xvfb.display()}`); // :88
await xvfb.stop();const xvfb = new Xvfb({
displayNum: 99,
reuse: true
});
await xvfb.start(); // Won't fail if :99 already existsconst xvfb = new Xvfb({
xvfb_args: ['-screen', '0', '1024x768x24']
});
await xvfb.start();try {
await xvfb.start();
// Your code here
} catch (error) {
console.error('Failed to start Xvfb:', error.message);
} finally {
await xvfb.stop();
}