Same document source
Render the Blade views already in your application. You do not need to move invoices or reports to another template language.
Browsershot is excellent when you want direct browser control. BladePDF is for teams that want to keep their Blade views without running Chrome, Node.js, Docker images, or browser workers in production.
return BladePDF::fromView('pdf.invoice', [
'invoice' => $invoice,
])
->format('A4')
->showBackground()
->render()
->download("invoice-{$invoice->number}.pdf");
Browsershot provides a polished PHP API over Puppeteer and is a great tool when an application needs direct control of a browser. In production, that browser also brings a Node.js runtime, Chrome system dependencies, security updates, memory pressure, process failures, queue sizing, and worker capacity.
BladePDF keeps Chromium rendering but moves the browser lifecycle and the document workflow around it into a managed service built specifically for Laravel.
Render the Blade views already in your application. You do not need to move invoices or reports to another template language.
Your app prepares data and HTML. BladePDF handles browser installation, isolation, capacity, recovery, and request controls.
Local asset transfer, render history, optional storage, async delivery, and signed webhooks are part of the service.
The native BladePDF facade is the shortest path to managed features. If you already use Spatie Laravel PDF, the dedicated BladePDF driver lets you change only the selected driver.
composer require bladepdf/laravel
BLADEPDF_API_KEY=blpdf_...
return Pdf::view('pdf.invoice', $data)
->driver('browsershot')
->format('a4')
->save(storage_path('app/invoice.pdf'));
return Pdf::view('pdf.invoice', $data)
->driver('bladepdf')
->format('a4')
->save(storage_path('app/invoice.pdf'));
composer require bladepdf/spatie-laravel-pdf-driver. Use the native bladepdf/laravel package when you need BladePDF cloud templates, native async rendering, per-request webhooks, or managed PDF storage.
The right choice is less about whether Chromium can generate a PDF and more about who should own the browser platform.
Browsershot is a strong choice when the browser is part of your application architecture and your team wants access to Puppeteer-level behavior.
BladePDF is a strong choice when PDFs are a product requirement but operating browser infrastructure is not a differentiator for the team.
BladePDF changes where the browser runs, not where your application data and Blade logic live.
Laravel resolves the view with your models, policies, localization, helpers, and application data.
The package scans the generated HTML and nested CSS for local images, stylesheets, fonts, and other file references.
BladePDF applies request controls, runs the isolated browser job, and returns, stores, or delivers the finished PDF.
Both approaches can produce Chromium-rendered PDFs. The main difference is control versus operating responsibility.
| Capability | Self-hosted Browsershot | BladePDF |
|---|---|---|
| Chrome and Node.js | Install, pin, update, and debug in your runtime | Not required in the Laravel deployment |
| Browser control | Direct Puppeteer and launch-level control | Curated PDF options and readiness controls |
| Private assets | Expose, embed, or make files reachable to the browser | Discover, upload, and rewrite request-scoped assets |
| Scaling | Size workers, memory, queues, and browser processes | Choose managed concurrency; short bursts enter a managed queue |
| Failures | Capture process errors, restart browsers, and retry jobs | Managed browser recovery plus render failure history |
| Storage and delivery | Build with your filesystem, object store, jobs, and callbacks | Optional stored PDFs, signed URLs, native async, and signed webhooks |
| Data boundary | Can remain fully inside your infrastructure | Render payload is processed by a hosted service |
| Cost model | Your compute, engineering, and operations | Service plan based primarily on render capacity |
If the browser itself is part of your product logic, Browsershot’s control is valuable. If Pdf::view() only needs to turn an invoice into a PDF, managed infrastructure often removes more work than it adds.
storePdf(), return after acceptance, and report completion through signed pdf.rendered or pdf.failed events and webhooks.Render an existing Blade invoice through the free plan and compare the output.