WEBVTT

00:00:00.000 --> 00:00:03.700
Hey everyone, this is Taylor Otwell back with another Laravel snippet.

00:00:03.700 --> 00:00:06.500
It is January 8th here in the office.

00:00:06.500 --> 00:00:09.300
I'm wrapping up another week of working on Laravel.

00:00:09.300 --> 00:00:12.800
And this week I'd like to just kind of review what we've been doing this week

00:00:12.800 --> 00:00:15.300
and give you an update on some projects.

00:00:16.000 --> 00:00:20.000
So one thing we launched this week was Jetstream 2.0.

00:00:20.500 --> 00:00:23.800
This brings several improvements to Jetstream.

00:00:24.200 --> 00:00:27.500
It brings some improvements to the inertia side of the stack.

00:00:27.500 --> 00:00:30.700
So all of the authentication views like the login view,

00:00:30.700 --> 00:00:33.200
the registration view, the password reset view.

00:00:33.700 --> 00:00:37.000
In the first Jetstream release, those were all written in blade

00:00:37.000 --> 00:00:41.300
because it wasn't super necessary for them to be written in inertia

00:00:41.300 --> 00:00:44.300
and it just saves having to duplicate those views

00:00:44.300 --> 00:00:46.700
if I just wrote them in blade for both stacks.

00:00:47.100 --> 00:00:49.900
But some people really wanted those to be written in view

00:00:49.900 --> 00:00:53.100
and so in Jetstream 2.0 those are all view pages.

00:00:53.100 --> 00:00:57.500
And in the live wire stack, of course, they're still just normal blade pages.

00:00:58.300 --> 00:01:02.300
We also made an improvement to the team situation in Jetstream.

00:01:02.300 --> 00:01:05.500
You can now, when you invite someone to your team,

00:01:05.500 --> 00:01:09.900
you can enable an invitations feature so that even if they don't have an account,

00:01:09.900 --> 00:01:13.900
they will get an email inviting them to join your team.

00:01:14.300 --> 00:01:17.800
Previously you had to invite someone that already had an account

00:01:17.800 --> 00:01:21.300
within the application, so that was a little annoying.

00:01:21.300 --> 00:01:24.700
And I think this would be a really well-received improvement.

00:01:25.500 --> 00:01:27.500
I also went through the Jetstream documentation

00:01:27.500 --> 00:01:31.300
and just read through the entire documentation, improved things,

00:01:31.300 --> 00:01:33.600
sort of refined things, added a few new pages

00:01:33.600 --> 00:01:36.700
to explain how to use the starter kit and so on.

00:01:37.500 --> 00:01:39.800
And of course, if Jetstream isn't your cup of tea,

00:01:39.800 --> 00:01:44.500
you could always use a more simpler starter kit, Laravel Breeze,

00:01:44.500 --> 00:01:48.900
which is kind of just basic blade authentication views

00:01:48.900 --> 00:01:52.600
and no other extra features like teams or two-factor authentication

00:01:52.600 --> 00:01:54.600
or API support or anything like that.

00:01:55.400 --> 00:01:56.600
So check that out.

00:01:56.600 --> 00:01:59.200
And of course, you can always not install any starter kit at all

00:01:59.200 --> 00:02:01.800
and just use vanilla Laravel 8.

00:02:03.100 --> 00:02:06.000
So that's the update on Jetstream.

00:02:06.500 --> 00:02:09.800
We also launched a really cool Forge feature,

00:02:09.800 --> 00:02:13.700
which is allowing Forge Circle members to create servers.

00:02:14.100 --> 00:02:17.400
So really, this has been requested for years, a couple of years,

00:02:17.400 --> 00:02:20.100
where if you had a circle on Laravel Forge,

00:02:20.100 --> 00:02:24.400
and a circle is a place where you can share servers with your team members,

00:02:24.400 --> 00:02:27.900
those team members couldn't create servers within the circle,

00:02:27.900 --> 00:02:28.900
but now they can.

