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

Turbo Laravel Laravel Package

hotwired/turbo-laravel

Turbo Laravel integrates Hotwired Turbo with Laravel, offering Artisan install commands, Blade components and directives for Turbo Frames, Streams, and native apps, plus helpers that make your Laravel responses Turbo-compatible.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit

  • Server-rendered-first package: it enhances Laravel's existing HTTP/Blade pipeline rather than introducing a parallel rendering model. Register a service provider, add Blade directives (@turboStream, @turboStreams, @turboFrame), and controllers return Turbo Stream responses instead of JSON + client hydration.
  • Fits Laravel monoliths, Blade apps, and teams already comfortable with controllers/views. It is not a replacement for an SPA framework nor for Inertia — it overlaps most with Livewire as a "reactive UI" choice, so the org needs a deliberate stance per application rather than per team.
  • Low coupling: the package is thin sugar over Laravel responses and request/response middleware (TurboMiddleware detects frame requests and drives redirects). Exit cost is low — worst case you revert to plain Blade + fetch.
  • Release 2.6.0 is framework-support only (Laravel 13.x compatibility, PR #159). No new directives, no new runtime surface, no architectural change — the shape of the decision is unchanged.

Integration feasibility

  • composer require hotwired-laravel/turbo-laravel, publish config, import Turbo JS via Vite. No node build changes beyond adding @hotwired/turbo.
  • Incremental by design: Turbo Drive can be scoped per-element/route (data-turbo="false"), so a single CRUD page is a realistic first slice. This is the strongest argument for piloting rather than committing.
  • Requires the team to also adopt the Hotwire JS mental model (frames, streams, morphing, data-turbo-* attributes). The PHP side is trivial; the JS side is where the learning curve lives.
  • 2.6.0 is an additive minor (2.5.1 → 2.6.0), so it is consumable as a routine dependency bump. The only thing to verify is whether adding Laravel 13 support came with a raised minimum constraint — see Compatibility.

Technical risk

  • Mental-model risk, not vendor risk: silent failures from frame target mismatches, redirects inside frames escaping to full page loads, and Turbo cache serving stale authenticated pages are the classic failure modes and are not caught by unit tests. 2.6.0 does nothing to change this.
  • Version pinning still matters: the v1→v2 transition carried breaking API changes, and 2.6.0 is a minor on the 2.x line, so no deprecation runway was needed here. Keep pinning and treat any 3.x as a planned migration.
  • Maintenance signal improved marginally. A same-line contributor shipping Laravel 13 support promptly is the single best counter-indicator to "abandoned package blocks our framework upgrade." It does not change effective bus factor (still small, still single-maintainer-shaped) — track record of one release is not a support contract.
  • opportunity: 1.37 and dependents: 0 still signal a modest ecosystem footprint — you are unlikely to find many Laravel+Turbo reference architectures or a large hiring pool that already knows it.
  • The risk this release actually removes is the "framework upgrade blocked by stalled dependency" scenario for teams on or moving to Laravel 13. That was previously an unpriced cost in the adoption case; it is now largely priced.

Key questions

  • Which Laravel version is the target app on? 2.6.0 is what unblocks Laravel 13 — if we are on 12, this release is irrelevant to us and we should adopt whichever 2.x line matches our framework.
  • Did 2.6.0 raise the minimum Laravel/PHP constraint (i.e. drop Laravel 10/11)? Read composer.json at the tag, not the release notes.
  • Which surface adopts Turbo first (a form-heavy CRUD screen), and what is the explicit rollback plan?
  • Is our product stance Livewire, Inertia, or Turbo? Mixing all three in one codebase multiplies cognitive load with no architectural payoff.
  • Do we need real-time updates? Turbo Streams over WebSockets require Laravel Echo + broadcasting glue beyond this package — is that in scope now or later?
  • How do we handle auth/session cache invalidation on logout, and asset versioning under Turbo Drive caching?
  • Who is the internal champion accountable for the Hotwire convention doc?

Integration Approach

Stack fit

  • Best fit: Laravel 10–13-era apps with Blade views, Vite, and modest JS ambition. Pairs cleanly with Stimulus for sprinkles; deliberately redundant with Livewire/Inertia, so treat it as an either/or decision at the app level.
  • Poor fit: heavily client-state-driven dashboards, apps with an existing React/Vue SPA, or teams with no appetite for progressive-enhancement debugging.
  • 2.6.0 widens the "best fit" band at the top end (Laravel 13). It does not widen it at the bottom — confirm before assuming Laravel 10 remains in the supported matrix.

Migration path

  • Do not enable Turbo Drive globally on day one. Sequence: (1) one page with Turbo Frames for form submission, (2) Turbo Stream responses for partial updates, (3) opt-in Drive navigation route-by-route, (4) finally consider global Drive.
  • Keep controllers honest: introduce a thin response layer (or helper trait) that returns turboStream vs. full view depending on TurboMiddleware's frame detection, so fallback behavior for non-Turbo requests is never an afterthought.
  • Retain plain-HTML fallbacks for every Turbo-enhanced endpoint — this is both an accessibility and a rollback guarantee.

Compatibility

  • Land on the 2.6.0 tag (or later 2.x) if the target app is on or heading to Laravel 13; otherwise pin to the 2.x release whose constraint matrix matches the framework version actually deployed.
  • Read the composer.json constraint at the tag to confirm both floor and ceiling: framework-support releases frequently raise the minimum as well as the maximum, and a floor bump would strand any app still on Laravel 10/11.
  • Also pin the Turbo JS major version, since server conventions and client behavior are coupled — the PHP release does not move the client, so a PHP bump can be taken independently of a JS bump.
  • Check interaction with existing middleware (auth, CSRF, rate limiting) and with any package that assumes JSON responses or its own redirect handling.

Sequencing

  1. Dependency bump to 2.6.0 (or the constraint-matched 2.x) on a throwaway branch — 30 minutes to confirm install, config publish, and test suite are unaffected. This is a no-op change; treat it as such rather than as a project.
  2. Two-day spike: one CRUD page end-to-end, including validation errors rendered as streams.
  3. Decide and document the Livewire/Inertia/Turbo stance for the app.
  4. Standardize the frame/stream helper conventions and a Stimulus controller scaffold.
  5. Pilot with one squad on a bounded feature area for 4–6 weeks; instrument error rates and support tickets.
  6. Expand only after the pilot's failure modes are documented in a runbook.

Operational Impact

Maintenance

  • Small, MIT-licensed dependency with a narrow API surface — low ongoing cost if pinned. Budget a few hours per Laravel major upgrade to confirm compatibility; 2.6.0 is evidence that budget is realistic rather than optimistic, since the gap between a Laravel major and package support is now measured in weeks, not quarters.
  • Still treat any package major-version bump as a planned migration, not a patch. Minors on 2.x have been additive.
  • Because it lives on the HTTP layer, it does not meaningfully complicate Laravel framework upgrades beyond what Blade apps already face.

Support

  • Community-supported via GitHub issues; no SLA, no vendor escalation path. Mitigation: designate an internal owner who can read the package source (it is small enough to fork in an emergency), and record the version and conventions in an ADR.
  • Expect thin public documentation relative to first-party Laravel packages; plan for internal documentation to be written, not borrowed. Release notes in this project are one-line changelog entries — they will not tell you about constraint changes, so diff composer.json yourself.

Scaling

  • Server-rendered responses scale on the same axis as the rest of Laravel — horizontal app servers, standard caching, queue-backed jobs. No new runtime tier is introduced.
  • Real-time stream broadcasting is the scaling caveat: that pushes you onto Laravel Broadcasting plus WebSocket infrastructure, which is a materially larger operational commitment than this package itself.

Failure modes

  • Stale Turbo cache serving pre-logout content to a shared browser — the highest-severity risk; requires explicit cache-control and logout handling review.
  • Frame target mismatches producing silent no-ops that unit tests miss; mitigate with a small set of feature tests asserting rendered frame IDs and stream actions.
  • Redirects issued from inside a frame causing full-page navigations or lost flash messages; mitigate with convention-level helpers and review checklists.
  • Double-submission on slow forms absent data-turbo-submits-with / disable-with patterns.
  • Asset staleness after deploys due to cached page snapshots; ensure Vite manifest/version is respected.
  • Framework-upgrade deadlock (app on a Laravel major the package does not yet support) is now a demonstrated low-probability failure mode rather than an assumed one — but it is still a failure mode if we pin hard to a single tag; keep the dependency floor/ceiling reviewed at each framework upgrade.

Ramp-up

  • Laravel developers: ~1–2 days to use the package's directives and helpers productively.
  • Full Hotwire fluency (frames, streams, morphing, Stimulus interplay): ~2–3 weeks of supervised work before independent feature delivery, longer for engineers who have only built SPA or plain-Blade apps.
  • Add a half-day onboarding doc plus one canonical example page to the repo — with a small ecosystem, that artifact will carry most of the team's learning.
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.
htinlynn/genius-helper
maco-studios/hephaestus
elmogy/larafast
xeviant/laravel-paystack
gorilladash/laravel-website-sdk
martialbe/flysystem-oss
chondal/3312client
jeroen-g/flickr
opscale-co/nova-genbi
itsjustvita/laravel-retention
tequilarapido/trackit
gregsphotography/site-builder-filament
cabaoctavio/laravel-query-log
gregsphotography/site-builder-components
io-digital/clickatell
snowsoft/laravel-admin
oxygen/auth
relicsoftware/barakah-payment-gateway
tobya/work-with-composer
equipc/laravel-email-validator