Download the PHP package visualbuilder/filament-export-scheduler without Composer

On this page you can find all versions of the php package visualbuilder/filament-export-scheduler. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.

FAQ

After the download, you have to make one include require_once('vendor/autoload.php');. After that you have to import the classes with use statements.

Example:
If you use only one package a project is not needed. But if you use more then one package, without a project it is not possible to import the classes with use statements.

In general, it is recommended to use always a project to download your libraries. In an application normally there is more than one library needed.
Some PHP packages are not free to download and because of that hosted in private repositories. In this case some credentials are needed to access such packages. Please use the auth.json textarea to insert credentials, if a package is coming from a private repository. You can look here for more information.

  • Some hosting areas are not accessible by a terminal or SSH. Then it is not possible to use Composer.
  • To use Composer is sometimes complicated. Especially for beginners.
  • Composer needs much resources. Sometimes they are not available on a simple webspace.
  • If you are using private repositories you don't need to share your credentials. You can set up everything on our site and then you provide a simple download link to your team member.
  • Simplify your Composer build process. Use our own command line tool to download the vendor folder as binary. This makes your build process faster and you don't need to expose your credentials for private repositories.
Please rate this library. Is it a good library?

Informations about the package filament-export-scheduler

Custom reports and scheduled exports for Filament

Latest Version on Packagist run-tests Total Downloads GitHub commit activity

Let your users build their own reports from any Filament exporter, view the results in the panel, download them on demand, and have them emailed on as many schedules as they like.

Version Compatibility

Package Version Filament Laravel PHP
6.x 5.x 11.x, 12.x 8.2+
5.x 5.x 11.x, 12.x 8.2+
4.x 4.x 10.x, 11.x 8.2+

Export Schedules pack shot

Upgrading from 5.x?

6.0 is a breaking change. ExportSchedule has been split into CustomReport and ScheduledReport, and the export_schedules table is replaced. Your existing rows are migrated across automatically with no data loss, but app code that touched the old model, resource or table needs updating. Read UPGRADE.md before you upgrade.

Reports and schedules are separate things

A Custom Report is the definition: which exporter (or SQL query), which columns, which filters, and who is allowed to see it. The date range and file format for a delivery are chosen per-schedule.

A Report Schedule is an optional delivery instruction hanging off a report: when to run it, who receives it, who to copy in, what date range and file format to use, and whether to suppress empty results.

Keeping them apart means one report can be

Screenshot 2026-08-11 at 21 32 53

 

It sits under a Reports navigation group by default: Custom Reports. Schedules are managed inline from the report itself, through the Schedules relation manager on its edit page.

Screenshot 2026-08-11 at 21 39 29

 

Screenshot 2026-08-11 at 21 45 15

 

Any Filament Exporter can be the starting point

Screenshot 2026-08-11 at 21 47 49

 

Or write a SQL query report

Set the report type to SQL Query and the exporter picker is replaced by a query field. Useful for reports no exporter covers: cross-table aggregates, window functions, or anything you would rather express in SQL than in Eloquent.

Column headings come from the result set metadata rather than from the rows, so the report is viewable and downloadable even when it matches nothing.

A SQL query is more privilege than most users should have, so creating one is gated by role:

Screenshot 2026-08-11 at 21 48 26

 

Share reports with other users

Every report has a visibility mode:

Mode Who can view and download
Owner Only (default) Only the person who built it
User Type Every user of one chosen user class
Named Users Only the users you pick from that class

Visibility grants viewing and downloading, nothing more. Editing, deleting, running and schedule management stay with the owner whatever the mode — a report shared with you is yours to read, not to change.

Screenshot 2026-08-11 at 21 51 09

 

Let an admin see and manage everything

Ownership is deliberately strict, which leaves nobody able to tidy up a report whose owner has left. The BypassesReportVisibility contract is the escape hatch: return true for a user and they are treated as the owner of every report and every schedule.

Point the config at it, or bind the contract directly in a service provider:

A user who passes the check gets, on every report regardless of its visibility mode:

Without a bypass With a bypass
See it in the reports list Owner, or shared with them Always
View and download it Owner, or shared with them Always
Edit and delete it Owner only Always
See its schedules panel and the schedules list Owner only Always
Edit, delete and run a schedule Owner only Always

