I want to share my first experiences with Jestream and Fortify in Laravel 8. I decided to give it a shot yesterday and all I can say is that I definitely will try to avoid the new scaffolding in future projects. Maybe doing my own scaffolding when I have some time.
From my point of view auth scaffolding was one of the best features in Laravel for a long time. It gave you a perfect (minimal) starting point for your application without trying to guide you in some specific direction or taking too much work off you. You just typed `php artisan make:auth` and you were good to go. This functionality gave you some perfectly working default controllers you could utilize with whatever type of frontend stack you wanted. You could build your frontend with plain blade templates in HTML, you could utilize Livewire components, you could even adapt a SPA to the existing endpoints. There was an `Auth::routes()` in your `routes/web.php` and it was clear where those routes come from and which endpoint they were hitting. Wanted to add or alter some behavior? No problem - just go to your auth controllers and override whatever method you wanted to override.
When I used Jetstream for the first time, I decided to give Livewire a shot because I felt like this would be the least kind of "intruding" scaffolding. Turns out you can now decide between pest and cholera. Even given the fact I'm using Livewire and Tailwind on a daily base, I had huge trouble starting a blank application from scratch. The provided auth scaffolding views were **entirely** built from custom components. I needed to look up where I could edit those components and came to the conclusion that I was required to publish the Jetstream assets. My IDE greeted me with a full monitor height of uncommitted files I could now edit to match the design of the components to my regular application layout and design.
Next on I wanted to look into the new login/register/password logic and looked for the controllers. Turns out they are gone. No more controllers. All the logic for authentication which is basically just worth some hundred lines of code are completely over-abstracted and hidden in some huge pile of interfaces, contracts and closures that I were required to dissect in order to understand how it's working under the hood.
Another problem I encountered were the huge load of features that are enabled by default. Some features or functionality you can enable in the Providers, other ones just in some configuration files. Everything is splattered in some other location. Though you were done taming Jetstream - well let me sing you the song of Fortify. Took me another 10 minutes figuring out how to add a simple array of data to the register view. Turns out you need to put some override-closure-method in your FortifyProvider.
I'm neither new to Laravel nor unfamiliar with Tailwind, Livewire or the framework core itself. But in comparison to what I was used to from Laravel 7 the new scaffolding with Jetstream in Laravel 8 is a completely bloated mess. Profile photo functionality enabled by default? Really? Please remove this stuff from the framework and stuff it in some 99$ package; that's what the Laravel community is used to. Whenever there were PRs in the past that added "too much functionality" to the framework were Taylor thought not everyone would profit from it, it got declined. Now it doesn't get into my head how some simple stuff like authentication, e-mail verification and password reset functionality could get **that** bloated and I'm really not eager to see what future may bring.
42 thoughts on “Jetstream is completely bloated mess”
Everything Jetstream does is good, but I don’t need most of it in many cases. Just give me the option to only select what I want. Often, all I need is Tailwind and some Vue components.
As a long term fan of Laravel, and as much as it pains me to say but I have to agree. I had to start work on a new project and decided to give Jetstream a go. After 2 days of fiddling around I decided to scrap it all and start again, just using Fortify (which also has its problems). Extending Jetstream in its default state is extremely clunky and there are lots of things which have been added but are not customisable – 2FA is a prime example, which in theory the default implementation is fine but the second you want to change the logic behind it, good luck.
Ill be avoiding Jetstream for the time being, to me it feels unfinished and almost like it was rushed out just so that there was something available to announce at Laracon. Commands like make:auth although simpler provided far more flexibility.
I was happy with the ui scaffolding we had before, which we can still use. I get the point of Jetstream though for the most part I don’t need it
What I miss the most is how they literally handed you the whole “auth” backend stuff, from the routing to the controllers. My biggest heart pinch was that the UserController is now in vendor, and you can’t touch it. Same for the user image updating code and some other similar stuff.
I’m currently working on a project using LiveWire and JetStream, and I had to copy/paste Fortify’s routes to my own “routes” directory, because I needed to translate my routes to french, since none of my future users speak english. What appalled me the most were the comments people make on other asking for help: “Why don’t you just [do something you shouldn’t have to do]?” Well, why do I need to do it in the first place?
You should check out a package I’ve been building called [FortifyUI](https://github.com/zacksmash/fortify-ui). It essentially replaces Laravel UI, but with even less of an opinionated starting point. I mean zero. It comes with no JS or CSS frameworks. Just plain HTML and a clean slate. I’ve also made a pretty awesome preset with UIkit and a preset template for you to make your own presets.
[Fortify Preset Template](https://github.com/zacksmash/fortify-ui-preset)
Thanks for a critique that isn’t just a reaction to Tailwind and Inertia / Livewire. The front-end stuff we can debate to death. But Laravel exists to do strong middle layer logic (controllers, routing, etc) and if that stuff becomes a black box we’ll all be worse off for it in the long run. (Spoken as someone who’s loved adapting the default Auth into user invite / activation flows).
There’s some really frustrating things going on in the inertia stack too. It needs some time to mature and hopefully become less opinionated.
My conspiracy theory is that Taylor made JetStream to anger people into making their own “better” scaffolding. Truly a 5D chess strategy.
Yeah I’m not a fan of Jet Stream either. Look into implementing fortify on your own; it’s actually really easy to use and handles most the logic still
Yeah, I really don’t understand this direction from the Laravel team. Thank God for sanctum; I’ve been using it instead and entirely skirted having to learn this new and abstracted scaffolding.
Would have preferred this been a paid package.
I like everything except tailwind… I’m using jetstream with inertia and I dunno it’s pretty good but I want to use bootstrap but I’m not sure of the best way to swap tailwind with bootstrap and I think started on my new app on a unclean start because of it which doesn’t feel good
But to be clear I’m loving laravel jetstream inertia js so far…
Only thing I found annoying is that inertia link vs router links don’t let you specify the tag for the link element… Wish it was somehow an expansion of the vue router library so that we get all the features there
But I’m working around it for now anyways 🙂
I dont understand this what everyone wanted; easy, plug-able apps with no need to touch anything in the backend.
I just use auth0.
1. I think you guys are missing the point. Laravel is not catering to any specific sub-group in its community.
2. This is a package you can OPTIONALLY USE. Like does anyone genuinely read the docs? Or even know the old ui package can still be installed?
3. No one even remembers when vue was highly controversial in the original ui package.
Our company will be moving to Symfony as of 2021. We don’t like the direction that Laravel took. We have a feeling that the maintainers only think about profit.
It would be great if OP could read docs, know how to search for alternatives and wasn’t throwing with diseases to make a point.
Support the community, but he, have fun with your Twitter friends.
Come to Symfony guys. Way better direction than Laravel recently.
Keep in mind that Jetstream is a FREE package. Basically everything that was in Spark PAID except for the billing portion.
It does do things differently than the previous Laravel auth out of the box. But it also does lots of things well that would have taken at lease a couple days of development time to setup even using other packages.
I think it’s a great FREE add on to Laravel that makes the framework more valuable.
So even if you spend a day configuring it to meet your needs it’s faster than building it all from scratch.
I can feel your pain, when I first used Spark I didn’t like how it felt under the hood.
When working with Spark and with Jetstream, I find that minimizing the customization made to what they handle works better. Let Jetstream do what it does, auth and handle extended user data/business logic in your app. Instead of trying to place your business logic inside them.
Even if someone don’t want to use Tailwind or Livewire, I think you could easily just let Jetstream handle your auth interactions and build your app around it with bootstrap and your stack of choice.
Just wanted to say Laravel has been a game changer for my programming career. I discovered it in 2013 I had done a few vanilla PHP apps and was doing Rails apps at the time. So I’ve seen Laravel and it’s community mature over time. It’s such a joy to use. It’s nice to look forward to work developing with it is a true pleasure. I just finished developing an app for an NFL team using Laravel.
There have been so many times where I have to implement a new feature for a client project. And BOOM Laravel has something easy to use built in that makes it easy, or even better the community has a great package that provides the functionality.
So many great innovations and a great community have come out of Laravel. Thanks Taylor.
Another long term fan here. I’ve been out of the laravel ecosystem for a few years now for work reasons, but always follow the community as I really enjoyed it.
I might get downvoted to hell here, but as a kind of outsider it seems a bit odd how Taylor takes perfectly valid criticism like this as a personal attack. It’s a shame as with that mindset it can’t be easy for him to read this feedback. But a lot of it is given in earnest honesty, with no ill-will meant. It can sometimes feel a bit toxic.
I started a new project a while ago, and while I did like the ui and the newer settings, it truly felt way more complicated than it should, and I definitely think it should be something optional.
Scaffolding is a really complicated matter.
If I were to maintain a huge project like laravel, I’d just focus on laravel as a JSON API framework, and remove any kind of custom language components like Blade, the auth scaffoldings and the UI components (including any JS assets). Instead, I’d prefer some generic PHP helpers for things like auth.
Anyway, I guess this is already happening since anybody can use the Illuminate components directly.
Well… Thats The core of laravel: create a bunch of opinionated stuff and ship it.
I love The framework, I liked The New auth scaffolding but we can’t deny that laravel is too opinionated and will always be cause’ Taylor thinks it’s good
I’ve been a long time Laravel fan/user and also have contributed to the Framework/Laravel repos. Despite the brilliant features in Jetstream, even I feel it’s not the best as a starter package, and here’s why:
1. Jetstream offers only 2 stacks – Livewire and Inertia. Both stacks are very young and not much community support or documentation out there. In fact, the official Livewire screencasts are paid. Not saying they shouldn’t be, for sure Caleb did a lot of work but these 2 shouldn’t be the only options out there, given the lack of documentation and support!
2. I know Taylor thinks Livewire is just Blade, but lets be honest, it’s not just Blade, it’s a whole new framework (with events, hooks, actions, etc.). Debugging Livewire isn’t really as simple as a die and dump like Blade.
3. Inertia seems to have an even larger learning curve than Livewire. Now, you need to know Laravel, Inertia AND a supported JS framework (Vue/React/Svelte). Good luck with learning all that!
4. The starter package is supposed to be beginner friendly. Used to be that Bootstrap (requires no JS), React and Vue presets were supported. Now Laravel/UI is not supported any more and 2 completely new frameworks are the only ones supported. No starter package support for React/Vue/Bootstrap. Why?! Beginner friendly? I think not.
5. What’s more is the complexity of the code has increased significantly. Used to be that you have a `RegisterController`, `ConfirmPasswordController`, etc. Regardless of the UI preset you want to use, the controllers stay exactly the same. Now, there’s a completely different set of code for Livewire v/s Inertia. Why? Because both of them are a mix of backend and frontend code. Because of the decision to only provide support for these 2 frameworks, you have your backend code split up into Actions, Livewire components and Livewire/Inertia Controllers! Beginner friendly? Lol you wish!
6. Let’s take login for example. Before Laravel 8, `[email protected]` would return the login view (which exists as a stub), `[email protected]` would login and `[email protected]` would logout
7. Now in Laravel 8, the login view would first be returned by Fortify’s `[email protected]`. This returns a `LoginViewResponse` Contract which extends the `Responsable` Contract. This contract is bound in the Service Container to the `SimpleViewResponse` that is passed the `auth.login` view from the Fortify class, where the view prefix is assigned from the `JetstreamServiceProvider` and the view exists as a stub in Jetstream. Uhh okay, all that was just to return a view.
8. Honestly, I think its okay to add in additional complexity like we have above (in #6 and #7) to separate the backend auth logic (done by Fortify) and frontend view logic (by Jetstream). But, adding in complexity for Livewire and Inertia is beyond me. They have different controllers, logic in their Fortify/Jetstream actions and of course some other logic in Livewire components – so the backend is completely haywire. Used to be, you publish a stub and you have the logic in the controller or a trait pulled in the controller such as `AuthenticatesUsers` and the backend logic wouldn’t change if you change your UI preset! Easy to understand, easy to modify. Now, good luck trying to modify the built-in auth scaffolding, you’re probably better off re-writing the logic imo.
I understand that Laravel is free software. I understand that Jetstream has some awesome features – 2FA, logging out other users, teams, etc. I understand that Taylor is the heart of Laravel – he reviews every pull request, doesn’t merge unless he completely understands what’s happening and if he thinks there’s a better way, he goes ahead and re-writes the whole thing! I’ve been contributing to Laravel, and the reason Laravel is beautiful and fun to write code in (unlike other frameworks that shall go un-named), is because of Taylor!
But, I think Laravel has gained popularity because it’s very opinionated framework that’s super easy to use and very well documented. Period! I’m sure Symfony has more “adapters” and “drivers” that Laravel can ever support, but it’s damn hard to use, hard to learn and also not very well documented.
With this big change in UI scaffolding – removing support from the popular frameworks such as Bootstrap, Vue and React – and supporting much more complex and young frameworks like Livewire and Inertia, Laravel’s initial scaffolding has definitely become much more difficult to use for beginners and even for long time Laravel users. That certainly goes against Laravel’s core advantages in my opinion.
Yes, many of us can create our own scaffolding. But it takes time and effort. Also, beginners can’t simply play around with Laravel’s skeleton as easily as they could before. Food for thought!
P.S: Taylor tweeted that there was a similar controversy at the time of introducing Vue scaffolding. I disagree. Vue didn’t take away support from React or Bootstrap. It was an additional option. Also, a lot of folks are saying that there’s always the option of using Laravel/UI – well it’s not supported anymore and that’s a big thing. Also, the awesome Jetstream features aren’t available in Laravel/UI, which means they’re not supporting React/Vue/Bootstrap. That’s saying we just support these 2 frameworks now!
I haven’t used Jetstream yet, but it seems to me that Laravel is undergoing a WordPressification.
WordPress tries to ship a lot of “out of the box” functionality to make it faster to get up and running, but in reality what you get is something that’s highly opinionated and hard to really customize, so in many ways its technical debt that *slows you down*.
If indeed the very simple `php artisan make:auth` is deprecated and will be going away in the future, and we have to live with something that is more heavily abstracted and opinionated, that is a major turn in the wrong direction.
I got away from WordPress development *because* Laravel was more flexible, more straight-forward, and less opinionated.
Dont push the developers to learn new stuff pls.
I know its better to use new tech and stuff like inertia or livewire.But there may be people who dont have the time or need to learn this stuff.
It took me about 3 days to get to learn how the Jet stream is working.
It was pretty simple actually but due to its huge mess of files that are over abstracted, it took me that long.
After testing it with a simple project I decided that its not that usefull to me at all.
Then used the Fortify itself with out the extra stuff and it was the same.
I think there should be an option to use the legacy auth scaffold with or without new stuff.
I think its better to be like this :
Laravel + jetstream,
Laravel + Fortify,
Laravel + legacy auth (with the option of tailwind or bootstrap),
Laravel + Passport
I thinks its much easier and developer freindly this way.
I may want to develop a rest-api, so Ill use the last one.
I want a simple project .I can use the legacy auth
And if I want to develop an SPA that has all the extera features and I know how Vue or tailwind works, i can use jetstream.
And for the guys that are having a hard time there is a package that brings all the stuff from legacy authentication.
My god I thought this subreddit was safe from all you toxic PHP “purists”… if you don’t like it, feel free to switch frameworks or create something “better”. Complaining about an optional package as if it were punching your first born child is simply idiotic. And good job on the passive agressive:
>Please remove this stuff from the framework and stuff it in some 99$ package; that’s what the Laravel community is used to.
Please uninstall Laravel and never look back. Symfony will accept you with open arms. This thread just screams entitlement.
My co-worker now thinks his Todo app needs team support and 2FA because of Laravel 8.
Its gabbage… and even more sad to see how the community leaders keep pushing it as “the new way forward”
Wait a sec is this /r/choosingbeggars
I remember when Forge came out and I complained about how it was the wrong direction, that it should use load balancers and smaller instances instead of one server running everything etc. and in a way I was right, but equally Forge was a success because while I understood how to do all the crap on AWS, not everyone did and Taylor and co wanted something simple.
So I get why people are potentially annoyed but ultimately Jetstream and Fortify are about helping people make products quickly. If you’re skilled in making more custom code then you might better going down that route.
I personally was becoming tired of the default auth stuff cause I found I had to tweak it a lot to make it all work nicely. I usually used a tailwind present and was even building my own. I’m not quite happy to use Jetstream instead to get a good looking demo up and running in 5 minutes with features most users expect. I don’t see anything wrong with that.
My only issue with the jet stream fortify approach is the customization and extensibility I had with UI was lost
The remove the controllers from access
They tie the actions to a single model so I can’t use multiple guards
While it’s simple if you take it at face value and use it customizing this to suit your needs went from easy in UI to a nightmare by comparison on the fortify/jet stream stack
I can’t even make the setup use UUID’s and Taylor flat out commented that they don’t plan to support UUID for example. So we got some added benefits but at what cost
I really don’t understand the problem – JetStream is totally optional, so is Fortify.
JetStream/Fortify are very flexible, while they are coupled with Inertia/Livewire and Tailwind – there is nothing stopping you from extending that to use a different framework. (I have with fairly little issues)
Make:auth was a half baked bit of boilerplate, JetStream is a lot more complex but that’s needed to make it possible to extend/customise it while retaining the package nature of it (ie a hot fix/security fix/enhancement can be applied with a composer update).
By moving JetStream away from the core, it leaves the core to do its job and overall be less opinionated – coupling the UI with the core was a bad design choice initially that has been removed to stay less opinionated on implementation and Jetstream is a shortcut for boilerplate – but only if you want to use it.
I sit firmly in the; Tailwind/Inertia/Livewire are not for me camp – yet I’ve still found benefit with Jetstream. And in addition – there is literally nothing stopping you scaffolding the auth yourself, it’s a few hours work…
Imagine you got this “99$ package” for free. It’s about jetsteam.
The bad thing is that they **deprecated** \`[**laravel/ui**](https://github.com/laravel/ui)\` package, Idk why. It allowed doing many frontend scaffolding. It was useful.
About old **Auth** functionality, now it’s here:
My general impression of Laravel these days is that the key players in the framework ecosystem attempt to do way too much handholding.
There’s a package or a scaffold or a boilerplate for just about every little thing, and while I do agree that progressing the framework and innovation is key, the influence that some of the high profile ecosystem devs have on the general direction of the framework and integrating their own tools into the landscape of the framework just sucks for me.
It almost seems like half the development efforts are for a shiny new tool to sell Laracon tickets to pay the high profile speakers developing these tools. Many are useful but I feel like half my work on a new Laravel project these days is stripping out stuff I don’t want, need, or could have installed/built in myself.
Still definitely the best web framework in the game by a long chalk but not in love with the way the ecosystem is set up.
yeah next time I get something for free but not exactly how I want it, I will definitely create a post to bitch about it, even though viable alternatives still exist.
There’s a lot of really great points here about some of the issues or concerns that people have. The core concern I have is with Taylor him self. What he has built, laravel, and his choice to then share it with the world and make development easier on all fronts is amazing. But the way he handles criticism and his fan boys on Twitter, yes they are all men. I rarely see women in his tweet responses. So when I say boys, I am not being sexist.
These people are toxic, they obsess over his presence like he is literally the second coming. And maybe for php he is. I mean my development time is spead up by the framework. But the way he interacts with the community and then plays victim on Twitter and throws hissy fits over what I can only say, from what I have seen, is **valid criticism** – is kinda toxic.
He’s followers then accuse **us** of being toxic. I’m sorry, we do a pretty good job of policing our selves, look at the posts with the most votes, that means the community largely agrees with that person as opposed to the person who has -10 for a vote on their post. He then bitches and complains and deletes his Reddit and threatens to make shit closed source. He needs to grow up. I’m sorry but this is not acting professional, this is acting like a child.
I’m sorry but you made this framework open source, you chose and still choose to build your business around it and you choose to create the community you have around the framework you released. What, you don’t like the fact that some one disagrees with you? So you act like a child? I’m sorry that’s not how adulting works. I would hate to be your employee and have criticism or feed back for you if this is how you act when the community has criticism and feedback.
Taylor wants actionable feedback and criticism, he said so on Twitter and YouTube. From what I have seen, yes jetstream is a mess of complexity that is not needed, you abstracted away from the abstraction you were going for and even then that’s over abstracted. People have basically said that or some variation in this thread and then you decide, *well fuck them im going to delete my account and throw a fit because I can’t handle the truth that something might be wrong here….or not clear enough*
**No one hates jetstream**. From what I have seen every one loves it. I will stick with laravel ui, but that doesn’t mean it’s bad. Live wire is way too young. I posted [about it here](https://www.reddit.com/r/laravel/comments/iwl2g1/so_whats_the_story_with_livewire_any_one_using/).
The way this has been handled by Taylor and his “possy” on Twitter is telling of a toxicity that could grow starting with him. There’s been instances in the past where he throws a hissy fit over something, be it facades, eloquent, what ever. If he continues this trend then he could destroy the community he has worked so hard to build. Already it’s becoming divided by his “true believers” on Twitter and Reddit “the chess pool”. Before it was fractured and to some degree still is, between him and the php community. While I think the majority of people have come around, I think it’s safe to say if this continues it’s gonna be a fragmented mess of many sub communities.
These are just my thoughts. I’d love to hear yours. Maybe I am completely wrong, and that’s ok. But over the last 48 hours it’s been like watching a scandal in the beauty community, and that’s not cool. We’re grownups. We got jobs to do and we want the best tools for the job, we have that. We just want our voices to be heard.
I just created a new Laravel 8 project and went for the simplest authentication option available: it added 160MB to the project folder on top of Laravel’s core of 39MB. Seriously? 200MB for a glorified login system? Sometimes I just want to play around with some idea, that’s 1GB of space every 5 ideas…
I closed my laptop and have been wondering if it was just me or Laravel is navigating away from what it made it attractive to me… Run a few commands and start coding an MVP in a few hours.
Glad I’m not alone. I’m now wondering if I can go Laravel ~~Passport~~ Sanctum + Svelte and using the API for authentication, or something as light as possible. I’m already exhausted from upgrading old Laravel 5/6/7 projects to 8, can’t imagine updating 8 to the next “revolutionary” idea.
Edit: Laravel Sanctum (API token) since it’s simpler than Passport (OAuth2)
I thought I was crazy for wanting some clean, basic auth scaffolding that didnt force you to use the FRONTEND frameworks of THEIR liking.
nuff said. I’m done with Laravel. Thought I was the only one going out of my mind with all the scattered bloat.
It’s funny I came across this article looking how to add routes / views / menus and other logic besides what comes with Jetstream into my project.
The Laravel ecosystem is a big cherry-pick. My biggest fear is long term support. It’s like if an OS came out that everyone go on board with and then it became closed-source or highly dependent on another closed-source.
You just have to measure the danger in adopting one of the Laravel ecosystems based on: sure this will save me 20 hours of work now, but in 3 years how many hours will it add – and at what point will the contributors stop supporting it to switch to something they think is better.
A good example of LTS danger is how cashier went from Braintree -> Stripe -> Paddle and eventually you have some large companies with thousands of subscriptions on an outdated platform they have to migrate to an entire new merchant.
If you want to be safe and keep LTS danger out, stick to vanilla Laravel. That’s the best advice anyone can give.
Cannot agree more. And why confuse functionality and style? At the very least, sure have Breeze with BS or Tailwind … or nothing. By all means, introduce new tech and complexity, but don’t expect a positive response from a professional community with heavy investment in skills and apps being told that much of their work is now deprecated and new skills need to be acquired. Nope, will not be using Livewire or Inertia or Tailwind. In building business apps, interface tech is the least of your worries … unless you have to keep acquiring new interface tech. We’ll be moving on because here is the signal that Laravel two versions from now will have deprecated today’s approach and moved to Majimboz, Gravitonix and Flavolacss. Mind you, good move to help teachers, tutorials, SO and Laravel fans. Appreciate the Laravel project, but allowing for long-established stacks and lightweight entry points seems to be disappearing.