Skip to content

See what your
browser tests do.

Native browser tests for Laravel, Java and Node.js. Every command shows up in a realtime GUI, and a failure from CI opens on your own machine. Migrating from Dusk?

Get started composer require --dev puth/laravel
tests/Browser/LoginTest.php
public function test_user_can_log_in(): void
{
$this->browse(function (Browser $browser) {
$browser->visit('/login')
->type('email', 'ada@example.com')
->type('password', 'secret')
->press('Log in')
->assertPathIs('/dashboard')
->assertSee('Welcome back, Ada');
});
}
Point at a line to see its stepRun php artisan test

Why Puth

01 / 03

Same interfaces

A drop-in replacement for Laravel Dusk. Move tests over at your own pace.

Replay from CI

Snapshots record the viewport, commands, console output and errors.

Flake resistant

Assertions retry, actions wait for their target, calls pause while pages load.

Built for agents

An MCP server lets coding agents explore your app and export test drafts.

Snapshots02 / 03

Failing in CI? Replay it locally.

Save failed test snapshots as CI artifacts, then drag a .puth file into your local GUI to step through what went wrong.

  • Viewport at every command
  • Console output and errors
  • Opens in your local GUI by drag and drop
Dragging an exported snapshot into the Puth GUI to inspect a recorded test
Quick start03 / 03

Your first run in three steps.

One server provides the browser API and the web GUI. Run it next to your tests or on a dedicated machine.

  1. Start the server
    docker run -it --rm -p 127.0.0.1:7345:7345 ghcr.io/puth-io/puth
  2. Install the Laravel client
    composer require --dev puth/laravel
  3. Open the GUI, run your tests
    php artisan test