The contract takes a nullable user and is asked about guests too, so an implementation must handle null. The default, VisibilityBypass, returns false for everyone — nothing changes until you bind your own.

 

Filter by available attributes

Exclude attributes with the excludeFilterableAttributes method on the InteractsWithExportSchedulerFilter trait.

This is useful for excluding attributes not present in the database, or computed attributes/properties.

Date filtering is offered on any attribute via the <> (between) and is_in operators, using preset ranges: today · yesterday · last 7 days · last week · last 30 days · last month · this month · last quarter · this year · last year · next 7 days · next 30 days · next 60 days · next 90 days. The date column defaults to created_at and can be changed in the exporter.

Filter by attributes

Filter by available relationships

Filter by relations

Make columns clickable to their records

A column can link straight through to the record it describes, the same way it already does on that record's own Filament table — an "Order ID" column linking to the order, an "End User" column linking to the user a relation resolves to.

Whoever builds a report only picks columns; there is nothing to configure per report. The exporter's author decides once, by implementing HasLinkedColumns on the exporter and returning a resolver per linkable column:

Every report built from OrderExporter gets these links automatically, on whichever of the two columns it selects. Returning null — no related record, or the resolver chooses not to link an unauthorized one — just leaves that cell as plain text for that row.

Only exporters implementing HasLinkedColumns get links; everything else, including SQL query reports, renders exactly as before.

Users choose which columns to include

Screenshot 2026-08-11 at 21 57 58

 

Easy frequency selection

Set on each schedule:

Each schedule carries its own timezone too, so one report can reach different regions at a sensible local hour.

An Enabled toggle sits beside the frequency, so a schedule can be built and left switched off until it is wanted, or paused later without deleting it. It can also be flipped straight from the list.

Frequency and cron

Choose who receives it

The file format is chosen per-schedule: CSV or XLSX.

Screenshot 2026-08-11 at 21 53 49

 

Automatic Recipients

A schedule can instead be fanned out: the report is rerun once per user found in the data, and each of them is sent only their own rows. The fields are hidden from the form by default, since it is a sharp tool and the visibility features now cover most of what it was used for.

Schedules that already have it enabled keep fanning out regardless of this flag — it only governs whether the fields can be reached in the UI.

Control when to send reports

View report results in the admin panel

Opening a saved report shows its live results without running the export or emailing anyone.

Filtering is not offered in the viewer, because filters are part of the report definition — change them on the report itself.

Searching and sorting are done in PHP rather than in the database, so that they work on columns that are not database columns: morph relations, relationship aggregates, accessors, and whatever expressions a SQL query report happens to select. The whole result set is therefore loaded when the page is opened. On very large reports set viewer_max_rows in the config to cap how many rows the viewer will load — the export itself is never capped.

Screenshot 2026-08-11 at 22 00 52

 

File formats

A schedule's format is chosen when you create or edit it: CSV or XLSX. The download action offers the chosen format; CSV is always written first, and XLSX is built from it.

Attractive HTML email templates

Email

Installation

You can install the package via composer:

Copy views and migrations, then run the migration:

This creates the custom_reports and scheduled_reports tables. If you are coming from 5.x, a third migration copies your export_schedules rows across — see UPGRADE.md.

Optionally seed an example report for the users table. It creates a report of all users, delivered on the 1st of every month:

Schedule Command in Laravel

To enable automatic sending you must add the console command to your scheduler.

1. Register the Scheduled Command

In routes/console.php (Laravel 11+):

2. Check the server's cron

Ensure your server is set up to run Laravel's scheduler by adding this cron entry:

3. Review the config file

Here you can

4. Ensure you have added the Filament Export migrations

If you don't have an exports table you can add it with:

Check the docs at: https://filamentphp.com/docs/actions/prebuilt-actions/export

Polymorphism — using different user classes

This package uses this by default, so please ensure your exports migration has this line:

This will create the columns user_type and user_id to allow any user type to be associated with an export.

Note: this call is already made in the package service provider, so you don't need to include it.

5. Add the plugin to your Filament panel provider

Both navigation items can be gated together, or one at a time:

Make some export classes with:

How the package identifies your users

Nothing here assumes your user model has email, id or name columns. Every id, display label and email address the package reads goes through the ResolvesReportUsers contract, resolved from the container.

