pushinbr / pam-browser
Typed Chrome DevTools Protocol client for the PAM runtime.
Requires
- php: ^8.5
Requires (Dev)
- phpstan/phpstan: ^2.1
- phpunit/phpunit: ^11.5
Suggests
None
Provides
None
Conflicts
None
Replaces
None
This package is auto-updated.
Last update: 2026-11-09 16:07:42 UTC
README
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.
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 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