Laravel 8, Jetstream and learning Laravel

UPDATE – 6/10/2020

This article was written before the Jetstream Drama over the weekend and it’s worth clarifying a few things, and saying what I’ve learned from the drama.

  1. I really hope I didn’t contribute any hate. That’s really NOT my intention. I’ve tried to say that I think Laravel and Jetstream are amazing things and Taylor has my utmost respect and thanks. My comments are meant to be entirely constructive. And I’ve presented small, concrete things that I think could improve first-time experience with Jetstream for some audiences.
  2. I come at this from the point of view of someone who’s far from a Laravel expert – I’m really still learning. But that’s part of my point: for someone in my position, Jetstream feels a bit inaccessible.
  3. Taylor Otwell (the creator of Laravel) has clarified that he made Jetstream as the kind of thing that HE would use. So in some ways, any critique of it from a less-experienced Laravel developer’s perspective (which is what this article presents) isn’t valid. Is it fair to say that it seems this is not a tool intended for beginners with the framework?
  4. However, I feel that with a few small changes and some additions to the documentation, it could be made more accessible for beginners and this would be a good thing for everyone.
  5. Yes, I should have read more of the docs before diving in. But Jetstream seems too inviting, I dived in headfirst and so got stuck. That’s a lesson for me.
  6. It’s because I think Laravel and Jetstream are awesome that I’d love them to be more accessible to more developers. Jetstream is actually a really good example of a set of components and classes at work, and it could serve as some easily explorable code demonstrating good practices. Auth scaffolding is like the “Hello world” of Laravel and I’d love for it to be as easy for the first time Laravel dev to explore as it is for the experienced one.

Laravel 8 is out today, along with the amazing new “Jetstream” authentication scaffolding that has been built.

So I’ve just worked through doing a quick install and had a poke around and it is incredible what you get out of the box now. But also, I have two issues with it. This isn’t really a rant, I do love it. Just observations and possible things that could be thought about for the future.

1. The barrier to entry is too high now

If you install Laravel + Jetstream (the Livewire version), you are now faced with this as your welcome template:

<x-app-layout>
    <x-slot name="header">
        <h2 class="font-semibold text-xl text-gray-800 leading-tight">
            Dashboard
        </h2>
    </x-slot>

    <div class="py-12">
        <div class="max-w-7xl mx-auto sm:px-6 lg:px-8">
            <div class="bg-white overflow-hidden shadow-xl sm:rounded-lg">
                <x-jet-welcome />
            </div>
        </div>
    </div>
</x-app-layout>

My first question was “How can I customise the welcome component? That <x-jet-welcome /> bit?

And so I spent half an hour tracking down the JetstreamServiceProvider.php which registers all the components using this method:

protected function registerComponent(string $component)
    {
        Blade::component('jetstream::components.'.$component, 'jet-'.$component);
    }

And what’s super-annoying about this is that:

a) Because the registerComponent() method dynamically prefixes the component name with 'jet-‘, you can’t search the code for the full component name and find where it’s registered

b) Even if you could, it wouldn’t help very much finding the component template, but it would at least leave you able to search for the component name and find something!

So anyone without a pretty good grasp of Blade components and how to dive around in the vendor directory to find stuff, is going to be a bit stuck!

Unless they notice that you can publish the components (if you know what that means), which you need to do to modify them. Sure, you can find out about publishing the components by reading the Jetstream docs. But I was keen to dive in and thought it would be easy to see how to edit what is effectively the “Hello world” page.

I feel like if I came from basic PHP, or some other eco system into Laravel now, I’d get stuck pretty quickly. There’s a LOT of implied knowledge needed to get started: Tailwind; Blade Components; Livewire/Inertia.

That barrier to entry just got a whole heap higher!

2. There’s too much out of the box

[Note: Taylor took note of people’s feedback on this and has disabled the API and profile photos by default as of version 1.3.2!]

I was on a live-streamed chat with some WordPress friends today about the benefits of looking into Laravel if you’re a WordPress developer.

And one thing I said was that so often with WordPress core and many plugins, I find myself with too much stuff and wanting to turn some of it off.

I really think that the out-of-the box Laravel Jetstream setup has too much turned on:

  • API tokens
  • Profile photos
  • 2FA
  • Account deleting

I LOVE that I could turn these on with a single-line-of-code change, but, perhaps with the exception of 2FA, should these really all be on by default? I’m really not sure they should, and my first step on many projects will be to turn some of these features off.

This is easy enough to do: the config/jetstream.php file has a features array that allows you to turn off profile pictures and the API bits:

    'features' => [
        Features::profilePhotos(),
        Features::api(),
        // Features::teams(),
    ],

But I still think they should be off by default!

In summary

As a slightly-experienced Laravel developer, this is all really exciting stuff, if a little enigmatic in places – how DOES this stuff work!?

But as someone who wants to introduce people to Laravel as a way to build cool stuff, I really feel like there are some issues here.

But who am I to say? Kudos to Taylor and the team for an awesome release.

I’m off to build something!

6 thoughts on “Laravel 8, Jetstream and learning Laravel

  1. I totally agree.
    Personally, I’m trying to change the profile page because to build an e-commerce website I need multiple addresses (billing/delivery) and I’m sucking on this. In fact I came here googling to know if using Jetsrteam with Laravel 8 is mandatory or if I can use the old authentication system 🙂
    Cheers

      1. Yes, the old system is still working. I have instralled the laravel preset for tailwind:

        composer require laravel-frontend-presets/tailwindcss –dev

        then run the command:

        php artisan ui tailwindcss –auth

        and finally

        npm install && npm run dev

        Voilà, everything is working fine.

        Cheers

  2. “And yes, if you publish the assets, which you need to do anyway to modify them, they become a but more easily available, but knowing that you need to publish assets is another thing you need to know.”
    And you don’t think this would be the perfect place to tell us how?

  3. I totally agree with you, in every aspect, at every point.
    I have been working with Laravel for the past 5 years and, until now, I was pleased with normal Blade templates. However, last years have been crazy regarding to emerging new JS frameworks (Vue, React) and the radical architecture change towards SPAs, etc. IMHO, this panorama had totally eclipsed classical Blade templates (server-side rendering). So now Laravel counterattacks with the Jetstream + Livewire/Inertia stack (very effectively, I think) to “emulate” SPAs, making APIs easier, etc.
    But the cost for the begginers is going to be too high as you state.
    I was reading your article, and that is exactly what I thought when firstly installing the new stack.
    I rapidly got stuck as I am not used to the Laravel’s “components + slots” paradigm due to I balanced to JS frameworks (like VueJS), simply to survive in the market these last years.
    Thanks for sharing this. We’re not alone haha.

Leave a Reply

Your email address will not be published. Required fields are marked *