00:02:29.500 --> 00:02:31.600
Mohammed shipped this feature this morning.

00:02:31.900 --> 00:02:34.900
This allows you to share a credential with the circle

00:02:34.900 --> 00:02:39.000
so that other circle members can create servers within that credential.

00:02:39.000 --> 00:02:41.200
That credential might be a DigitalOcean credential

00:02:41.200 --> 00:02:43.000
or an AWS credential and so on.

00:02:44.800 --> 00:02:46.800
And then kind of related to Jetstream,

00:02:46.800 --> 00:02:48.700
I wanted to give you an update on Spark.

00:02:48.700 --> 00:02:50.500
I've gotten quite a few questions on Spark

00:02:50.500 --> 00:02:52.800
and some people are a little confused

00:02:52.800 --> 00:02:55.800
as to what the next release of Spark will look like.

00:02:56.800 --> 00:02:59.700
I think part of this is because many of Spark's features

00:02:59.700 --> 00:03:01.200
have been moved to Jetstream.

00:03:01.700 --> 00:03:05.200
I talked about this on my Laracon talk earlier this year.

00:03:05.200 --> 00:03:06.800
However, not everyone saw this.

00:03:07.700 --> 00:03:09.300
What we decided to do with Spark

00:03:09.300 --> 00:03:12.300
is move all of the non-billing related features of Spark

00:03:12.300 --> 00:03:14.900
into Jetstream and just give them away for free.

00:03:14.900 --> 00:03:17.900
So that's why Jetstream has an optional Teams feature.

00:03:17.900 --> 00:03:20.200
That's why it has an optional API feature.

00:03:20.500 --> 00:03:23.400
It's because those were features of Laravel Spark

00:03:23.400 --> 00:03:25.300
and they've now been moved into Jetstream,

00:03:25.300 --> 00:03:27.400
open sourced, and given away for free,

00:03:29.200 --> 00:03:31.500
as well as the two-factor authentication feature.

00:03:32.300 --> 00:03:36.200
Now, that leaves Spark to only handle the billing side

00:03:36.200 --> 00:03:38.300
of its previous feature set.

00:03:38.300 --> 00:03:41.800
So that's really what we were aiming for.

00:03:41.800 --> 00:03:42.300
That's good.

00:03:42.300 --> 00:03:45.100
We wanted Spark to just be focused on managing

00:03:45.100 --> 00:03:46.800
the subscription billing portion

00:03:46.800 --> 00:03:49.600
of building a software-as-a-service application

00:03:49.600 --> 00:03:51.800
or launching kind of your own startup.

00:03:52.600 --> 00:03:55.100
Now, one change we decided to make with Spark

00:03:55.100 --> 00:03:56.300
in the upcoming release,

00:03:57.000 --> 00:04:00.000
and it's a response to problems we had

00:04:00.000 --> 00:04:01.200
with the first Spark release,

00:04:01.200 --> 00:04:03.000
where with the first Spark release,

00:04:03.000 --> 00:04:05.600
you were really tied in to whatever front-end technology

00:04:05.600 --> 00:04:06.700
that Spark was using.

00:04:07.100 --> 00:04:09.300
And in that case, it was Vue and Bootstrap.

00:04:09.500 --> 00:04:11.200
However, if you didn't want to use Bootstrap

00:04:11.200 --> 00:04:12.500
or you didn't want to use Vue,

00:04:12.500 --> 00:04:14.800
you had a really rough time using Spark.

00:04:15.600 --> 00:04:18.100
So what we decided to do in the upcoming release of Spark

00:04:18.600 --> 00:04:21.000
is Spark's billing kind of settings page

00:04:21.000 --> 00:04:23.200
is its own isolated page.

00:04:23.700 --> 00:04:26.000
Of course, you can customize the look and feel of that page

00:04:26.000 --> 00:04:27.600
by editing CSS or whatever,

00:04:27.600 --> 00:04:30.300
but it's really like its own panel.

00:04:30.300 --> 00:04:32.900
And you can think of like the Stripe customer billing portal

