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

Ti Theme Toolkit Laravel Package

tipowerup/ti-theme-toolkit

Shared PHP and frontend infrastructure for TastyIgniter themes: extend one service provider to inherit color palettes, form widgets, Livewire auth/contact/newsletter components, dark mode, and a curated field schema.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

What it actually is. Not a general-purpose library — it is the extracted, shared backbone of one vendor's TastyIgniter theme portfolio. The value proposition is real but narrow: collapse "new theme from scratch" into ~50 lines of PHP plus a Tailwind/Vite config. If your roadmap contains one TastyIgniter theme, this package is overhead. If it contains three or more, the abstraction pays for itself in the field schema, color derivation, and auth Livewire components alone.

Architecture fit. The design is sound where it counts: AbstractThemeServiceProvider is the single integration seam, and everything else (views, translations, Livewire, Blade components, routes, view-composer payload, error views, asset publishing) hangs off template methods a child theme overrides. ThemePayloadResolver → ColorHelper → buildBrandStyle() → CSS custom properties → Tailwind utilities is a clean server-rendered theming model that avoids a build step per color change, which is the correct trade for an admin-editable storefront. The Livewire-in-toolkit pattern (shared business logic, theme-owned Blade views, last-writer-wins override) is a well-chosen inversion — themes customize presentation without forking auth flows.

Integration feasibility. Low-to-moderate. The PHP side is a composer require plus one class; the friction sits in the JS toolchain, where the package demands Node 18+, Vite, Tailwind, Alpine, and an asset publish step (igniter:theme-vendor-publish) that must run on activation and in CI. That is a build-infrastructure dependency, not just a code dependency — it changes your deployment pipeline, not only your composer.json.

Material technical risks.

  • Documentation drift is severe and load-bearing. The README quickstart still documents tailwind-preset.js and resources/src/css/tokens.css. Changelog 0.3.0 explicitly removed both ("Removed: tailwind-preset.js… resources/src/css/tokens.css — superseded by theme.css"). The stated requirements (Tailwind 3.0+, Vite 5.0+) also contradict a v4/@tailwindcss/vite reality. A developer following the README verbatim will produce a broken build. Any adoption must treat source and changelogs as the spec, not the README.
  • Pre-1.0 with a demonstrated appetite for breaking removals. 0.3.0 swapped the entire Tailwind integration strategy in a minor bump. Semver 0.x means every minor is a potential migration. Pin exact versions; budget upgrade work.
  • Global-state surface area. This package mutates Laravel/TastyIgniter global config: view.paths, asset publishing, menu-item listeners, container bindings, Livewire registration. 0.6.2's fix for registerStorefrontErrorViews() unshifting onto config('view.paths') unconditionally — meaning the last-booted toolkit theme won the 404/500 resolution — is exactly the failure class you inherit. The bug was found and fixed quickly, which is reassuring, but the pattern recurs across 0.4–0.6.
  • Upstream patch carried in-tree. registerStaticPageResolverPatch() corrects a ti-ext-pages bug and is marked TODO: remove once #21 is merged. This is a silent-conflict risk on TI upgrades and a permanent item on your dependency-review checklist.
  • Thin test coverage relative to blast radius. Pest 4 + testbench, ~12 tests, covering placeholder substitution, listener registration, namespace binding, Livewire registration, and one regression. No integration tests for the asset-publish listener, error-view scoping (the 0.6.2 bug), or the color derivation output.

Key questions to answer before committing.

  1. Is TastyIgniter 4.x a fixed platform decision for the next 12–18 months, or a bet? Every major TI or Livewire bump is a hard stop until this package follows.
  2. Who owns the fork? With 0 stars, 0 dependents, and a single vendor's name on the tin, there is no community safety net. If your theme roadmap outlives that vendor's interest, you inherit maintenance.
  3. What is the true supported matrix? Pin down the actual Tailwind/Vite versions from package.json and vite-preset.js, not the README.
  4. Do we need TypeScript strictness? If yes, the shipped .d.ts companions (no build step) are a genuine differentiator versus hand-rolling this in-house.
  5. Can we tolerate 0.x churn, or do we need to vendor a pinned snapshot?

Integration Approach

Stack fit. Narrow and deep: PHP 8.2+, TastyIgniter 4.0+, Livewire 3, Node 18+, Alpine 3. It is not a general Laravel package and should never be evaluated as one — it presumes TI's theme customizer, themes.data column, and igniter:* artisan commands exist. Confirm your TI version and your Livewire major against the toolkit's constraints before any design work; a Livewire 4 migration anywhere in your plan invalidates it.

Recommended posture: treat as an internal platform dependency, not a community package. Concretely:

  • Pin exact versions in every consuming theme ("tipowerup/ti-theme-toolkit": "0.6.2"), per the package's own guidance.
  • Mirror it internally (private VCS or a path repository) so you control the upgrade clock. The MIT license makes this frictionless, and the JS side already supports file: protocol for monorepo work.
  • Single upgrade train: all toolkit-based themes move together, or none do. Divergent pinned versions across sibling themes is the fastest route to the 0.6.2 class of cross-theme bug.

