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

Filament Xlsx Export Laravel Package

asignua/filament-xlsx-export

Filament XLSX Export adds fast, customizable Excel (.xlsx) exports to Filament resources and tables. Export filtered or selected records with configurable columns, headers, and formatting, all from a simple admin action.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

This is a baseline assessment; no prior evaluation exists. v1.0.1 is a patch release for a Filament table export/streaming package that writes XLSX (and CSV-adjacent) output, with no advertised breaking changes.

  • Architecture fit: The package integrates at the Filament table layer — it adds a streaming export route, reuses Filament column definitions/state closures, and emits typed XLSX. v1.0.1 reinforces that it is an adapter over Filament’s column and middleware semantics rather than a separate export schema. That is the right fit for a Filament-based admin surface, but it also means behavior is tightly coupled to Filament internals: panel guard resolution, Authenticate middleware behavior, rowLoop shape, column state closures, and formatStateUsing/formatted() pipeline.
  • Integration feasibility: Feasible for a team already on Filament. The release is a patch-level set of correctness fixes; there are no evident migrations, config rewrites, or API breaks. The notable architectural change is that the streaming route now switches the default auth guard to the panel’s guard, and streaming.middleware only needs to start the session. That mirrors Filament’s own route behavior and is directionally correct, but it increases dependency on panel/guard configuration being correct.
  • Technical risk:
    • Guard switching: auth(), Gate checks, and scopes now see the page’s user on the streaming route. In multi-panel or multi-guard applications, wrong panel-to-guard mapping or non-session auth could produce 403s, missing users, or — worse — cross-panel data exposure if scopes are not independently enforced.
    • Export row semantics: rowIndex() is file-relative (starts at 1 regardless of table page), and the stdClass $rowLoop passed to state closures is also file-relative. Any custom closure written against page-relative indices will silently change output.
    • Type fidelity: A nullable boolean() column now reads FALSE for NULL; this is documented, but it is a lossy mapping for compliance/finance exports. Separately, formatted() text is no longer parsed back into a date, which fixes day/month swapping but means formatted dates remain text and are never re-typed.
    • Output sanitization: Filenames with ¢, ½, etc. are handled, and Excel-reserved sheet name History becomes History 1. These are good fixes but imply downstream consumers cannot rely on exact filenames or sheet names.
    • SelectColumn labels: Exports now use the option label the table displays, which improves screen-to-file fidelity but couples file content to UI locale and label changes.
    • Guest behavior: A guest on a table outside any panel stays in Livewire mode instead of receiving a refused streaming link. That is a graceful fallback, but it means behavior differs by panel context and should be tested.
  • Key questions:
    • What are the supported Filament, Laravel, Livewire, and PHP version ranges for v1.0.1?
    • How does the guard switch resolve panels to guards when multiple panels and multiple guards exist? Is there a documented mapping or config override?
    • Are exports authorized by policies/Gates in addition to the guard switch, and are query scopes applied independently of auth()?
    • Is boolean() NULL-to-FALSE behavior configurable, or is the documented behavior the only option?
    • Are rowLoop/rowIndex() semantics guaranteed as file-relative across future releases, and are closures type-hinted or validated?
    • What is the expected behavior for very large exports — synchronous streaming only, or is queue/offline generation supported?
    • Are filename and sheet-name sanitization rules deterministic enough to document for downstream importers?

Integration Approach

  • Stack fit: Laravel + Filament panel application with Livewire table pages. No new infrastructure is required; the package adds a session-backed streaming route and an export action on Filament tables. It fits existing admin panels, provided the guard and middleware configuration matches Filament’s expectations.
  • Migration path: Treat v1.0.1 as a patch upgrade. From v1.0.0, expect behavior changes only in edge cases: export row numbering on paginated tables, $rowLoop offsets in state closures, nullable boolean output, date formatting no longer round-tripping through a parser, non-ASCII filenames, reserved sheet names, guest behavior outside panels, and select-column label output. No data migration is indicated, but golden-file/export fixture tests should be re-run because byte-level output can change for these cases.
  • Compatibility: Verify the Filament major version, panel guard configuration, and middleware stack. The streaming route now only needs session start middleware; confirm no legacy auth middleware remains and that the route is still protected. Check Livewire streaming response support for the installed version. Validate on both panel-scoped tables and tables outside panels.
  • Sequencing:
    1. Pin and upgrade in a non-production branch.
    2. Inventory all exports and closure signatures — especially rowIndex(), stdClass $rowLoop, formatStateUsing(), formatted(), boolean(), and SelectColumn.
    3. Build golden-file tests covering nullable booleans, ambiguous dates (day/month), select labels, non-ASCII filenames, reserved sheet names, paginated tables, and guest/non-panel access.
    4. Validate auth in multi-panel and multi-guard scenarios, including policy/Gate enforcement and query scoping.
    5. Roll out to internal admin users first, then broadly.
    6. Document export semantics for analysts and downstream consumers: file-relative row numbers, NULL-boolean behavior, label-vs-value output, filename/sheet sanitization.

Operational Impact

  • Maintenance: Small, focused package with an active patch cadence. The main maintenance cost is tracking Filament internals — guard handling, middleware, column state closures, and rowLoop shape — across Filament upgrades. Budget for regression checks on each Filament minor release.
  • Support: User-visible issues will cluster into predictable categories: “the file doesn’t match the screen” (nullable booleans, select labels, formatted dates), export link authorization failures (guard/session/panel mismatch), and download failures or unexpected names (non-ASCII filenames, reserved sheet names). A support runbook mapping symptoms to the v1.0.1 fixes will reduce triage time.
  • Scaling: Streaming avoids building the entire workbook in memory, but it still occupies a request worker for the duration of the export. Long exports on large tables can hit PHP timeouts and tie up PHP-FPM workers. Confirm memory and time profiles with wide rows and many columns; consider queue-based or chunked generation if tables are large. Ensure the streaming route is not reachable by unauthenticated crawlers or health checks that would start sessions unnecessarily.
  • Failure modes:
    • Guard switch resolves the wrong panel guard → 403s, empty exports, or cross-panel data exposure if scopes are not independently enforced.
    • Guest on a non-panel table → Livewire fallback may be slower or unavailable depending on page context.
    • Reserved sheet names auto-renamed (History → History 1) → downstream importers expecting fixed sheet names break.
    • Non-ASCII filenames sanitized → consumers cannot rely on exact filenames.
    • Nullable boolean exported as FALSE → finance/compliance reports can misstate data unless documented and tested.
    • formatted() dates now emitted as text → downstream parsers expecting typed dates must be updated.
    • SelectColumn labels exported → locale or label changes alter file content for machine-readable consumers.
  • Ramp-up: Low for developers already fluent in Filament; moderate for teams that need to reason about panel guards, middleware, and export type semantics. Expect roughly half a day to a day to validate an existing export set and add regression fixtures. Without explicit documentation and tests for row numbering and type mapping, future upgrades risk silent output changes.
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.
ignibyte/aic-framework
glavweb/data-schema-bundle
glavweb/datagrid-bundle
tacticmedia/scim-server
uni-method/frame
neika-ai/sdk
adachsoft/php-code-style
pharaonic/laravel-notification-dependencies
beautinow/translug
dev-brainiac/bot-cloaked
octoberrain/html
octoberrain/extension
octoberrain/exception
octoberrain/contracts
adachsoft/api-version-bundle
cgv/localized-resource
noith/settings
kda/laravel-package
kda/filament-dynamic-navigation
bypersoft/signbox