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

Laravel Themer Laravel Package

alizharb/laravel-themer

Laravel Themer is an enterprise-grade theme management package for Laravel and TALL stack apps. It offers per-theme Vite builds, NPM workspaces, theme-aware view overrides, Livewire 4 integration, interactive CLI wizards, safe theme cloning/activation, and a fast zero-IO production cache.

View on GitHub
Deep Wiki
Context7

Product Decisions This Supports

  • Build vs. buy for a theme/skinning layer. If your roadmap has any "multiple looks for one codebase" item, this package is effectively a pre-built resolver: view cascade (active theme → parent theme → app), asset isolation, translation override, Livewire component resolution, and a serialized production cache. A PM can price the buy option at ~0 engineering cost vs. roughly 1–3 engineer-weeks to hand-roll view namespacing, inheritance, and asset wiring — and use that delta in a roadmap conversation.
  • White-label / reseller / multi-brand feature line. Per-theme package.json and Vite builds plus theme inheritance map cleanly onto "brand A and brand B share a component base, each overrides a handful of views and CSS." This is the strongest product story: it turns a bespoke fork-per-client model into one deployable, N brands.
  • Theme previewing as a go-to-market enabler. theme:preview with signed, expiring URLs is not a dev convenience — it's a stakeholder sign-off and sales-demo workflow. It unlocks decisions like "ship an unfinished theme to a customer for approval" and "let a client pick a skin before purchase" without exposing the app.
  • Design tokens as a roadmap off-ramp. theme_token() / @themeTokens let you make a public commitment to "rebrand without a code change" today, and defer a full design-system or CMS-driven theming investment by a quarter or more. It also gives marketing a self-serve lever on campaign skins.
  • Deployment and ops decisions. theme:doctor, theme:status, theme:graph, theme:why, cache manifests and theme:refresh are what make theming safe enough to put in CI. This supports decisions about release gatekeeping, on-call runbooks, and whether theming can be owned by a support engineer rather than the core team.
  • Scope decisions in adjacent areas. Ephemeral switching (Themer::forTheme()) means branded emails, PDFs, and invoices can be treated as a theming concern rather than a separate templating project. Similarly, the modular/laravel-modular integration lets a PM position "themes" and "modules" as one packaging story for an internal app marketplace.
  • Explicitly not supported: A/B testing infrastructure, CMS content authoring, per-tenant data isolation, or a non-technical end-user theme editor (the bundled Filament launcher is a sibling package, not core). Treat those as separate line items.

When to Consider This Package

Consider it when:

  • You have, or have a credible near-term commitment to, two or more concurrent visual themes/skins on one Laravel app. One theme with a dark-mode toggle does not qualify — that is CSS custom properties, not a theming system.
  • You are on Laravel 11/12 with Livewire 4 (ideally TALL stack). The headline features — Livewire-aware resolution, per-theme Vite builds — are specifically built for that stack; on Inertia/Vue or Livewire 3 you inherit most of the configuration cost with much less benefit.
  • Your team is comfortable with npm workspaces and multiple Vite configs. Per-theme package.json is a real operational trade-off: better isolation, more build surface. If your CI is already fragile, this adds to it.
  • You can absorb vendor risk deliberately: pin an exact version, read/fork the source, assign an internal owner. With ~8 stars, zero dependents, a single maintainer, and a 1.x version line, this is an early-stage package — adopt it the way you'd adopt an internal library, not the way you'd adopt a framework.
  • The theming layer is not on the critical revenue path for the first release, or you have a documented fallback (plain Blade namespaces + config-driven asset paths) you could revert to in a sprint.

Look elsewhere / build it yourself when:

  • The requirement is really multi-tenancy (isolated data, per-tenant config, per-tenant domains). Use a tenancy package; theming is a skin on top, not a substitute.
  • The requirement is content authored by non-engineers. That is a CMS or a page-builder decision, and themes-as-code will frustrate the marketing stakeholder who asked for it.
  • You need enterprise support, SLAs, security review paperwork, or a long-term maintenance guarantee. Nothing here provides that, and one maintainer plus a future-dated release cadence is a planning assumption you must state out loud.
  • Your team has no Laravel Artisan fluency or the app is mid-migration between Laravel majors — the package tracks Laravel/Livewire majors closely, and that coupling becomes your upgrade problem.
  • You cannot spare 1–2 engineer-days to evaluate the source before committing. For a package at this adoption level, "we read it before we shipped it" is the minimum bar, and if that time isn't available, the answer is no.

Minimum evaluation gate before adoption: a timeboxed spike that (a) runs themer:install and theme:check/theme:doctor clean on a branch, (b) builds two themes with inheritance plus one Livewire component override, (c) confirms the production cache path works under your deploy, and (d) records a named internal owner and an exit plan.

How to Pitch It (Stakeholders)

For executives (the 30-second version): We have a recurring request to make the product look like different brands — for resellers, for white-label deals, for campaign skins. The default answer is a fork per brand, which multiplies maintenance and slows every release. This is an MIT-licensed Laravel package that gives us that capability out of the box: separate themes, shared base, per-brand preview links for customer sign-off, and diagnostics so it can run in production safely. The realistic alternative is one to three engineer-weeks of our own code plus permanent ownership of it. The catch is maturity: it is a young, single-maintainer project, so my recommendation is a timeboxed trial behind a flag, with a pinned version and an internal owner — not a wholehearted platform commitment. Cost of finding out is low; cost of a surprise is contained by the fallback.

For engineering (the honest version): This is a thin, well-instrumented resolver, not a framework. It owns four things: a cached view/translation/Livewire resolution chain with parent-theme inheritance, per-theme Vite/npm wiring, a theme.json manifest with validation, and a CLI surface for lifecycle and diagnostics. The blast radius is bounded — if it fails, we lose theme switching, not the app. Three concerns to plan for: (1) bus factor of one, so we pin the version and treat the repo as forkable; (2) build complexity, since per-theme Vite configs and npm workspaces add CI surface we must own; (3) framework coupling — the package tracks Laravel and Livewire majors closely, so our upgrade cadence becomes its upgrade cadence. Ask: one engineer-day for a spike, then a two-week trial on a single low-traffic surface with theme:doctor and theme:graph wired into CI as the pass/fail signal. If the spike is clean, we wrap it behind our own interface so the dependency stays swappable.

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.
uni-method/symfony-lib
tacticmedia/scim-server-bundle
neika-ai/symfony-bundle
mattleads/agent-publishing-bundle
glavweb/framework-bundle
glavweb/extra-bundle
glavweb/api-bundle
glavweb/admin-bundle
adachsoft/api-version-bundle
elsayed85/laravel-api-exceptions
ouhssini/laravel-demo-mode
daworks/ncloud-outbound-mailer-driver
gp247/cms
ignibyte/aic-gates
nexa-merchant/blog
novasa/laravel-language-center
opencage/geocode
adolfoholzer/parameters
livenetworks/ln-starter
cgv/localized-resource