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

Mails Laravel Package

backstage/mails

Backstage Mails is a Laravel package for creating and managing dynamic email templates. Build reusable mail layouts, pass data into them, preview messages, and update transactional emails without redeploying your application.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. Unchanged. The package remains a Laravel service-provider package that renders logged mail and mail events inside a Filament admin panel — a developer-observability surface over data captured from Laravel's mail pipeline, not application infrastructure. It fits Laravel monoliths/modular monoliths that already run (or plan) a Filament panel, and misfits API-only services, headless backends, and teams on Nova/Backpack/custom admin. One update to the prior framing: the supported admin surface now demonstrably includes Filament 5.x, which widens the fit for teams that have already moved to Filament 5 but had to skip this package.

Integration feasibility. Still mechanically trivial — composer require, publish config and migrations, migrate, register the plugin in the PanelProvider. Two amendments from this release:

  • On Filament 5.7.0+ the minimum viable version is 3.0.15; earlier versions fail at package discovery, i.e. composer install/update itself dies in the deploy pipeline, before your app boots. This is a version-selection constraint, not an integration task.
  • The fix is upstream-only ("no code changes needed"), so the effort delta for existing users is a version bump — but only if they are not pinning an exact 3.0.x. Anyone who pinned per the earlier guidance must bump the pin deliberately.

Technical risk.

  • Boot-time coupling is now a demonstrated risk, not a hypothetical. This release is a compatibility patch for a minor Filament bump (5.7.0) that broke ListMails::unmountAction() against BasePage::unmountAction(). Because the break lands during package discovery, the failure mode is a fatal error at composer install / artisan package:discover, not a rendering glitch in one admin page. This is a materially higher severity than the "silent drift" scenario previously documented, and it validates the concern about single-maintainer Filament plugins — the package overrides framework internals (unmountAction), so every Filament minor is a potential boot-time fatal.
  • Mitigating signal: the maintainer shipped a targeted patch promptly, with a fix that is forward-compatible across the whole filament/filament: ^5.0 range rather than pinned to one version. That is the right shape of fix and is mild evidence against abandonment risk.
  • CI coverage remains unproven. A break against Filament 5.7.0 reaching a tagged release implies the release gate does not run against the newest Filament minor (or does not gate on failure). Treat "there is a CI matrix" as unconfirmed.
  • Supported-version ambiguity. The notes confirm ^5.0 support and say nothing about Filament 3 or 4. Do not assume the package still supports Filament 3/4 — verify the composer.json constraint. The prior assessment's "Filament 3 or 4" statement is stale either way.
  • Capture semantics remain the critical unknown and are untouched by this release: whether full rendered HTML bodies, headers, and attachment metadata are stored still determines both value and risk (password resets, invoices, PII, auth tokens in a queryable table).
  • Write-path coupling remains unconfirmed. If logging is synchronous and not fail-safe, a logging exception can suppress outbound mail. Still the highest-severity runtime failure mode.
  • Adoption signals unchanged: zero dependents, low star count, no downstream validation of migration, retention, or high-volume behaviour.
  • Metadata anomaly (previously flagged release date of 2026-08-04) is still worth reconciling against tag history, though this release is direct evidence of current activity.

Key questions for the maintainer / spike.

  1. Which Laravel and Filament majors are supported now — is Filament 3/4 still in the constraint, or is this release line Filament 5-only?
  2. Is there a CI matrix, and does it test against the newest Filament minor on a schedule (not just at release time)? Why did the 5.7.0 signature change not fail CI before tagging?
  3. Does it capture full bodies or metadata only? Is redaction or field-level exclusion supported?
  4. Does it hook MessageSending/MessageSent, or replace the mail transport? How does it behave with queued mailables?
  5. Is logging wrapped in try/catch and safe to fail?
  6. Is there built-in pruning, or must retention be built?
  7. Can capture be scoped per-environment, per-mailer, or per-tenant?
  8. Is storage on the default connection or configurable to a separate one?
  9. Which other Filament internals does the package override? Any override of a framework method is a future boot-time fatal candidate and should be enumerated so upgrades can be reviewed against it.

Integration Approach

Stack fit. Target profile: Laravel 10/11/12, PHP 8.1+, Filament 5.x (^5.0, including 5.7.0+ for package 3.0.15+), an existing admin panel with authentication and an authorization layer. Confirm Filament 3/4 support explicitly before relying on it. If the team is not already on Filament, the cost of adopting this package still includes adopting Filament — a much larger decision than the package itself.