The default resolver tries three things in order:

  1. The model's own HasExportReportIdentity methods, if it implements that contract.
  2. The title_attribute and email_attribute from config, read with data_get() — so dot notation into relations works.
  3. A fallback label, so a user is never rendered as a blank option.

email_attribute deliberately does not inherit title_attribute. A model labelled by a person's name is never mailed at that name.

Per-model control

Or replace the resolver entirely

Filtering exports by a related attribute/model

A typical scenario might be exporting all Orders filtered by a specific Organisation. To filter by organisation we need to know the field that should be searchable.

This requires adding the InteractsWithExportSchedulerFilter trait to the models that can be filtered.

The trait provides:

MorphTo relations are also supported when filtering nested attributes.

Extending the package

The service, job, notification and mailable all take the report and its schedule as separate arguments. The schedule is always optional — pass none for an ad hoc run.

Class Signature
ScheduledExporter __construct(CustomReport $report, ?ScheduledReport $schedule = null)
ScheduledExportCompletion __construct(Export $export, CustomReport $report, ?ScheduledReport $schedule = null, bool $isAdHoc = false)
ScheduledExportCompleteNotification __construct(Export $export, CustomReport $report, ?ScheduledReport $schedule = null)
ExportReady __construct(Export $export, CustomReport $report, ?ScheduledReport $schedule = null)

Testing

To prove the integrity of the system the test suite creates these schedules and simulates running the tasks every day for 4 years to ensure leap years are handled correctly.

Test Name Schedule Frequency Cron Expression Expected Report Time Verification Method (Example)
User Export Daily DAILY N/A Every day at 3:00 AM Check for a new file/email at 3:00 AM each simulated day.
User Export Weekly (Monday) WEEKLY N/A Every Monday at 4:00 AM Check for a new file/email at 4:00 AM every Monday.
User Export Monthly (Day 15) MONTHLY N/A The 15th day of every month at 5:00 AM Check for a new file/email at 5:00 AM on the 15th of each month.
User Export Monthly (Last Day) MONTHLY N/A The last day of every month at 6:00 AM Check for a new file/email at 6:00 AM on the last day of each month.
User Export Yearly YEARLY N/A January 1st of every year at 7:00 AM Check for a new file/email at 7:00 AM on January 1st.
User Export Leap Year Test YEARLY N/A February 29th (during leap years) at 10:00 AM Check for file/email on Feb 29th in leap years; verify handling in non-leap years.
User Export Quarterly (Jan 10) QUARTERLY N/A January 10th, April 10th, July 10th, October 10th at 8:00 AM Check for a new file/email on these dates at 8:00 AM.
User Export Half-Yearly (Jul 1) HALF_YEARLY N/A July 1st and January 1st of every year at 9:00 AM Check for a new file/email on these dates at 9:00 AM.
User Export Weekdays 10:30 AM CRON 30 10 * * 1-5 Every weekday (Monday-Friday) at 10:30 AM Check for a new file/email at 10:30 AM each weekday.
User Export Quarter Ends 2:00 AM CRON 0 2 1 3,6,9,12 * The 1st day of March, June, September, and December at 2:00 AM Check for a new file/email on these dates at 2:00 AM.

Codex Setup

When using this repository in the OpenAI Codex environment, a .codex/setup.sh script will install PHP, MySQL, and Composer during initialization when network access is available.

Upgrading

Please see UPGRADE.md for the 5.x to 6.0 migration guide.

Changelog

Please see CHANGELOG for more information on what has changed recently.

Contributing

Please see CONTRIBUTING for details.

Security Vulnerabilities

Please review our security policy on how to report security vulnerabilities.

Credits

License

The MIT License (MIT). Please see License File for more information.


All versions of filament-export-scheduler with dependencies

PHP Build Version
Package Version
Requires php Version ^8.2
anourvalar/eloquent-serialize Version ^1.3
filament/filament Version ^5.0
spatie/laravel-package-tools Version ^1.16.0
Composer command for our command line client (download client) This client runs in each environment. You don't need a specific PHP version etc. The first 20 API calls are free. Standard composer command

The package visualbuilder/filament-export-scheduler contains the following files

Loading the files please wait ...