Avatar

Real-Time Forms in Laravel Livewire 3 with wire:model.live

Diving into Laravel Livewire 3 with wire:model.live. Let’s see how to build real-time forms and search boxes without overloading the server.

Rama Can

Real-Time Forms in Laravel Livewire 3 with wire:model.live

If you’ve been playing around with Laravel Livewire, you’ve probably bumped into wire:model. Well, in version 3, the Livewire team decided to shake things up a bit. Don’t worry—it’s not a bug, but actually a nice performance upgrade.

From “Too Eager” to “Chill by Default”

In Livewire v2, wire:model was live by default. That means every keystroke fired off a request to the server. Cool for instant updates, but your server could easily get hammered with too many requests.

So in v3, they made wire:model deferred by default. The client still updates in real-time, but the server only gets the update once you actually do something—like clicking a submit button.

If you miss the old “super eager” behavior, just use:

html

That .live puts it back into the Livewire v2 style.

wire:model vs wire:model.live

  • wire:model → waits for an action like submit.
  • wire:model.live → syncs instantly with every keystroke.

This is especially handy for things like search boxes, where users expect results as they type.

No Worries, Debounce Has Your Back

“But wait—doesn’t that mean my server is gonna drown in requests again?”
Nope. Livewire automatically adds a 150ms debounce. So it waits a tiny bit after the user stops typing before sending the request.

Want to tweak it? Easy:

html

And if you’re feeling fancy, there’s also .throttle:

  • .debounce → waits until the user stops typing.
  • .throttle → sends requests at intervals while the user is still typing.

In most cases, debounce is the sweet spot.

Practical Example: Post Search

Let’s say you’re building a post search feature. You don’t want to query the database just because someone typed “a”. A common pattern is to wait for at least 2 characters before running the search.

post-search.blade.php

And the component:

PostSearch.php

Because we’re using wire:model.live, the updatedQuery() method fires on every change. Without .live, it wouldn’t run until a form submission or some other manual trigger.

Bonus: Other Modifiers

Besides .live, you can also play with:

  • wire:model.blur → updates when the field loses focus.
  • wire:model.change → updates on value change (great for dropdowns).

Personally, I think this change makes Livewire a lot friendlier. In v2, it sometimes felt like your server was being pranked by a user spamming “asdfghjkl” into your input. In v3, the default is smarter, and you still have the option to go full “live” when you need it.

If you’re building search bars or any input that needs real-time syncing, wire:model.live is a must-try. 🚀

Newsletter

Join for information and practical tips delivered to your inbox 🔥

No spam, Unsubscribe anytime, We respect your privacy.

Join 8+ others

© 2025 Rama Can. All rights reserved.