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

sigedi/jasper-report-bundle

A Symfony bundle that integrates JasperReports into your app, letting you configure report templates, pass parameters, and export PDF, HTML, Excel, and other formats from services or controllers with minimal setup.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. Unchanged in substance: this remains a Symfony bundle, not a Laravel package. Release 2.0.2 (feat: use service.yaml instead of services.xml) is a change to the bundle's internal DI resource format — it moves service definitions from an XML loader to Symfony's YAML loader. That is an implementation detail of Symfony's container compilation, an event that never occurs in a Laravel application. The Laravel-usable surface is still exactly what it was: the transitive jaspersoft/rest-client dependency, plus a reference implementation of how to configure and wire it. The package remains a design reference and dependency, not an integration layer.

What the release does change is the read on the project itself. A commit that migrates XML service definitions to YAML is the kind of housekeeping a maintainer does when tracking modern Symfony (6.4/7.x) conventions, not something a generated artifact produces. That materially softens the prior "active solo maintenance or generated artifact" concern and raises the odds that current composer.json constraints are symfony/* ^6.4|^7 rather than ^5|^6 — which was the specific condition that would have forced a resolution conflict on Laravel 11/12. Still zero stars, still one organization, still no independent validation.

Integration feasibility. Unchanged and still low-effort. Three things to verify rather than assume:

  • Whether 2.0.0 (the major bump that predates this patch) carried breaking changes to configuration keys or the DI extension alias. If any of our wiring notes were derived from 1.x, re-read the config tree before porting.
  • Whether the YAML migration came with a PHP or Symfony minimum-version bump. Irrelevant to Laravel at runtime, but it tells you what the maintainer is testing against.
  • Whether the service definition moved to a new path (Resources/config/services.yaml) such that anyone copying the file as a template is now looking in a different place than older blog posts and docs suggest.

The porting effort is still 50–100 LOC in a service provider. The spike day to confirm Composer resolution and one end-to-end report fetch still stands, and now has a slightly better prior of passing.

Technical risk.

  • Supply chain: still 0 stars, 0 dependents, single-organization ownership. Slightly improved by evidence of deliberate maintenance rather than abandonment — but bus factor is still one. MIT plus small surface area keeps the vendoring escape hatch cheap.
  • Version constraints: risk downgraded. The YAML migration is a strong signal the 2.x line targets current Symfony. This is the most likely thing to have changed since the last assessment, and it's a favorable change. Verify against composer.lock, don't assume.
  • Semver hygiene: a config-format change shipped as 2.0.**2** rather than 2.1.0. For us this is harmless — we don't install the bundle — but it indicates the maintainer doesn't treat DI internals as part of the public contract. Don't build on bundle internals; build on the client library.
  • Platform risk: unchanged and still dominant. JasperReports Server — JVM ops, licensing, JDBC drivers, REST API versioning — is the real dependency, and the bundle insulates us from none of it.

Key questions. The prior six stand. Add: 7. Does composer.json on the 2.0.x line permit symfony/* ^7, and what is its minimum PHP? 8. What changed in 2.0.0 — was the major bump driven by config keys, the DI extension alias, or just the Symfony floor? 9. Are we pinning jaspersoft/rest-client explicitly rather than relying on it arriving transitively through a bundle we don't install?

Integration Approach

Stack fit. Unchanged. Laravel 10–12 on PHP 8.2+, Guzzle HTTP, queue workers for rendering. The Symfony bundle is incompatible with Laravel's kernel lifecycle; jaspersoft/rest-client is plain PHP and fits cleanly.

Migration path. Recommended path is unchanged, and 2.0.2 reinforces it: do not install the bundle. Require jaspersoft/rest-client directly — pin it explicitly in composer.json, do not let it arrive as a transitive of something else — and port the wiring:

  • config/jasper.php with host, port, base_path, username, password, org_id, timeout, all env-backed.
  • JasperServiceProvider registering the client as a singleton with a lazily constructed connection.
  • JasperReportService wrapping only the calls we need (list, render to format, fetch output) so the vendor client never leaks into controllers.
  • app/Facades/Jasper.php only if the team prefers facades over injection.

One adjustment: when transcribing configuration keys from the bundle, read the 2.0.x Configuration.php and services.yaml directly rather than relying on older write-ups, since the 2.0.0 major and this YAML move are exactly where key names and paths drift.

Compatibility. Inspect composer.json for Symfony/PHP constraints against composer.lock — 2.0.2 makes a clean resolution more likely, but confirm. The higher-probability breakage remains the client's supported JasperReports Server REST API version against the deployed server. That has not changed and will still bite before any PHP-level incompatibility does.

Sequencing. Unchanged:

  1. Inventory report requirements and existing JRXML assets.
  2. Stand up a non-production JasperReports Server with a seeded dataset.
  3. Spike: php artisan jasper:ping authenticating and listing reports.
  4. Wrap in provider + service class; integration test against non-prod.
  5. Move rendering to queued jobs (RenderJasperReport), output to S3/disk keyed by params hash.
  6. Expose results via signed, time-limited URLs rather than streaming in-request.
  7. Add observability: timing, failure counters, circuit breaker around the client.

Operational Impact

Maintenance. Effectively unchanged. The PHP layer is thin and should be treated as owned code. 2.0.2 is a small positive signal on upstream health — someone is actively modernizing the bundle — but it does not transfer any maintenance burden off our plate. Real cost remains the reporting server: JVM patching, JDBC drivers, license renewal, JRXML template lifecycle.

Support. Still no community, no issue history, no StackOverflow footprint. Internal documentation remains mandatory: config keys, auth flow, supported report IDs, failure runbooks. The small code volume keeps this cheap. Note that the YAML migration will make some third-party documentation and examples stale — another reason to document our own wiring rather than link out.

Scaling. Unchanged. The reporting server is the bottleneck, sized by JVM CPU/memory and typically by concurrent sessions. Mitigations: async jobs on a dedicated queue and worker pool; scheduled pre-generation for high-traffic reports; output caching keyed by report ID + parameter hash with TTL; concurrency cap on the client so a traffic spike can't exhaust the server's session pool. Keep the reporting server off the application host.

Failure modes. Unchanged, plus one bookkeeping item:

  • Reporting server unavailable or timing out → degraded state, not a 500 in the request path.
  • Auth token/session expiry mid-job → capped retry with re-authentication.
  • Template drift: JRXML deployed out of band, parameter names diverge → version templates with code, pin report IDs in config.
  • Large outputs exhausting PHP memory in the web tier → always write to storage first.
  • REST API version mismatch after a server upgrade → pin and test in staging.
  • License expiry → monitor and alert well ahead; hard stop.
  • Silent empty results from a bad parameter binding → validate params against a known schema before dispatch.
  • New: documentation drift — copied bundle config from pre-2.0 examples. Mitigate by pinning the reference commit we ported from in a code comment.

Ramp-up. Unchanged. 1–2 days for a mid-level Laravel developer to ship the provider, service, and a queued render job. The harder ramp remains domain-specific: JRXML authoring in Jaspersoft Studio and reporting-server administration are distinct skills, and without at least one person fluent in them every report change becomes a vendor ticket — which is a bigger risk than the bundle's low adoption.

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
adachsoft/php-code-style