Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Jasper Report Bundle Laravel Package

hboie/jasper-report-bundle

Symfony bundle for generating reports with JasperReports. Compile JRXML templates and export to PDF, HTML, XLS, and other formats through a simple PHP service, with configurable JasperReports binaries and report parameters.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit — poor, and the framing still needs correcting up front. hboie/jasper-report-bundle is a Symfony bundle, not a Laravel package. It ships no ServiceProvider, no facade, no publishable config, no config/*.php — its entire integration surface is Symfony's kernel bundle registration (AppKernel, later bundles.php), the DI container, and a Configuration tree. None of that is portable to Laravel. The actual reusable asset is the transitive dependency, jaspersoft/rest-client, a framework-agnostic PHP REST wrapper. For a Laravel codebase, the bundle should be treated as a reference implementation, not an installable dependency. v1.6 does not change this: the release is a single new option on the bundle's own Configuration tree, which is precisely the layer that does not travel.

Integration feasibility — feasible, but only via a self-built adapter. A viable path exists in ~1–3 days of engineering:

  • Bind jaspersoft/rest-client into Laravel's container via a small custom service provider.
  • Move credentials and endpoint config to config/services.php + .env (JASPER_HOST, JASPER_USER, JASPER_PASSWORD or org/role token).
  • Wrap it behind a single JasperReportService class so the rest of the app never touches the vendor library — this is the critical insulation layer, since the vendor library may itself need replacing.
  • Set explicit connect and read timeouts at our layer (Guzzle request options or Http::timeout()/connectTimeout()). v1.6 adds a timeout option, but only inside the bundle's Symfony config tree; it is not reachable from a Laravel app and does not touch the underlying jaspersoft/rest-client defaults. The need it addresses is real and was already flagged below — we satisfy it ourselves, per-report, not globally.
  • Use Laravel's Http client fake for tests rather than hitting a live Jaspersoft server.

Technical risk — high, and still dominated by lifecycle signals rather than code risk. v1.6 softens one data point but does not change the profile:

  • Release cadence: one release in ~4.5 years (previous release 2021-11-08; v1.6 adds a timeout config option). One low-touch commit is a pulse, not a maintenance commitment. There is no evidence of sustained triage, issue response, or a support matrix refresh.
  • Symfony 2–5 only. Symfony 5 reached end of life in November 2023; the bundle's declared support matrix is entirely EOL. v1.6 does not appear to widen it.
  • 0 dependents, 5 stars. No community validation, no downstream users to surface bugs, no incidental security review. One release does not manufacture a user base.
  • Jaspersoft REST v2 target. Jaspersoft has shifted auth and endpoint semantics across v7/v8 (token vs. basic auth, organization scoping). The pinned client may not match the server version we actually run; v1.6 does not bump it.
  • Two-layer dependency. Bundle → jaspersoft/rest-client → Guzzle. The bundle layer is the least valuable and most fragile part. The release improves only that layer.

The mitigating factor is unchanged: the integration is a thin HTTP wrapper over a licensed enterprise product. There is no complex domain logic to inherit, so replacing it is cheap. The cost is not "will this break," it is "we will own this permanently." The correct read of v1.6 is evidence the maintainer is still alive, not evidence the package is now a safe dependency — a single config option four years in is the weakest possible maintenance signal.

Key questions before any commitment:

  1. Is JasperReports Server already licensed and deployed, or is this a greenfield evaluation? If greenfield, the reporting engine decision dwarfs the client decision.
  2. Which Jaspersoft version, and does it expose the REST endpoints/auth model this client assumes?
  3. Who owns the reporting layer long-term — application team, data team, or the Jaspersoft admin? Report authoring (JRXML, domains, repository paths) is a distinct skillset.
  4. Synchronous report rendering or scheduled/async delivery? This determines whether a thin HTTP client is even the right shape.
  5. Does report output need to stay on-prem (PHI/PCI), or can we push to a managed BI tier?
  6. Is there an internal fork policy if we vendor jaspersoft/rest-client?
  7. Does anyone have an upstream relationship with the maintainer? v1.6 is the moment to ask directly whether further releases are planned, before we assume either abandonment or revival.

Integration Approach

Stack fit — indirect at best. There is no install path. The recommended shape:

Layer Decision
Bundle Do not install. Read its DependencyInjection/Configuration.php for the config/auth/timeout pattern, then discard. v1.6's value to us is documentation of which knobs matter.
Client Vendor jaspersoft/rest-client directly, pinned to an exact version, committed to composer.json with a fork if needed.
Laravel glue ~150-line custom service provider + JasperReportService wrapper + config file, including per-report timeout settings.
Transport Alternative path: skip the PHP client entirely and use Laravel's Http client against the REST endpoints. Fewer moving parts, better testability, full control over retries/timeouts. Worth benchmarking first.

Migration path. Treat this as a greenfield build, not a migration. There is no existing Laravel integration to preserve. The bundle contributes roughly a config schema and a service definition — that is a half-day of reading, not a dependency to inherit. v1.6 adds one line to that schema; it does not create an upgrade obligation because we were never on the bundle.

Compatibility risks. Pulling jaspersoft/rest-client into a Laravel app drags in Guzzle and possibly Symfony components (symfony/options-resolver and similar). Laravel already ships a Guzzle version; a version conflict is plausible and will force either a replace block or a dependency pin. Verify against the app's PHP version and Laravel major before scoping. The timeout option in v1.6 is the kind of thing that often arrives alongside a Symfony minor-version bump — confirm whether the release narrowed or shifted the supported Symfony range before assuming the conflict surface is unchanged.

Sequencing:

  1. Spike (1 day). Authenticate against the target Jaspersoft instance from a Laravel tinker session. Confirm endpoint availability, auth mode, and output formats. Most of the risk is eliminated or confirmed here.
  2. Wrapper (2–3 days). JasperReportService with explicit methods per report (renderInvoicePdf(int $id)), not a generic passthrough. Generic passthroughs become untyped coupling. Set explicit timeouts per method — do not inherit library defaults.
  3. Config + secrets (0.5 day). config/services.php, .env entries, credential rotation documented, timeout values exposed as config with sane defaults.
  4. Test harness (1 day). Http::fake() fixtures for success, auth failure, timeout, malformed XML, and 404-on-report-path.
  5. Rollout incrementally per report. One report in production before the second is wired. Do not batch-enable, and calibrate timeout values against observed p99 per report rather than a single global value.

Decision to force early: build a thin custom client over Laravel Http, or vendor jaspersoft/rest-client. For 3–5 reports, the custom client is smaller, more testable, and has zero abandoned dependencies. For a broad report catalog with complex parameter marshalling, the vendor client earns its place. Pick one and record the reasoning.

Operational Impact

Maintenance — we still own it outright. v1.6 is one config option after 4.5 years of silence; with zero dependents there is no user community to catch regressions and no CVE feed covering the package. Budget for a fork-and-patch contingency and document the fork process before the first production deploy. Security review falls entirely to us. Do not read a single release as a durability signal in planning or in the risk register.

Support — none. No maintainer SLA, no issue triage, no upgrade path. Internal documentation must be good enough that a new engineer can operate the integration without reading the bundle source.

Scaling — the PHP layer is not the bottleneck. Report rendering load lands on the JasperReports Server, which is a separate licensed tier with its own connection pooling and memory profile. The Laravel side is a thin HTTP call. The real scaling concerns are:

  • Blocking request threads. PDF generation can take 5–30s. Synchronous rendering inside a web request will exhaust PHP-FPM workers under load. Design for queued generation + polling or callback from day one, even if the first report is fast. This is exactly the risk the upstream timeout option gestures at, and exactly why timeout policy must live in our layer — a config value inside a Symfony bundle cannot protect Laravel workers.
  • Payload memory. Large binary outputs loaded into PHP memory. Stream to storage rather than buffering.
  • Jaspersoft connection limits. The server has a licensed concurrent-user cap; the app tier must not assume unlimited parallel renders.

Failure modes to instrument explicitly:

Failure Symptom Mitigation
Jaspersoft unavailable 5xx from client, user sees blank report Circuit breaker + cached last-known-good output where legally permissible
Auth/token expiry 401 mid-session Explicit re-auth with single retry, alert on rate
Report path renamed 404 on repository URI Fail loudly; report paths must be config, not hardcoded
Version drift Silent schema/format change after Jaspersoft upgrade Pin server version in the contract; smoke test post-upgrade
Timeout on large reports Truncated or empty file Explicit per-report timeout > expected p99 (set by us, not inherited from the vendor), plus async path
Guzzle/Symfony conflict Composer resolution failure Resolve at spike, not at deploy

Ramp-up — two distinct skillsets, often underbudgeted. Engineers need (a) Laravel HTTP client and queue patterns, which is routine, and (b) Jaspersoft domain knowledge — JRXML authoring, repository organization, data source and domain configuration, organization/tenant scoping. The second is the expensive one and is usually held by a BI or reporting specialist, not the application team. Plan for that dependency explicitly; a wrapper is trivial to write and useless if nobody can author the report behind it.

Overall TPM read — unchanged by v1.6. A timeout option is a real gap being filled, but it lives in the one layer we cannot use, and one commit after 4.5 years is not a revival. The bundle contributes almost nothing to a Laravel stack and carries meaningful abandonment risk. The underlying problem — integrating a licensed Jaspersoft instance into a Laravel app — is real and solvable in roughly a week, with timeouts configured by us from day one. Fund the spike, plan to write the adapter ourselves, and continue to treat this bundle as documentation rather than a dependency. Note v1.6 in the risk log as a maintenance data point, not as a reason to reconsider. The strategic question is not whether to use this package (still no) but whether JasperReports Server remains the right reporting tier.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
adachsoft/changelog-linter
adachsoft/collection
payerurl/telegrambot-crypto-payment-instant-payout
dskripchenko/laravel-hybrid-search
riorizkyrainey/lara-ced
mehedimi/static-vel
zharp/zharp
nonsapiens/bigquery-model-sync
lgu-bayambang-ict-office/lgu-laravel-development-standards
andydefer/laravel-support
se7enxweb/flysystem
lampwick/laravel
jeslage/statamic-emojis
micahdshackelford/rmap-laravel
draftsmaninc/draftsman
square-bit/laravel-volition
himito/laravel-mailman
htinlynn/genius-helper
maco-studios/hephaestus
elmogy/larafast