Search by

pushinbr / pam-browser

DavidWilliamBalbino

Typed Chrome DevTools Protocol client for the PAM runtime.

Package info

github.com/push-in/pam-browser

Homepage

Issues

pkg:composer/pushinbr/pam-browser

Statistics

Installs: 499

Dependents: 1

Suggesters: 0

Stars: 0

v1.0.1 2026-11-06 20:48 UTC

This package is auto-updated.

Last update: 2026-11-09 16:07:42 UTC


README

pam-browser: A typed Chrome DevTools Protocol client for PHP on PAM. No Node.js, no Puppeteer.

Drive Chrome and Chromium from typed PHP, straight over the DevTools Protocol.
PAM supervises the browser process and speaks CDP over its own WebSocket transport. Node.js, npm, Puppeteer and Playwright are never installed.

Packagist Latest release PHP 8.5 License

Install · Quick example · What it covers · Docs · Issues

Install

Create a PAM project and add the browser client:

pam init my-app --template raw
cd my-app
pam composer require pushinbr/pam-browser

Install Chrome or Chromium separately on the host. PAM Browser supervises that external process and speaks CDP directly; no Node.js or browser-automation wrapper is installed. New to PAM? Start with the PAM introduction.

Quick example

Launch Chromium, evaluate JavaScript in a page and receive data back in PHP through a binding. Save it as browser.php and run pam browser.php.

<?php

declare(strict_types=1);

require __DIR__.'/vendor/autoload.php';

use Pam\Browser\Browser;

$browser = Browser::launch();
try {
    $product = $browser->version()['product'] ?? 'unknown';

    $page = $browser->newPage('data:text/html,<title>PAM Browser</title>');
    echo $page->evaluate('document.title'), "\n"; // PAM Browser

    $page->exposeBinding('fromPage', static function (mixed $payload): void {
        var_dump($payload); // ['bridge' => 'ready']
    });
    $page->evaluate('globalThis.fromPage(JSON.stringify({bridge: "ready"}))');
    $page->pump(1.0);

    printf("Connected to %s, target %s\n", $product, $page->targetId);
} finally {
    $browser->close();
}

Adapted from tests/integration/chromium.php, the live Chromium gate. Browser::launch() accepts Pam\Browser\Chromium\LaunchOptions (executable, user data directory for a persistent profile, headless, timeout, extra arguments).

Platform support

Platform Support Notes
PAM runtime host Chrome or Chromium installed Found on PATH (google-chrome-stable, google-chrome, chromium, chromium-browser, chrome), or set PAM_CHROME_PATH / LaunchOptions::executable
PHP 8.5+ From composer.json

What it covers

Layer Classes
Protocol codec and event routing Protocol\Command, Protocol\Response, Protocol\Event, Connection (command, on, waitForEvent, pump)
PAM-native WebSocket transport Transport\WebSocketTransport, WebSocket\FrameCodec (no third-party WebSocket dependency)
Supervised Chrome/Chromium lifecycle Chromium\BrowserProcess, Chromium\LaunchOptions, Chromium\ExecutableLocator, persistent profiles
Browser and pages Browser (launch, version, newPage, createTarget, close), Page (navigate, evaluate, waitForFunction, exposeBinding, addScriptOnNewDocument, captureScreenshot, setUserAgent, authenticate, serveDocument, captureDocument)

The browser itself remains an external Chrome/Chromium process. JavaScript may be evaluated inside a page, while the application API and orchestration remain strictly typed PHP. PAM Browser is the browser boundary used by PAM WhatsApp Web.

Verification

pam composer analyse           # PHPStan level 9
pam composer test              # PHPUnit
pam composer test:integration  # live Chromium gate: pam tests/integration/chromium.php

Docs

Part of the PAM ecosystem

PAM

PAM runs PHP natively on servers, desktops and phones. This repository is one piece of it.

PAM PAM Desktop PAM Native Ecosystem
the runtime and CLI native desktop apps in PHP native Android and iOS apps in PHP every official package and plugin

Docs: push-in.github.io/pam-docs · Issues

Apache License 2.0 · Made in Brazil by Pushin