00:04:32.900 --> 00:04:35.400
where users can update their credit card,

00:04:35.400 --> 00:04:38.400
change their plans, cancel their plans,

00:04:38.400 --> 00:04:41.200
but it's sort of like its own dashboard,

00:04:41.200 --> 00:04:44.000
if that makes sense, separate from your application.

00:04:44.600 --> 00:04:45.900
Although it's still a package,

00:04:45.900 --> 00:04:47.300
like hosted within your application,

00:04:47.300 --> 00:04:50.600
but I mean, it's not, it's hard to explain,

00:04:50.600 --> 00:04:52.700
but I mean, think about it a little bit like Nova

00:04:52.700 --> 00:04:55.500
in the sense that Nova has its own front-end assets.

00:04:55.700 --> 00:04:58.200
Nova doesn't care what front-end technology

00:04:58.200 --> 00:04:59.500
your application is using.

00:04:59.500 --> 00:05:02.200
It ships its own CSS and JS files.

00:05:02.500 --> 00:05:04.800
And the next release of Spark is very much like that.

00:05:04.800 --> 00:05:06.700
It has its own CSS files,

00:05:06.700 --> 00:05:08.400
its own JavaScript files.

00:05:08.700 --> 00:05:11.900
The next version of Spark uses view and inertia

00:05:11.900 --> 00:05:14.200
and tailwind on its own screen,

00:05:14.200 --> 00:05:16.800
but that doesn't mean that any other part of your application

00:05:16.800 --> 00:05:18.600
needs to use those technologies.

00:05:19.300 --> 00:05:22.200
Spark ships its own CSS and JS files

00:05:22.200 --> 00:05:23.800
that are included on that page.

00:05:24.500 --> 00:05:26.600
It doesn't use your application layout

00:05:26.600 --> 00:05:30.200
or your applications, JS or CSS files.

00:05:31.400 --> 00:05:32.600
I hope that makes sense.

00:05:33.500 --> 00:05:36.300
It's kind of modeled after that Stripe customer billing portal,

00:05:36.300 --> 00:05:38.100
and of course for the next release of Spark,

00:05:38.100 --> 00:05:40.500
we are trying to support two payment providers,

00:05:40.500 --> 00:05:42.100
the first one being Paddle,

00:05:42.100 --> 00:05:47.000
which provides, you know, some benefits over Stripe

00:05:47.000 --> 00:05:48.800
and some drawbacks from Stripe.

00:05:48.800 --> 00:05:52.800
The benefits are it serves as kind of a merchant of record,

00:05:52.800 --> 00:05:56.500
which means that from your perspective,

00:05:56.500 --> 00:05:58.500
the only person paying you is Paddle.

00:05:58.500 --> 00:06:00.500
It makes your taxes quite a bit simpler,

00:06:00.500 --> 00:06:01.900
and if you're in the EU,

00:06:01.900 --> 00:06:05.700
they handle all of the VAT tax-related complexity for you.

00:06:05.700 --> 00:06:07.900
So that you don't have to worry about that.

00:06:09.800 --> 00:06:13.600
They also support things like PayPal and Apple Pay.

00:06:13.600 --> 00:06:17.400
Of course, Stripe also supports Apple Pay, but not PayPal.

00:06:17.400 --> 00:06:20.500
And then, of course, we want to continue to support Stripe.

00:06:20.500 --> 00:06:23.300
I think that will probably be the second version of Spark we release.

00:06:23.300 --> 00:06:25.500
I'm hoping they release, you know, close together.

00:06:25.500 --> 00:06:27.200
I don't think they'll release on the same day,

00:06:27.200 --> 00:06:29.300
but I hope they can release, you know,

00:06:29.300 --> 00:06:30.900
within a month or two of each other.

00:06:32.200 --> 00:06:34.400
All right, so now that we've got Jetstream 2 out,

00:06:34.400 --> 00:06:37.400
I really wanted to get Jetstream 2 out

00:06:37.400 --> 00:06:40.100
before I really buckled down and finished out Spark.