Migration path for an existing theme. Do not do a big-bang port. Sequence:

  1. Spike (1–2 days). Scaffold a throwaway theme from the changelog-accurate instructions, not the README. Prove that npm install && npm run build and igniter:theme-vendor-publish --force produce working assets on your CI image. This is the single highest-value de-risking step and will surface the Tailwind v4 documentation gap immediately.
  2. Port one real theme, colors and fields first. Adopt AbstractThemeServiceProvider + BaseSchema + ColorHelper, leave the theme's own Livewire components in place. This isolates the schema/color abstraction from the Livewire auto-loader.
  3. Adopt the shared Livewire components (Login, Register, ResetPassword, Socialite, Contact, NewsletterSubscribeForm) only after step 2 is stable, and only where the theme's existing logic is genuinely equivalent. Last-writer-wins registration means a theme class at the same relative path silently overrides a toolkit class — document that convention loudly or you will spend a debugging session on it.
  4. Enable the 0.6.2+ features (registerStorefrontErrorViews, registerAutoVendorPublish, static-page resolver patch) last, and explicitly test each: trigger a 404 with two toolkit themes installed, activate a theme and verify assets publish, and check static-page menu items resolve to the correct page.
  5. Second theme, then standardize. The abstraction only proves itself on theme #2.

Compatibility sequencing. Upgrades to TastyIgniter, Livewire, Tailwind, or Vite each become a three-way coordination problem: core → toolkit → every theme. Establish a rule now: upgrade the toolkit first in a branch, run one theme against it, then the rest. Keep the upstream static-page patch on the watch list so you can drop it the moment tastyigniter/ti-ext-pages#21 merges.

Operational Impact

Maintenance burden is the dominant cost, and it is front-loaded. The package itself is small and readable; the maintenance burden is the interface contract — field schema keys, CSS variable names, Livewire component paths, build presets. Those are the things that break, and they break in minor versions. Budget an owner (even part-time) and a per-upgrade checklist: build passes → colors render light and dark → auth forms submit → error pages render → static assets present after activation.

Support model. There is none external. Zero stars and zero dependents means no Stack Overflow answers, no issue-tracker history to mine, and no third-party blog posts. Docs are genuinely comprehensive (docs/service-provider.md, fields-schema.md, color-system.md, form-widgets/banner-manager.md, dark-mode.md, tailwind-preset.md, vite-preset.md, migration guide) — unusually good for a package this young — but the README drift proves they are not continuously verified. Your support plan is "read the source," which is feasible here because the codebase is compact.

Scaling characteristics. Runtime cost is trivial: one theme-data read plus palette derivation per request, CSS variables on <html>, static assets. The scaling risk is operational, not throughput — it's portfolio scaling. Every additional toolkit theme adds another consumer of a global-state-mutating package, and the 0.6.2 error-view bug is the template: two themes, one shared view.paths array, last boot wins. Verify whether ThemePayloadResolver caches the resolved payload; if not, add a request-scoped cache before traffic justifies it.

Failure modes to instrument.

  • Silent asset-publish failure. registerAutoVendorPublish() wraps the artisan call in try/catch and logs a warning. A missing favicon or fallback logo will surface as a cosmetic bug weeks later. Alert on the log line.
  • Cross-theme view leakage. Post-0.6.2 the provider bails unless ThemeManager::getActiveThemeCode() matches, but confirm this holds with your exact install and multi-theme setup.
  • Dark-mode flash. Alpine store + localStorage + html.dark toggle is client-side by nature; expect FOUC unless you inline an early blocking script. Test on first paint, not just after hydration.
  • Livewire override ambiguity. Two classes, same relative path, no error — just the wrong one winning. Add a startup assertion or convention test.
  • Upstream-patch collision. If ti-ext-pages#21 merges, the in-tree resolver becomes a redundant listener. Remove promptly.
  • Namespace reflection default. phpNamespace() deriving itself from the child SP is convenient and opaque; override it explicitly in every theme so a future refactor doesn't silently break class resolution.

Ramp-up. A competent Laravel/PHP developer reaches productive in roughly a day on the PHP side — one base class, one schema merge, one resolver. The real ramp-up cost is the frontend toolchain: Tailwind v4 @import model, @tailwindcss/vite, CSS-variable-driven color tokens, and Alpine store conventions. Estimate 2–3 days to full velocity for someone who has not touched this stack, and expect the README to actively mislead them until it's corrected. Write an internal "start here" doc that supersedes the README quickstart, and link the changelogs from it.

Verdict. A well-factored, clearly-authored portfolio accelerator with a real but bounded niche. Adopt it if you are committed to TastyIgniter 4 for multiple themes and can own a fork; avoid it for a single theme, for any team unwilling to pin exact versions, or where the frontend toolchain is already settled against Tailwind v4. The score of 15.5 and zero dependents reflect immaturity and lack of external validation, not poor engineering — the changelog discipline, typed .d.ts companions, and upstream-bug patch all signal a maintainer who cares. The correct TPM move is not "adopt the package" but "adopt the pattern," with the package as the reference implementation and your pinned fork as the artifact you actually depend on.

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.
mehedimi/laravel-amp-mail
happones/laravel-vue-i18n-generator
jwerd/inertia-table
siberfx/flysystem-wasabi
hollyit/token-replace
ippanelcom/laravel-sdk
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