bebo925/tall
TALL Stack preset for Laravel with Blade components for buttons, inputs, panels, tables, modals, messages, and page headings. Install via Composer and run tall:install to scaffold JS deps, Tailwind, Mix, and app layout.
Architecture fit. bebo925/tall bundles two assets with very different risk profiles, and a TPM should treat them separately:
php artisan tall:install) that wires up Tailwind, Vite, JS dependencies, and an app.blade.php layout. This is run-once-then-discard tooling — no runtime coupling, low blast radius if reviewed before execution.<x-tall::button>, input.*, panel, table, dropdown, multiple-select) plus Livewire components (tall-markdown-x, confirmation dialog) and a modal layout built on wire-elements/modal. This is a long-lived dependency that will be inherited by every future contributor and every future Livewire upgrade.Architecturally it fits cleanly only inside a TALL-shaped application: Laravel + Blade + Livewire 3 + Alpine + Tailwind + Vite. It is not a design system — there are no design tokens, no theming layer, and no documented extension hooks beyond publishing views (--tag="tall-views"). Style variants are hardcoded prop strings (style="primary", button.flat), not composable primitives. That is acceptable for internal tools and admin CRUD; it is a poor fit for anything a customer sees as a brand surface.
Integration feasibility. Mechanically simple: one Composer require, one Artisan command, then Blade includes. The friction is in what the command mutates: tailwind.config.js, webpack.mix.js, vite.config.js, and a new app.blade.php. On a greenfield repo this is a 30-minute win. On an existing repo it is an overwrite hazard requiring a manual diff-and-merge, and the vite.config.js host edit for HMR is an environment-specific change that historically causes CORS pain on shared hosting and non-local domains.
Technical risk.
| Risk | Severity | Assessment |
|---|---|---|
| Maintainer / bus factor | High | 1 star, 0 dependents, single author. Effectively unvetted by the ecosystem. There is no evidence of CI, a test suite, or a contributor base. |
| Release provenance | High | Release metadata shows 2026-05-13 and maturity is only "readme, releases" — no changelog, no semver policy, no upgrade guide. Verify against Packagist before pinning. |
| Livewire hard dependency | Medium | Modal, dropdown, and notification flows assume Livewire. Alpine-only or Inertia-based frontends need those components replaced, not configured. |
| Vite-only assumption | High | Shops on Laravel Mix must migrate build tooling, not just install a package. This can exceed the value of the package outright. |
| Customization ceiling | High | Publishing views helps, but you inherit maintenance of forked Blade. Undocumented slots and no token layer mean brand alignment becomes per-component surgery. |
| Composer supply chain | Medium | Low inherent risk (Blade templates, no network calls, MIT), but an unpinned dependency from a single-maintainer package should be committed at a fixed version or vendored. |
| Performance | Low | Component rendering is trivial. The real cost is Livewire round trips on table/select components, which the package does not appear to paginate. |
Key questions.
composer.json constraints for PHP, Laravel, Livewire, and wire-elements/modal — and do they match our target versions today and at our next upgrade?Stack fit. Target this at Laravel 10/11, Livewire 3, Alpine 3, Tailwind 3, Vite 5, Blade-rendered (no Inertia). It maps to internal tools, admin panels, and form-heavy MVP surfaces. It does not map to public marketing surfaces, data-visualization-heavy dashboards, or any team already standardized on React/Vue.
Dependency posture — recommend fork-and-own, not depend. Given 1 star, 0 dependents, and no test evidence, the correct TPM position is: consume the package as a source of scaffolding and reference components, not as a versioned upstream we track. Concretely:
tall:install on a throwaway branch, capture the diff, and hand-review every file before it lands on a real branch. Treat the installer output as a pull request from an unknown contributor.--tag="tall-views") and commit them under our own namespace, e.g. resources/views/components/ui/*, rewriting x-tall:: prefixes. This eliminates the runtime package dependency entirely.composer.json entry only if we want the Livewire components (tall-markdown-x) as-is; otherwise port those too.This converts a maintenance risk into a fixed, one-time adoption cost and removes the supply-chain question permanently.
Compatibility and migration path.
wire-elements/modal version alignment before committing, since that transitive dependency — not this package — is where breakage will originate.Sequencing.
Maintenance. Under the fork model, ongoing cost is low but real: roughly a few hundred lines of Blade to own, reviewed at each Livewire major and each Tailwind major. Budget ~2–4 engineer-days per major framework upgrade. Under the depend model, cost is unpredictable — it is whatever the upstream author does or does not do, and we have no leverage. The fork model also gives us a clean answer to "who fixes this in 18 months," which is the question that kills packages like this in architecture review.
Support. There is no vendor, no SLA, no issue-triage history to inspect, and no documented changelog. Internal support must be a named owner on the platform team. Documentation is a README of usage examples with no API reference, no prop tables, and no stated version constraints — so a short internal runbook is a prerequisite, not a nice-to-have.
Scaling. Runtime cost is negligible: these are server-rendered Blade partials. The scaling constraints are behavioral, not infrastructural:
multiple-select, dropdowns, and modals add per-interaction server latency. On high-latency connections or large option sets (MyModel::all() is in the README example) this becomes a visible UX problem. Cap option sets and paginate server-side.Failure modes.
| Failure mode | Blast radius | Detection & mitigation |
|---|---|---|
| Upstream abandons package | None under fork model; total under depend model | Fork decision is the mitigation |
tall:install overwrites existing build config |
Build breakage, hard to diagnose | Never run unreviewed on a real branch; diff before merge |
| Livewire major upgrade breaks modal/dropdown | Feature outages across all screens using them | Pin Livewire; add these components to the upgrade test checklist |
| Vite HMR host misconfiguration | Local dev broken, sometimes prod asset paths | Encode host in .env, document in runbook |
| Brand/design drift discovered late | Rework across every shipped screen | Gate at step 3, before scale-out |
| Unpaginated table or select on large datasets | Latency, memory on request | Enforce pagination convention in the runbook |
Ramp-up. A Laravel-comfortable engineer with no Livewire experience needs roughly 1–2 days to be productive with these components, given the internal runbook. The README's examples are copy-pasteable and the component surface is small. The steeper ramp is on whoever inherits the forked views and must reconcile them with the next Livewire release — assign that ownership explicitly at adoption time.
TPM recommendation. Approve as a single-module pilot, funded and time-boxed, executed under a fork-and-own posture with a named internal owner. Do not approve as a shared platform dependency, and do not approve alongside a concurrent Laravel Mix → Vite migration. Success criteria: pilot module shipped with the forked components, measured velocity delta recorded, and a written owner-plus-runbook in place before expansion.
How can I help you explore Laravel packages today?