00:06:40.100 --> 00:06:42.500
The Paddle version of Spark is,

00:06:42.500 --> 00:06:44.800
I guess you could say, essentially done.

00:06:44.800 --> 00:06:47.000
We're cleaning it up, we're writing tests for it,

00:06:47.000 --> 00:06:48.700
we're writing documentation for it.

00:06:48.700 --> 00:06:50.500
And once that is shipped,

00:06:50.500 --> 00:06:53.200
we will focus in on porting it to the Stripe side.

00:06:53.200 --> 00:06:57.000
Which I don't expect to be too much work,

00:06:57.000 --> 00:06:58.500
since we already have, of course,

00:06:58.500 --> 00:07:01.700
a really robust Stripe version of Cashier,

00:07:01.700 --> 00:07:03.800
and we have a lot of experience with Stripe,

00:07:03.800 --> 00:07:06.500
so that really shouldn't be any big surprise

00:07:06.500 --> 00:07:09.500
or complex for us.

00:07:11.700 --> 00:07:15.100
So yeah, that's kind of what we've been working on this week.

00:07:15.100 --> 00:07:17.000
I mentioned on Twitter that,

00:07:17.000 --> 00:07:19.600
in addition to the Jetstream and Breeze starter kits,

00:07:19.600 --> 00:07:24.700
I also have a Next.js React SPA starter kit

00:07:24.700 --> 00:07:28.000
that uses a Laravel Sanctum-authenticated backend.

00:07:28.000 --> 00:07:32.500
I'm not sure if I will be releasing this.

00:07:34.500 --> 00:07:36.800
There was just so much confusion

00:07:36.800 --> 00:07:39.500
around releasing two starter kits to begin with,

00:07:39.500 --> 00:07:42.800
and I really did not anticipate the amount of confusion

00:07:42.800 --> 00:07:45.700
that would surround those projects,

00:07:45.700 --> 00:07:47.500
being Breeze and Jetstream,

00:07:47.500 --> 00:07:50.000
and the amount of confusion regarding

00:07:50.000 --> 00:07:53.600
whether Laravel forces you to use these starter kits,

00:07:53.600 --> 00:07:54.600
which it doesn't.

00:07:54.600 --> 00:07:58.000
Laravel 8 doesn't come with any front-end opinions at all

00:07:58.000 --> 00:08:01.200
when you do Laravel new project or whatever.

00:08:01.200 --> 00:08:04.500
So I'm hesitant to add a third starter kit into the mix,

00:08:04.500 --> 00:08:06.400
although a lot of people have asked,

00:08:06.400 --> 00:08:09.700
how do I build an SPA that authenticates with Laravel?

00:08:09.700 --> 00:08:11.300
How do I set that up?

00:08:11.300 --> 00:08:14.300
And having sort of a canonical example of how to do that

00:08:14.300 --> 00:08:16.500
would be feels really valuable,

00:08:16.500 --> 00:08:17.500
but at the same time,

00:08:17.500 --> 00:08:21.100
I need to decide if I have the energy to actually

00:08:21.100 --> 00:08:23.600
deal with the inevitable confusion

00:08:23.600 --> 00:08:25.800
that results from releasing yet another

00:08:25.800 --> 00:08:28.000
sort of application starter kit for Laravel.

00:08:28.000 --> 00:08:29.900
So we'll see how that pans out.

00:08:29.900 --> 00:08:32.700
I'm going to think about that over the next week or two.

00:08:32.700 --> 00:08:35.700
If you have any feedback on that, let me know.

00:08:35.700 --> 00:08:38.300
I'd be glad to hear what you think of that,

00:08:38.300 --> 00:08:41.200
and maybe it will help me decide what to do.

00:08:41.200 --> 00:08:43.300
All right, so that's what we've been working on this week.

00:08:43.300 --> 00:08:45.000
I hope you had a good week,

00:08:45.000 --> 00:08:48.200
and I'll be back next week to give you more updates.

00:08:48.200 --> 00:08:54.200
Thanks.