Migration path.

  1. Pin backstage/mails to 3.0.15 or later before anything else — on Filament 5.7.0+, earlier versions break composer install during package discovery.
  2. Spike in a staging branch: install, publish, migrate, register the plugin, send a representative sample of mailables (plain, markdown, queued, with attachments).
  3. Inspect what actually lands in the table — columns, body size, attachment handling — and use that to write the data-classification note.
  4. Add retention before enabling in production: a scheduled prune command plus an index on created_at, with a retention window agreed with security/legal (30–90 days typical).
  5. Gate the resource behind an explicit permission rather than relying on panel access alone.
  6. Roll out behind an environment flag (MAIL_LOG_ENABLED), production last.

Compatibility. Two constraints now, not one. The Filament major determines whether the package is usable at all; the Filament minor determines whether the app boots, because the package overrides framework methods. Practical controls:

  • Pin the package to an exact version, and treat Filament upgrades as requiring a matching package bump in the same change.
  • Add a CI job that resolves the newest allowed Filament and runs a boot smoke test — composer install plus php artisan package:discover and php artisan route:list — so a discovery-time fatal fails the pipeline instead of the deploy. An app-test-suite run is necessary but not sufficient: this class of break happens before tests execute.
  • If using Dependabot/Renovate, do not auto-merge Filament minors; route them through that boot job.

Sequencing. Version bump and boot smoke test in CI (immediate, days) → install and observe in staging (week 1) → retention, access control, and classification sign-off (week 2) → production enablement for a pilot team (week 3) → decide on long-term ownership, including whether to vendor-fork if upstream stalls. Do not enable capture in production before retention exists; the table grows monotonically from the first send.

Operational Impact

Maintenance. Low but vigilant rather than passive. The package overrides Filament page internals, so the realistic cadence is a required patch on some Filament minors — as happened here. Budget a small recurring allowance (a few days per year) and assign a named owner who watches Filament releases and package releases together. MIT and small enough to vendor-fork; that remains the appropriate contingency, and this release shows the upstream is currently responsive enough that forking is a fallback rather than a plan.

Support. No SLA, community-only, effectively single-maintainer, zero dependents — no peer ecosystem for bug reports or upgrade guidance. Keep the fallback defined: Laravel Telescope already provides mail inspection, and a ~50-line event listener writing to a table is a credible in-house replacement. Treat the package as replaceable by design, and keep the blast radius contained by not letting other code depend on its models or table schema.

Scaling. Cost scales linearly with outbound mail volume: table bloat, index degradation, storage cost from HTML bodies. Mitigations unchanged — separate database connection for the log table, retention window, attachment references rather than binaries, and sampling or disabled capture in high-volume environments. For apps sending into the millions per month, prefer metadata-only capture or a dedicated observability sink.

Failure modes.

  • Boot-time fatal from a Filament minor — newly confirmed, high severity. An internal-signature change in Filament 5.7.0 crashed package:discover, taking down composer install and therefore the deploy pipeline for every environment on that version. Loud and diagnosable, but it blocks releases and, if it reaches production autoload, blocks the app — including mail sending. Mitigate with an exact pin, a boot smoke test in CI, and no auto-merge on Filament minors.
  • Mail suppression — a logging exception in the send path blocks delivery. Highest-severity runtime mode; must be confirmed fail-safe or wrapped.
  • PII exposure — over-broad panel access surfaces reset tokens and customer content. Explicit permissions plus audit logging on the resource.
  • Storage exhaustion — unbounded growth without pruning.
  • Silent drift — a Filament change breaks the resource cosmetically without a fatal; add a smoke test that loads the resource route.
  • Misleading signals — an incomplete capture path (e.g., queued mail not intercepted) makes the tool look authoritative while under-reporting, which is worse than no tool for support triage.

Ramp-up. Very low for a Laravel/Filament developer — hours to first value. The constraint is documentation quality and capture semantics, not implementation complexity. The decision still hinges on two facts that cannot be assumed from the README — whether bodies are stored, and whether logging can fail safely — plus one now-answered fact: on Filament 5.7.0+, nothing works below 3.0.15.

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.
3mdikram/worldmoneywords
snowsoft/config
itmosoft/laravel-subscriptions
larva/laravel-ai-qwen
diephp/sequences
users-au/socialite-provider
twidpay/twid-logger
mrnewport/laravel-plaid
mrnewport/laravel-repo
mrnewport/laravel-docsign
mrnewport/laravel-stow
mrnewport/laravel-flow
mrnewport/laravel-priceable
mrnewport/laravel-nestedterms
fredmeng/laravel-apidoc-generator
itstructure/laravel-multilingual-tools
pdustdar/elasticsearch
markupai/php-sdk
rlacerda83/lumem-microservice-shipment
uni-method/symfony-lib