safermobility/laravel-gotenberg
A Laravel wrapper for Gotenberg that simplifies generating PDFs from HTML, URLs, Markdown, and Office documents. It offers a fluent, configurable API for sending content to your Gotenberg service and returning polished PDF output.
Architecture fit. safermobility/laravel-gotenberg is a thin Laravel integration for a Gotenberg HTTP service. It fits a conventional Laravel architecture: a service provider registers a client, configuration is publishable, and application code delegates PDF generation to Gotenberg rather than rendering in-process. That is a reasonable fit where PDF fidelity, Chromium-based rendering, or conversion of Office/HTML assets matters and where the team already operates containerized services. It is a poor fit for serverless or single-container deployments that cannot host or reach a Gotenberg instance, or for teams unwilling to add a network hop to the PDF path.
Integration feasibility. Integration is likely straightforward for a Laravel team: install via Composer, publish config, point the client at a Gotenberg base URL, and store the returned bytes to a configured disk. The v1.0.3 fix — "Fix saving the PDF to the local filesystem" — is directly relevant to a common integration pattern. Teams that write generated PDFs to storage/app or a local disk should treat v1.0.3 as the minimum acceptable patch level, because earlier 1.0.x releases may have mis-persisted output. The dependency bumps (actions/checkout, git-auto-commit-action, fetch-metadata) are CI/tooling-only and do not change runtime behavior.
Technical risk. The primary risk is not the release itself; it is the operational dependency on an external Gotenberg service and the package's small maintainer footprint. This assessment is based on release notes only — no source review, no version-matrix validation, and no maintainer activity review — so the following remain unverified: supported Laravel/PHP versions, supported Gotenberg API versions, retry/timeout behavior, and whether the local-filesystem fix is covered by tests. The bugfix in a patch release implies a real production failure mode existed (PDF not saved or saved incorrectly to local disk), which raises the importance of regression testing around file writes, directory permissions, and disk configuration. Dependabot activity is a positive signal for maintenance hygiene but does not substitute for runtime test coverage.
Key questions.
Stack fit. Best suited to a standard Laravel application running in Docker or Kubernetes alongside a Gotenberg container, with PDFs written to local or shared storage. Less suitable for Lambda-style runtimes, applications with strict data-residency constraints that prohibit sending documents to another service, or teams that need synchronous in-process rendering with no external dependency.
Migration path. For teams replacing ad-hoc cURL calls or a homegrown Gotenberg wrapper, the migration is mostly mechanical: introduce the package, centralize the Gotenberg base URL and timeout settings in configuration, and route existing PDF generation through the package client. For teams replacing a different PDF library (DomPDF, Snappy/wkhtmltopdf), the migration is larger because rendering behavior and CSS/JS support will differ; plan for visual regression testing on representative documents before cutover. Pin ^1.0.3 or later to ensure the local-filesystem fix is present.
Compatibility. Validate three axes before adoption: Laravel/PHP version support, Gotenberg image/API version, and storage disk behavior. The local-filesystem fix makes disk semantics especially important — confirm whether the package writes via Laravel's filesystem abstraction or directly to a path, and whether that behaves correctly with local, S3, and other disks. If the application runs multiple PHP containers, local disk writes are node-local unless backed by shared storage; that is an application architecture concern the package cannot solve.
Sequencing.
^1.0.3, publish config, and implement one representative PDF generation path.Maintenance. Low code footprint and active Dependabot updates suggest modest maintenance burden. The main ongoing tasks are tracking Gotenberg image upgrades, keeping the package pinned and patched, and monitoring the package's release cadence. Because the project is small, teams should expect to read the source when edge cases arise rather than rely on extensive documentation or community answers.
Support. Support risk is concentrated in a small maintainer group. There is no evidence in the release notes of a formal support policy, security disclosure process, or long-term support commitment. For business-critical PDF generation, treat the package as a convenience wrapper and retain the ability to call Gotenberg directly if the wrapper becomes unmaintained. Internal ownership should sit with the team that owns the document-generation workflow, not a platform team by default.
Scaling. Scaling is dominated by Gotenberg, not the Laravel package. PDF generation is CPU- and memory-intensive; plan to scale Gotenberg horizontally behind a service endpoint and to set concurrency limits. The Laravel side scales normally, but synchronous PDF calls can exhaust PHP workers under load — consider queueing PDF jobs for non-interactive generation. Large documents and Chromium-based rendering can produce memory spikes; set container limits and test with worst-case inputs.
Failure modes. Key failure modes: Gotenberg unreachable or slow (timeouts, worker exhaustion); non-2xx responses from Gotenberg surfacing as generic exceptions; local disk full, permission denied, or directory missing (the exact area v1.0.3 addresses); filename collisions or unsafe user-supplied filenames; and version skew between the client and Gotenberg after an image upgrade. Multi-node deployments add a split-brain storage failure mode if PDFs are written locally but later read from another node. Instrument PDF generation with timing, success/failure counts, and Gotenberg response codes.
Ramp-up. A Laravel developer can integrate the package in under a day if a Gotenberg instance is available. The steeper learning curve is operational: understanding Gotenberg's API, container resource sizing, Chromium behavior, and storage semantics. Allocate time for a developer to own the Gotenberg deployment and for QA to build a document corpus for regression testing. Given the release history, include the v1.0.3 local-filesystem fix in onboarding notes so new adopters do not pin to an affected 1.0.x version.
How can I help you explore Laravel packages today?