1
00:00:03,920 --> 00:00:08,800
This is the Laravel News Podcast, your
one-stop podcast to find out about

2
00:00:08,800 --> 00:00:14,180
Laravel-related news, tutorials, packages,
and more. Here are your hosts, Jake

3
00:00:14,180 --> 00:00:17,340
Bennett and Michael Derenda.

4
00:00:30,600 --> 00:00:34,780
Hello, folks. Welcome to the Laravel News
Podcast. My name is Jake Bennett. With me,

5
00:00:34,780 --> 00:00:40,160
as always, is my wonderful cohost, Mr.
Michael Derenda. We are on episode 246. It

6
00:00:40,160 --> 00:00:47,160
is September 30th, 2025. No pre-show.
Folks, if you want pre-show, you have

7
00:00:47,160 --> 00:00:52,320
to talk to us. Say something on X or on
BlueSky. Just say anything-

8
00:00:52,320 --> 00:00:54,300
-Mm
-... and we'll bring it back. And if you

9
00:00:54,300 --> 00:00:54,850
-say nothing-
-Bring it back

10
00:00:54,850 --> 00:00:56,180
... then we're just gonna keep it like
this.

11
00:00:56,860 --> 00:00:57,720
-We're never gonna do-
-Is that not fair, Michael?

12
00:00:57,720 --> 00:00:59,300
-... a pre-show again. Yeah.
-No pre-show.

13
00:00:59,300 --> 00:01:02,900
-Find another podcast.
-That's right. No, don't. Just stay here.

14
00:01:02,900 --> 00:01:05,140
No, no. Stay here, stay here, but we'll go
straight into it.

15
00:01:05,140 --> 00:01:07,820
-Stay here.
-Ready? There is a new, there is a new-

16
00:01:07,820 --> 00:01:12,660
-Go ahead
-... local error page in Laravel 12.29.

17
00:01:12,660 --> 00:01:18,500
Ryuta Hamasaki and Jeremy Butler created a
brand-new local exception page for

18
00:01:18,500 --> 00:01:23,260
Laravel applications. The new exception
page retains the Copy as Markdown button

19
00:01:23,260 --> 00:01:28,980
that was released in 12.25 and removes
manual dark-light toggles in favor of

20
00:01:28,980 --> 00:01:34,140
automatically detecting light and dark
mode. Uh, you can see pull request

21
00:01:34,140 --> 00:01:41,020
57,036 for details. Uh, this is very nice.
It leans, I think, very much into the,

22
00:01:41,020 --> 00:01:44,260
the kind of design language that they've
got inside of Nightwatch. So there's some

23
00:01:44,260 --> 00:01:47,680
consistency there between what you see
locally and what you will see

24
00:01:48,320 --> 00:01:52,260
in Nightwatch if you are using that for
your error monitoring on your Laravel

25
00:01:52,260 --> 00:01:58,560
applications. Uh, Joel Pedro Lopes, along
with various community developers and core

26
00:01:58,560 --> 00:02:03,620
Laravel team members, contributed a
cache-session driver. It is best to read

27
00:02:03,620 --> 00:02:07,620
through the discussion and code in pull
request 56887,

28
00:02:08,240 --> 00:02:12,519
but an example from that is talking about
sticky database connections across

29
00:02:12,520 --> 00:02:18,660
requests. Now, I saw some discussion about
this. Why would you use, um, session for

30
00:02:18,660 --> 00:02:23,080
cache, and things like that? The benefit
of using the session driver for your cache

31
00:02:23,080 --> 00:02:28,079
is that it is tied to your user's
authentication session. So you don't have

32
00:02:28,080 --> 00:02:31,720
to worry about cleanup and things like
that. As soon as they log out, then

33
00:02:31,720 --> 00:02:37,960
obviously that cache is, uh, expired. So
this is very useful if you need to for a,

34
00:02:37,960 --> 00:02:42,640
for example, a multi-tenant context, you
wanna switch the database connection and

35
00:02:42,640 --> 00:02:47,040
have a, a c- persistent connection, for
example. The, the example in the pull

36
00:02:47,040 --> 00:02:51,920
request goes more specifically into a
sticky database connection. So, if you've

37
00:02:51,920 --> 00:02:57,730
got reads and writes split, it will, um,
set all of your writes and reads to share

38
00:02:57,730 --> 00:03:02,400
the connection, just to make sure that you
don't have any latency between, um, reads

39
00:03:02,400 --> 00:03:06,520
and writes there. So definitely look into
the pull request for more detail.

40
00:03:06,520 --> 00:03:08,930
Can I interrupt, two seconds? So we
actually-

41
00:03:08,930 --> 00:03:12,960
-You may
-... have this exact problem on our, um...

42
00:03:12,960 --> 00:03:15,960
I'm salary, so it doesn't matter as much,
but for the people who have to clock in

43
00:03:15,960 --> 00:03:19,740
and out, first people... Like people who
are just getting started at our company,

44
00:03:19,740 --> 00:03:22,700
when they go to clock in, and they're
like, "It didn't happen." Like, "I c- I

45
00:03:22,700 --> 00:03:25,840
pressed clock in, and then it doesn't show
as a clock in." Like, and then it's

46
00:03:25,840 --> 00:03:30,300
eventually consistent, but the problem is
that it's using a separate database. It

47
00:03:30,300 --> 00:03:33,720
goes and hits one of the databases, and
then eventually it gets around to syncing

48
00:03:33,720 --> 00:03:37,269
the back, with the database that they're
actually viewing. And so it's-

49
00:03:37,269 --> 00:03:38,609
-Yeah
-... very annoying. You have to explain to

50
00:03:38,609 --> 00:03:41,359
them, "No, no, no. You click it once.
Don't click it three times until you see

51
00:03:41,360 --> 00:03:41,500
-it."
-Yeah.

52
00:03:41,500 --> 00:03:42,580
-Like, just click it one time.
-Yeah.

53
00:03:42,580 --> 00:03:43,660
-It recorded.
-Yeah.

54
00:03:43,660 --> 00:03:46,500
It's just not gonna show up immediately
because it doesn't use this, right? It

55
00:03:46,500 --> 00:03:49,860
doesn't use sticky sessions. It doesn't,
you know, pin you to a database. It

56
00:03:49,860 --> 00:03:52,700
basically just says, "Just write to
whatever one and read from whatever one,"

57
00:03:52,700 --> 00:03:54,400
-and it's super annoying. So, anyway-
-Yeah

58
00:03:54,400 --> 00:03:56,760
... this is a really cool contribution.
Love this.

59
00:03:56,760 --> 00:04:02,140
Well, sure. Next up, Luca Patera
contributed the ability to define custom

60
00:04:02,140 --> 00:04:06,060
resource classes directly on a model using
PHP attributes. And using these

61
00:04:06,060 --> 00:04:09,860
attributes, you can avoid boilerplate when
converting a model to the intended

62
00:04:09,860 --> 00:04:10,390
resource.

63
00:04:11,020 --> 00:04:15,040
So previously, you had to say, uh, you
know, Model.toResource and then pass it

64
00:04:15,040 --> 00:04:18,300
the class string that represents that, or
to a resource collection and the class

65
00:04:18,300 --> 00:04:23,600
string of that. Now you can just call
toResource or toResourceCollection on the

66
00:04:23,600 --> 00:04:28,340
model or the collection itself, and then
you can use useResource or

67
00:04:28,340 --> 00:04:33,880
useResourceCollectionAttributes on the
model itself to define the class string

68
00:04:33,880 --> 00:04:35,420
-for what those are.
-Very nice.

69
00:04:35,420 --> 00:04:36,370
-So thanks-
-Love that

70
00:04:36,370 --> 00:04:41,260
... to Luca for that one. And lastly, in
this release, Danny Foster contributed a

71
00:04:41,260 --> 00:04:45,820
JSON flag to the scheduleListArtisan
command, which will return the data as a

72
00:04:45,820 --> 00:04:50,860
JSON, uh, object, which is useful for
monitoring deployments and integrations.

73
00:04:50,860 --> 00:04:55,760
So this is fantastic if you will, you
know, need to send that data somewhere, if

74
00:04:55,760 --> 00:04:59,480
you're monitoring that things have been
run or when they should run and things

75
00:04:59,480 --> 00:05:03,820
like that, which enables neat commands
that are piped to things like jq for

76
00:05:03,820 --> 00:05:08,700
monitoring to ensure scheduled tasks exist
during a deployment. So we'll leave that

77
00:05:08,700 --> 00:05:15,500
up to you, dear listener, to delve into
further, but that is all for 12.29.

78
00:05:15,500 --> 00:05:19,120
Very cool. Hey, for those of you who
happen to be using Inertia, Infinite

79
00:05:19,120 --> 00:05:23,880
Scroll is now available in Inertia version
2.2. This was released with this new

80
00:05:23,880 --> 00:05:28,820
Infinite Scroll component, and this will
likely be a huge time-saver if you, dear

81
00:05:28,820 --> 00:05:33,760
listener, have ever had to build an
Infinite Scroll feature by hand. Uh, this

82
00:05:33,760 --> 00:05:39,880
update introduces this new Inertia scroll
method. And good news, it works seamlessly

83
00:05:39,880 --> 00:05:45,740
with Laravel's existing full, simple, or
cursor pagination. So it's not anything

84
00:05:45,740 --> 00:05:48,540
brand new you have to do in Laravel. It
works the exact same as the rest of it

85
00:05:48,540 --> 00:05:52,980
does. You now just wrap it in that Inertia
scroll on the server side. On the client

86
00:05:52,980 --> 00:05:58,719
side, you wrap your content in this new
Infinite Scroll component. So, the really

87
00:05:58,720 --> 00:06:02,940
cool things that this offers you, um, is
that it works, number one, with Vue.

88
00:06:03,056 --> 00:06:04,676
-...
-... you know, React, Svelte, it's got a

89
00:06:04,676 --> 00:06:09,836
component for each of 'em. Uh, it will
also update the URL as you scroll down the

90
00:06:09,836 --> 00:06:13,636
page. So if you're halfway down the page
and you want to share that link with a

91
00:06:13,636 --> 00:06:17,256
friend, you copy the URL, paste it to
them, and it'll land them in the same

92
00:06:17,256 --> 00:06:20,056
place on the page that you were at when
you copied the link.

93
00:06:20,056 --> 00:06:22,486
-That's cool.
-Scrolling back up the page also updates

94
00:06:22,486 --> 00:06:26,576
that URL. So it's not just as you progress
down through, it'll also, as you progress

95
00:06:26,576 --> 00:06:30,956
back up through it, it will, it will
update the URL as well. Um, if you happen

96
00:06:30,956 --> 00:06:35,695
to jump to a particular location, paste
that URL, it will backfill those pages on

97
00:06:35,696 --> 00:06:40,696
a, um, oh, sorry, those earlier pages on
the page refresh. And then it also has

98
00:06:40,696 --> 00:06:44,096
bidirectional scrolling outta the box,
including reverse mode. So you can say,

99
00:06:44,096 --> 00:06:48,276
"Scroll up to load the next page or scroll
down to load the previous pages." I'm not

100
00:06:48,276 --> 00:06:51,696
sure why you would do that, other than
sort of Apple has that, like, natural

101
00:06:51,696 --> 00:06:52,336
gesture-

102
00:06:53,236 --> 00:06:55,596
-Mm-hmm
-... um, sort of thing. I- I'm not sure.

103
00:06:55,596 --> 00:07:00,216
Maybe that's why. I- I don't know exactly.
But in any case, it's possible.

104
00:07:00,216 --> 00:07:03,696
Configurable flexible options as you would
assume. There's also manual mode for

105
00:07:03,696 --> 00:07:08,116
complete control of the load- loading so
that you can, um, really dig in and

106
00:07:08,116 --> 00:07:12,706
configure that exactly as you'd like to.
Uh, there is infinite scroll documentation

107
00:07:12,706 --> 00:07:17,716
in the Inertia docs as well, so you can
check that out. Really cool addition. I

108
00:07:17,716 --> 00:07:21,416
know I've seen a lot of people talking
about this on Twitter, Taylor included,

109
00:07:21,416 --> 00:07:24,976
and so this is a really, really nice one
if you've had to do this by hand before,

110
00:07:24,976 --> 00:07:26,606
-no longer. Now you can use this-
-Mm-hmm

111
00:07:26,606 --> 00:07:30,116
... infinite scroll straight in Inertia.
Love it. Really cool.

112
00:07:30,116 --> 00:07:33,276
Yeah. Shout-out to Pascal and the team
that- that have been working on this. It's

113
00:07:33,276 --> 00:07:36,256
very cool that, you know, a- as Laravel
has taken on

114
00:07:37,116 --> 00:07:41,316
ownership of Inertia, the project, and
they can dedicate time and resources to

115
00:07:41,316 --> 00:07:44,836
it, it's really cool to see the
progression. You know, it was always

116
00:07:44,836 --> 00:07:48,276
considered, like, a feature-complete thing
from Jonathan's perspective, I think,

117
00:07:48,276 --> 00:07:51,756
because, you know, he- he didn't really
have time to- to work on it. So the fact

118
00:07:51,756 --> 00:07:52,056
that

119
00:07:52,756 --> 00:07:56,116
Taylor and Laravel saw that there was more
to be done and that they had the

120
00:07:56,116 --> 00:08:00,856
resources to g- dedicate to it, now we're
seeing the- the fruits of that labor. So

121
00:08:00,856 --> 00:08:05,416
shout-out to everyone involved in keeping
Inertia, uh, performant and- and

122
00:08:05,416 --> 00:08:07,776
functional and- and living and breathing,
so

123
00:08:08,656 --> 00:08:15,656
very cool. The Laravel team launched a
public beta of the Laravel

124
00:08:15,656 --> 00:08:20,316
MCP package, which is a package to
rapidly build model context protocol

125
00:08:20,316 --> 00:08:25,436
servers for your Laravel applications.
Laravel MCP joins Laravel Boost as a

126
00:08:25,436 --> 00:08:30,236
first-party tool that makes working with
AI in Laravel a joy to build. So the MCP

127
00:08:30,236 --> 00:08:33,956
package itself will provide you a
framework for AI clients to interact with

128
00:08:33,956 --> 00:08:38,996
your application, defining routes,
servers, prompts, and more. Servers define

129
00:08:38,996 --> 00:08:42,416
the central communication point to
provide capabilities such as tools,

130
00:08:42,416 --> 00:08:46,616
resources, and prompts, and there is an
example of a current weather tool in the

131
00:08:46,616 --> 00:08:51,556
documentation that gives you a quick taste
of building with Laravel MCP. You define

132
00:08:51,556 --> 00:08:56,796
a handle method and a schema method, so
very familiar stuff if you've built jobs

133
00:08:56,796 --> 00:09:01,755
or anything like that in Laravel. Laravel
MCP is released to the public as a beta

134
00:09:01,756 --> 00:09:05,516
version, but it already feels like a
polished Laravel package, and it feels

135
00:09:05,516 --> 00:09:09,736
very much like building MVC Laravel
applications. We think that the package

136
00:09:09,736 --> 00:09:14,316
itself will help the Laravel community
product- productively build MCP servers

137
00:09:14,316 --> 00:09:18,896
that are not only a joy to use but also to
build. With the beta release, there are a

138
00:09:18,896 --> 00:09:22,796
lot of resources to get started, so check
out the Laravel MCP documentation, the

139
00:09:22,796 --> 00:09:28,616
MCP repo. There is a demo application
called Locket. There is a web demo app in

140
00:09:28,616 --> 00:09:32,176
Laravel Cloud. There is the announcement
post from Laravel, and there is a video

141
00:09:32,176 --> 00:09:37,316
from Nuno Maduro, uh, who worked on this
with Ashley Hindle, I believe, uh,

142
00:09:37,316 --> 00:09:41,076
introducing Laravel MCP. So we have links
to all of that for you in the show notes,

143
00:09:41,076 --> 00:09:41,596
of course.

144
00:09:42,756 --> 00:09:45,796
Um, can I just make sure... So for those

145
00:09:45,796 --> 00:09:51,156
of you who are, um, with me sometimes, you
know, thinking about like, okay, you hear

146
00:09:51,156 --> 00:09:56,296
MCP, what exactly are we talking about
here, right? To be clear, this is allowing

147
00:09:56,296 --> 00:09:57,676
you to

148
00:09:58,516 --> 00:10:03,716
define tools and endpoints for your
Laravel application that would then be

149
00:10:03,716 --> 00:10:10,696
exposed as an MCP for LLMs to interact
with. So if your application provides

150
00:10:10,696 --> 00:10:15,656
some novel sort of tools that you would
like to expose, um, you can do so using

151
00:10:15,656 --> 00:10:20,156
this tool. It allows you to... It- it sort
of, uh, has conventions around how you

152
00:10:20,156 --> 00:10:24,156
should structure these things and how you
should expose those as an MCP server. So

153
00:10:24,156 --> 00:10:26,836
that's the idea here. You know, I know
there's a lot of talk about some of these

154
00:10:26,836 --> 00:10:29,616
things. What exactly is this one? That's
what this one is.

155
00:10:29,616 --> 00:10:32,196
-Mm-hmm. Yeah.
-But it- it, you know, really, it, you

156
00:10:32,196 --> 00:10:35,976
know, it's built by the, by the Laravel
team, so you can say that this would be

157
00:10:35,976 --> 00:10:38,386
the Laravel way to build your own MCP
server.

158
00:10:38,386 --> 00:10:39,096
-Mm-hmm.
-So, um-

159
00:10:39,096 --> 00:10:40,976
-Yeah
-... well done by the team there, and

160
00:10:40,976 --> 00:10:42,436
really excited to check that one out.

161
00:10:43,176 --> 00:10:47,336
From- from my perspective, I understand
what this is and what it enables.

162
00:10:47,336 --> 00:10:50,736
-Mm-hmm. Mm-hmm.
-What I don't understand is why you would

163
00:10:50,736 --> 00:10:54,796
do it. If you could explain to me why I
would want to provide an AI interface for

164
00:10:54,796 --> 00:10:55,186
someone

165
00:10:55,816 --> 00:11:00,915
sitting in their cloud or whatever to then
talk to my web application, I would like

166
00:11:00,915 --> 00:11:04,536
-for you to explain that to me.
-Okay. I c- can I take a shot?

167
00:11:04,536 --> 00:11:08,415
-You can try.
-Okay. So let's say that I have an

168
00:11:08,415 --> 00:11:14,656
application that I'm building that allows
clients... Let's- let's just, let's define

169
00:11:14,656 --> 00:11:17,296
them as insurance carriers, okay? Those
are the people.

170
00:11:17,296 --> 00:11:20,456
-Mm-hmm.
-They're wanting to deliver their claims

171
00:11:21,096 --> 00:11:26,696
to a vendor on the outside, okay? So my
application sits in the middle between the

172
00:11:26,696 --> 00:11:28,856
-insurance carrier and the vendor.
-Mm-hmm.

173
00:11:28,856 --> 00:11:29,016
I

174
00:11:29,756 --> 00:11:33,536
take aggregate data from the insurance
carrier and documents and things like

175
00:11:33,536 --> 00:11:40,086
that, and I format them into a consistent,
um, data structure that I can ingest from

176
00:11:40,086 --> 00:11:43,896
any insurance carrier, and I sort of
standardize those fields for vendors to

177
00:11:43,896 --> 00:11:44,936
then take and work with.

178
00:11:45,656 --> 00:11:51,556
It's possible that I would want the vendor
themselves, instead of just using APIs to

179
00:11:51,556 --> 00:11:55,716
be able to interact with that data, I
want to expose to them an endpoint where

180
00:11:55,716 --> 00:12:00,056
they can ask questions about the inventory
that has been assigned to them from that

181
00:12:00,056 --> 00:12:03,746
insurance carrier, for example. So they
could say, "How many claims do I currently

182
00:12:03,746 --> 00:12:07,308
have outstanding?"They could ask that
question from the LLM, and it would be

183
00:12:07,308 --> 00:12:11,827
able to use the tool that I've exposed to
say, "Here you go. This is how many you

184
00:12:11,828 --> 00:12:12,908
-have." Or-
-Right

185
00:12:12,908 --> 00:12:15,428
... "How many claims do I currently have
assigned that have a balance greater than

186
00:12:15,428 --> 00:12:20,947
$10,000?" There you go. Right? And so it
could, it could interact with it that way.

187
00:12:20,947 --> 00:12:24,147
I suppose that would be maybe a valid use
case for, for why-

188
00:12:24,148 --> 00:12:25,248
-Yeah
-... you would use something like this.

189
00:12:26,168 --> 00:12:27,448
-So then-
-With natural language-

190
00:12:27,448 --> 00:12:29,147
-Someone on the other-
-... queries almost, sort of.

191
00:12:29,148 --> 00:12:29,948
-Yeah.
-You know? Like...

192
00:12:29,948 --> 00:12:31,058
-And then someone on the other side-
-The vendor would have to-

193
00:12:31,058 --> 00:12:33,518
... has to then link that up with your MCP
server.

194
00:12:33,518 --> 00:12:36,008
Right. Correct. That would... That's
exactly right. Yeah. Somebody... They'd

195
00:12:36,008 --> 00:12:39,168
have to have somebody sophisticated enough
on their side to say, "Okay. We have an

196
00:12:39,168 --> 00:12:45,738
L- LLM, and we need to hook it up to your
MCP server." And yeah. Away you go. Um, at

197
00:12:45,738 --> 00:12:46,178
-this point-
-I think-

198
00:12:46,178 --> 00:12:49,208
... some of it I feel like is, like,
marketing speak too. So, like, you can

199
00:12:49,208 --> 00:12:49,318
-say-
-Mm-hmm

200
00:12:49,318 --> 00:12:52,078
... "Hey. We're j- you know, we're
releasing an MC- MCP server with our

201
00:12:52,078 --> 00:12:55,268
particular service as well." And some tech
head's gonna be like, "No way. You guys

202
00:12:55,268 --> 00:12:57,788
are ahead of the curve. You're
releasing..." You know. I don't know. I

203
00:12:57,788 --> 00:12:59,028
-don't know.
-Yeah. Yeah. Very interesting.

204
00:12:59,028 --> 00:13:01,008
I get what you're saying though too. Yeah.
That's, it's like, "Hmm."

205
00:13:01,008 --> 00:13:04,308
I'm sure one day... You know, it took me
three years to figure out what this is all

206
00:13:04,308 --> 00:13:07,468
about, so I'm sure one day in about three
years someone will show me something that

207
00:13:07,468 --> 00:13:11,448
-makes me go, "Oh. Okay."
-Ah. That's it. That's it. Right. For sure.

208
00:13:11,448 --> 00:13:16,208
Okay. Speaking of things that are being
released, Filament 4.1 is here. Really

209
00:13:16,208 --> 00:13:20,228
excited to announce this one. Since 4.0
was, was released, the core team and

210
00:13:20,228 --> 00:13:24,248
community have been really hard at work.
There's been 156 bug fixes that have been

211
00:13:24,248 --> 00:13:28,248
merged and 39 brand new features. So we're
gonna go through a couple of the new

212
00:13:28,248 --> 00:13:33,368
features in 4.1, some of our favorites.
There is a new panel layout. So in the

213
00:13:33,368 --> 00:13:36,308
traditional layout with Filament, you'd
have a top bar, you'd have a sidebar, and

214
00:13:36,308 --> 00:13:40,448
then you'd have the main content. You can
now do it no top bar. So this is perfect

215
00:13:40,448 --> 00:13:44,948
for apps that really, um, need all of that
ma- all that vertical space, right? They

216
00:13:44,948 --> 00:13:48,948
wanna maximize the vertical space there.
So the user menu, notification button,

217
00:13:48,948 --> 00:13:52,528
global search, they get moved to the
sidebar, which then opens up some

218
00:13:52,528 --> 00:13:56,038
interesting, uh, you know, theming
possibilities, if you will. So, um-

219
00:13:56,038 --> 00:13:57,308
-Mm-hmm
-... it looks really good. There's a

220
00:13:57,308 --> 00:14:00,768
screenshot and a little video demo in the
blog post here. You should definitely

221
00:14:00,768 --> 00:14:04,748
check that one out. Shout out to Nolan
Nordlund for his time that was spent on

222
00:14:04,748 --> 00:14:08,508
that feature. There also is some
interesting things that are available

223
00:14:08,508 --> 00:14:12,528
inside of their Rich Editor. So their Rich
Editor is like this text field.

224
00:14:13,668 --> 00:14:17,948
Think, like, Tricks, right? Um, you know,
you have bolding, italicize, all that sort

225
00:14:17,948 --> 00:14:18,698
-of stuff.
-Mm-hmm. Mm-hmm.

226
00:14:18,698 --> 00:14:24,088
They now have this ability to insert
responsive grids into that Rich Editor

227
00:14:24,088 --> 00:14:29,148
content, so you can almost... So, like,
if, um... You know, I know in GitHub you

228
00:14:29,148 --> 00:14:32,588
can sort of say /table, and then you can
define, like, "Hey, give me this sort of

229
00:14:32,588 --> 00:14:33,668
table," and then you can fill in those
pieces.

230
00:14:33,668 --> 00:14:36,208
-Yeah.
-This is like that but better because it

231
00:14:36,208 --> 00:14:41,668
can, can include these responsive grids
with up to 12 columns wide. Um, you can

232
00:14:41,668 --> 00:14:44,848
split them into two columns or each take a
third of the space, or you can do more

233
00:14:44,848 --> 00:14:47,968
advanced layouts. It's a little bit
difficult to describe, but that being

234
00:14:47,968 --> 00:14:52,128
said, there is another video demo in here
so you can see exactly how this works. The

235
00:14:52,128 --> 00:14:55,188
interface looks really clean, really
nice, and, uh, if you've ever needed to

236
00:14:55,188 --> 00:14:58,248
insert grids using something like that,
it's definitely gonna be a welcome

237
00:14:58,248 --> 00:15:02,628
addition. You also have the text color
tool, which is available inside of that

238
00:15:02,628 --> 00:15:06,648
Rich Editor. So you can select some text
and then say, "Here is the color I'd like

239
00:15:06,648 --> 00:15:10,928
that text to be," uh, which is
interesting. Uh, you also have images and

240
00:15:10,928 --> 00:15:16,128
things like that, uh, available in there.
Okay. There is a new table repeater in

241
00:15:16,128 --> 00:15:20,467
version 4 that makes it possible to render
each form field in its own table cell,

242
00:15:20,468 --> 00:15:26,168
but it has now a compact design. Um, so
they look seamless from the cells. Things

243
00:15:26,168 --> 00:15:30,678
like selects and text inputs previously,
they would sort of break the layout of it.

244
00:15:30,678 --> 00:15:31,418
-And so now-
-Mm-hmm

245
00:15:31,418 --> 00:15:35,788
... with this compact design, it, it
really makes them fit within a single cell

246
00:15:35,788 --> 00:15:40,657
there. And then as you mouse over them,
they'll expand, uh, to fill the space

247
00:15:40,657 --> 00:15:44,388
that's needed in order to display all that
information. So really, really cool

248
00:15:44,388 --> 00:15:50,408
there. Uh, cool there. Uh, new table
layouts for repeatable entries. Um, uh,

249
00:15:50,408 --> 00:15:54,448
but like for info list entries, that
allows you to output static tables,

250
00:15:54,448 --> 00:16:00,468
including, uh, item... Schemes with text,
icons, images, and more. Uh, there's an

251
00:16:00,468 --> 00:16:04,088
empty state schema component. This is
pretty cool because we've all had to

252
00:16:04,088 --> 00:16:08,068
define these ourselves previously. If
there's something that you've said, "Hey,

253
00:16:08,068 --> 00:16:12,967
there's nothing here for you to, to see,"
uh, you now have a schema component that

254
00:16:12,968 --> 00:16:16,368
will insert an empty state anywhere inside
your application so you don't have to do

255
00:16:16,368 --> 00:16:22,287
that yourself. There's also a brand new
Filament version 4 plugin ecosystem. Uh,

256
00:16:22,287 --> 00:16:28,168
224 version 4 plugins that are now
available on there. Um, some really, uh,

257
00:16:28,168 --> 00:16:34,268
cool ones. Passkeys, Prism Theme, Header
Select. There's a bunch of them in there.

258
00:16:34,268 --> 00:16:38,927
They're, uh, more getting added all the
time. Uh, Dan Herrin, uh, wrote this one

259
00:16:38,928 --> 00:16:42,948
up. Thanks so much, Dan, for doing so. And
you should definitely check out Filament

260
00:16:42,948 --> 00:16:48,588
version 4.1 today if you can. Just a
Composer update away from version 4.0.

261
00:16:48,588 --> 00:16:51,468
There you have it. Also, if you're, if
you're not on the Discord server and

262
00:16:51,468 --> 00:16:54,408
you're heavy into Filament, you should
definitely do so. A lot of good

263
00:16:54,408 --> 00:16:58,408
conversations and stuff going on over
there. Check that one out.

264
00:16:58,408 --> 00:17:04,438
Nice. PrettierPHP is an opinionated code
formatter that is a fast, deterministic

265
00:17:04,438 --> 00:17:10,688
code formatter for PHP written in PHP. It
has sensible defaults and runs without

266
00:17:10,688 --> 00:17:16,128
configurations. I assume this is very much
in the same spirit as Prettier is for,

267
00:17:16,128 --> 00:17:19,668
like, JavaScript and CSS. It is
configurable now, but it was originally

268
00:17:19,668 --> 00:17:23,798
launched with, like, "No. This is just how
it is," and that's, that's that. So, uh,

269
00:17:23,798 --> 00:17:27,828
the command line application has a VS Code
extension that allows you to format your

270
00:17:27,828 --> 00:17:32,588
files and, uh, on save. Now, there's no
reason to ditch Laravel Pint or

271
00:17:32,588 --> 00:17:35,608
phpcs-fixer if you're still using that to
handle formatting in your Laravel

272
00:17:35,608 --> 00:17:40,288
projects. However, this project, being a
PHP formatter, indicates a healthy PHP

273
00:17:40,288 --> 00:17:45,028
ecosystem that is growing with new tools.
And the author of this article, Mr. Paul

274
00:17:45,028 --> 00:17:49,768
Redmond, likes that PrettyPHP is
opinionated, and using it to format your

275
00:17:49,768 --> 00:17:54,268
projects will ensure consistent formatting
across all files and has defaults for

276
00:17:54,268 --> 00:17:59,948
Symfony, Drupal, Laravel, and WordPress.
It formats code written for PHP 8.4 and

277
00:17:59,948 --> 00:18:04,928
below, so it does support, uh, property
hooks, for example, which have, has taken

278
00:18:04,928 --> 00:18:09,648
some time in other tools that I use to, to
get full support. Code is formatted for

279
00:18:09,648 --> 00:18:14,256
readability, consistency, and small
diffs.Any previous formatting is ignored

280
00:18:14,256 --> 00:18:17,816
and nothing other than white space is
changed. Entire files are formatted in

281
00:18:17,816 --> 00:18:22,316
place. Formatting options are deliberately
limited. Pretty PHP is opinionated, so

282
00:18:22,316 --> 00:18:26,776
you don't have to be. Configuration is via
a simple JSON file, uh, which is

283
00:18:26,776 --> 00:18:30,236
supported but not required, and
formatting... Formatted and original code

284
00:18:30,236 --> 00:18:35,396
are compared for equivalence. It is
compliant with PSR-12 and PER. Uh, so you

285
00:18:35,396 --> 00:18:39,876
can see more details about that for, uh,
extra details. And as I said, it supports

286
00:18:39,876 --> 00:18:45,876
Symfony, Drupal, Laravel, and WordPress
code styles via presets. You can learn

287
00:18:45,876 --> 00:18:49,156
more about the project, the configuration,
and all of that good stuff, we'll have

288
00:18:49,156 --> 00:18:54,576
-links for you in the show notes.
-Awesome. The next up is we have one called

289
00:18:54,576 --> 00:18:59,036
Lara-Utilx. So this is a utility toolkit

290
00:18:59,676 --> 00:19:03,656
that, quote, every Laravel developer
needs. So as I've been reading through

291
00:19:03,656 --> 00:19:03,856
this,

292
00:19:04,496 --> 00:19:09,616
what it looks like is a team or an
individual who has said, "There's a lot of

293
00:19:09,616 --> 00:19:13,776
things that I've had to write over and
over again in applications that I've

294
00:19:13,776 --> 00:19:20,036
created that I've decided to just create a
bunch of traits for." And so, they've

295
00:19:20,036 --> 00:19:25,396
packaged all of these up and made them
available to you as a sort of grab bag of

296
00:19:25,396 --> 00:19:25,836
different

297
00:19:26,856 --> 00:19:29,376
solutions, uh, that you might want to

298
00:19:30,116 --> 00:19:36,136
have solved for you. So, um, CRUD, API
responses, validation, filtering,

299
00:19:36,136 --> 00:19:37,756
pagination, et cetera. So

300
00:19:38,736 --> 00:19:41,236
w- what is this? W- what's the difference
between this one and other utility

301
00:19:41,236 --> 00:19:46,216
libraries, is the first question. So
number one, they focus on real-world uses.

302
00:19:46,216 --> 00:19:49,716
So these are the utilities you'll
actually reach for in your production

303
00:19:49,716 --> 00:19:53,516
applications. There's no, like,
scaffolding blo- there... It's opt-in. You

304
00:19:53,516 --> 00:19:57,036
don't have to use all the pieces. You can
just use the ones that you want. Um, it's

305
00:19:57,036 --> 00:20:01,056
composable, so they can work together.
You can kind of add the different pieces

306
00:20:01,056 --> 00:20:05,856
in as you need them. It's not an all or
nothing. Uh, and then it's consistent. So

307
00:20:05,856 --> 00:20:09,376
there's predictive responses, uniform
pagination, reusable validation, et

308
00:20:09,376 --> 00:20:13,716
cetera. There's a bunch of things that are
in here, I'm gonna read a couple of them.

309
00:20:13,716 --> 00:20:17,776
So CRUD controller, this is an extendable
controller that turns standard CRUD

310
00:20:17,776 --> 00:20:22,375
endpoints into a few lines of code. This
is good for ad- admin interfaces and APIs.

311
00:20:22,436 --> 00:20:28,315
This one is interesting, an API response
trait. So deciding how you want to send

312
00:20:28,316 --> 00:20:34,556
back JSON responses from an API can be a
bit of a challenge. Um, if you've not

313
00:20:34,556 --> 00:20:38,356
decided already on a convention and you're
deciding for the first time, maybe this

314
00:20:38,356 --> 00:20:41,956
would be something you'd reach for. It
allows you to standardize those JSON

315
00:20:41,956 --> 00:20:46,816
responses across your app. Success, error,
paginated responses, your front end will

316
00:20:46,816 --> 00:20:51,005
thank you if you can make sure that these
are always consistent and the same. Uh, if

317
00:20:51,005 --> 00:20:54,856
you've ever had to deal with uploading or
deleting or reading file contents for

318
00:20:54,856 --> 00:20:58,336
single or multipile- multiple file
uploads, there's a trait for this. So you

319
00:20:58,336 --> 00:21:01,666
don't have to do any of that boilerplate.
You just include this file processing

320
00:21:01,666 --> 00:21:06,216
trait and it turns that controller into,
like, a single method and three lines.

321
00:21:06,216 --> 00:21:11,796
Pretty cool. Um, validation helper traits.
Access log middleware, so it logs all

322
00:21:11,796 --> 00:21:15,136
your incoming requests for traceability,
audits, performance insights. There's a

323
00:21:15,136 --> 00:21:18,876
caching utility. There's a configuration
utility. There's an OpenAI provider. Bunch

324
00:21:18,876 --> 00:21:21,976
of different things in here, I'm not
gonna read through all of them or the

325
00:21:21,976 --> 00:21:25,916
examples. Uh, suffice it to say, if this
is something that you would be interested

326
00:21:25,916 --> 00:21:32,176
in, you can find it in the show notes or
you can find it at github.com/... Well,

327
00:21:32,176 --> 00:21:34,436
it's not even worth reading it. It's too,
it's too hard. You're gonna have to go

328
00:21:34,436 --> 00:21:38,886
look at the show notes. Uh, thank you,
Omar, for submitting this one. Uh, sending

329
00:21:38,886 --> 00:21:39,416
this along.

330
00:21:41,316 --> 00:21:45,886
Lara dumps. Lara dumps...

331
00:21:45,886 --> 00:21:48,236
-Mm.
-... is a powerful and user-friendly

332
00:21:48,236 --> 00:21:49,876
-debugging out by-
-Did you see all the stuff on Twitter about

333
00:21:49,876 --> 00:21:52,356
-this?
-Look.

334
00:21:52,356 --> 00:21:57,596
-Uh-
-People are nothing if not juvenile.

335
00:21:57,596 --> 00:21:59,785
Yes, they are. That is right. Sorry, I
interrupted. Go ahead, my friend.

336
00:21:59,785 --> 00:22:04,396
Lara dumps is a powerful and user-friendly
debugging app that revolutionizes how you

337
00:22:04,396 --> 00:22:08,476
debug Laravel applications. Unlike
traditional debugging methods that

338
00:22:08,476 --> 00:22:12,796
interrupt your application flow or clutter
your browser output, Lara dumps displays

339
00:22:12,796 --> 00:22:18,056
your debugging information in a clean,
organized, standalone desktop application.

340
00:22:18,056 --> 00:22:22,816
The core tools provided by the, uh,
application are framework agnostic and

341
00:22:22,816 --> 00:22:27,396
should be compatible with any PHP project.
However, specific tools for debugging

342
00:22:27,396 --> 00:22:30,896
Laravel and Livewire projects are
included, and also works while testing

343
00:22:30,896 --> 00:22:35,496
your software with Pest. Main features
includes keeping your app running without

344
00:22:35,496 --> 00:22:38,416
interrupting the application flow. There
is a persistent history

345
00:22:39,136 --> 00:22:43,416
between page refre- refreshes, dedicated
interface, multiple dumps, beautiful

346
00:22:43,416 --> 00:22:44,876
formatting, and real-time

347
00:22:45,556 --> 00:22:50,916
updates. The package also offers Xdebug
integration for step-by-step debugging

348
00:22:50,916 --> 00:22:54,656
with full Xdebug support, along with a
variable inspector that provides beautiful

349
00:22:54,656 --> 00:22:57,726
and readable formatting for any variable
type.

350
00:22:59,116 --> 00:23:02,276
The desktop application features
multiscreen support, enabling developers

351
00:23:02,276 --> 00:23:05,656
to organize debug output across multiple
windows. And the interface includes a

352
00:23:05,656 --> 00:23:09,776
theme system with multiple themes powered
by Daisy UI, and offers a table view to

353
00:23:09,776 --> 00:23:14,436
display arrays and objects in searchable
tables. It also provides a specialized

354
00:23:14,436 --> 00:23:17,716
tools for Laravel development. The route
list feature allows developers to view all

355
00:23:17,716 --> 00:23:21,556
registered Laravel routes, while the
model inspector enables examination of

356
00:23:21,556 --> 00:23:25,716
Eloquent model attributes. Here are some
screenshots. It is a very

357
00:23:26,436 --> 00:23:31,856
good-looking application. Uh, it is, you
know, out there in a similar vein to

358
00:23:31,856 --> 00:23:36,456
things like, obviously, Herd's built-in
debugging to Ray. It's another option in

359
00:23:36,456 --> 00:23:41,776
the ecosystem, once again demonstrating
that the PHP ecosystem is thriving and

360
00:23:41,776 --> 00:23:46,536
well, uh, and there is lots of stuff out
there for... You know? Courses for

361
00:23:46,536 --> 00:23:50,836
courses, different things for different
people. So thanks very much to Yannick for

362
00:23:50,836 --> 00:23:52,536
putting this article together.

363
00:23:53,316 --> 00:23:59,576
Lara dumps. All right. Moving on, we have
Laravel Starter Kit by Nuno

364
00:23:59,576 --> 00:24:05,876
Maduro. Another one by Nuno. So, there are
a number of things that we've talked

365
00:24:05,876 --> 00:24:09,616
about in the last year and a half, I
suppose you could say, that feel like

366
00:24:09,616 --> 00:24:10,196
opt-in

367
00:24:11,116 --> 00:24:15,026
features that have been pushed into the
framework that you can sort of turn on but

368
00:24:15,026 --> 00:24:21,210
you don't have to. Um, some of those
would be things like strict models....

369
00:24:21,210 --> 00:24:27,879
auto eager loading, immutable dates,
forcing HTTPS, uh, safe console so that

370
00:24:27,879 --> 00:24:30,560
you can make sure you don't do things that
in production that you should not do,

371
00:24:30,560 --> 00:24:34,1000
like drop the database or something like
that. Um, asset pre-fetching, et cetera.

372
00:24:35,000 --> 00:24:41,700
All these different things, not allowing
n+1 queries. Those, right? Um,

373
00:24:41,760 --> 00:24:47,980
Nunos Starter Kit is a Laravel skeleton
for those people who demand meticulous

374
00:24:47,980 --> 00:24:52,760
precision in their projects. It is
enforcing strictness and type coverage,

375
00:24:52,760 --> 00:24:59,680
formatting, maxed static analysis, and
more. So all of the PHPStan, Pest,

376
00:24:59,680 --> 00:25:03,740
Rector, Pint, and Prettier settings are
pre-configured to be as strict as

377
00:25:03,740 --> 00:25:10,740
possible. So 100% type code coverage, PHP
level max, Rector with max, uh, privi-

378
00:25:10,740 --> 00:25:16,620
priviz- privatization? Privatization, I
guess? Um, and then also enhanced tests

379
00:25:16,620 --> 00:25:22,899
and defaults like, um, you know, the Pest
type coverage requires a minimum of

380
00:25:22,899 --> 00:25:23,710
100%.

381
00:25:24,340 --> 00:25:24,840
Um, so

382
00:25:25,440 --> 00:25:29,820
it's... For those of us who are starting a
brand new project, and you really wanna

383
00:25:29,820 --> 00:25:32,870
make sure you're getting off on the right
foot, this Laravel Skeleton is a great way

384
00:25:32,870 --> 00:25:38,940
to start. It's also, if you wanted to, a
way to sort of say, "Okay, if I wanted to

385
00:25:38,940 --> 00:25:42,260
get 100, this is what I'd do," but you can
also dial it back, right? Some of it is

386
00:25:42,260 --> 00:25:45,820
just useful to have as a, "If I wanted to
configure these things and I've not

387
00:25:45,820 --> 00:25:48,100
configured them before, how would I do so

388
00:25:49,100 --> 00:25:52,060
if I was on Team Laravel and setting this
up for the first time?" So you could go

389
00:25:52,060 --> 00:25:55,879
look at the GitHub, you know, the .GitHub
folder in these and kinda see how these

390
00:25:55,879 --> 00:26:00,159
actions are running. Um, or how would I
configure some of these things? It's also

391
00:26:00,159 --> 00:26:04,620
good just for that as well, just for
reference. So take it for what it is, um,

392
00:26:04,620 --> 00:26:09,159
pretty interesting though, and, um, easy
to get started with as well. So it has

393
00:26:09,159 --> 00:26:15,159
some example text at the bottom here that
you would put in to get started, uh,

394
00:26:15,159 --> 00:26:19,580
including the creating the project with
Composer, CDing in, then Composer install,

395
00:26:19,580 --> 00:26:23,920
NPM install, et cetera, et cetera. It's
down the list you go. So, um, good stuff

396
00:26:23,920 --> 00:26:26,980
there. Yeah, what do you think, Michael?
Would you use that?

397
00:26:27,740 --> 00:26:32,760
No, uh, look, I have enough pain and
suffering with PHPStan at level 5. I

398
00:26:32,760 --> 00:26:33,040
don't-

399
00:26:33,679 --> 00:26:38,559
Even just going from 5 to 6 is giving me
nightmares. So I'll just, I'll just leave

400
00:26:38,560 --> 00:26:39,460
this for other people.

401
00:26:40,080 --> 00:26:41,360
-There you go.
-Enjoy it if you d- if you want to.

402
00:26:41,360 --> 00:26:45,340
Next time I start a new project, maybe.
Right? Maybe.

403
00:26:45,340 --> 00:26:48,879
-You, you will unravel very quickly.
-I believe that.

404
00:26:48,879 --> 00:26:49,470
-If you're anything-
-I believe that

405
00:26:49,470 --> 00:26:50,089
... like me.

406
00:26:51,320 --> 00:26:51,980
I am.

407
00:26:52,240 --> 00:26:52,770
I am. So

408
00:26:53,860 --> 00:26:55,470
I'll take your word for it, my friend. All
right.

409
00:26:55,470 --> 00:26:56,619
-Yeah.
-On we go.

410
00:26:56,620 --> 00:27:01,139
The Gemini package for Laravel, developed
by Houssein Hazami, is a package designed

411
00:27:01,139 --> 00:27:06,480
to integrate with the Google Gemini API.
It supports text, image, video, audio,

412
00:27:06,480 --> 00:27:11,119
long context structured output function
calling, and understanding capabilities.

413
00:27:11,120 --> 00:27:16,080
The package also supports streaming
responses using the stream method. Main

414
00:27:16,080 --> 00:27:20,620
pages include text generation with both
context and history, image generation and

415
00:27:20,620 --> 00:27:23,900
understanding, video generation and
analysis, audio synthesis and

416
00:27:23,900 --> 00:27:27,520
transcription, document processing and
understanding, embeddings generation, file

417
00:27:27,520 --> 00:27:31,629
management capabilities, real time
streaming, responses, and configurable

418
00:27:31,629 --> 00:27:36,940
safety settings. There is a whole suite of
these different integrations for

419
00:27:36,940 --> 00:27:40,860
different reasons, for different models
that will keep evolving. You know, we're

420
00:27:40,860 --> 00:27:46,040
in this state of flux, I think, with, uh,
API at the moment, and, uh, it's good to

421
00:27:46,040 --> 00:27:50,179
have options. Uh, I know that we have
spoken about Prism before. TJ spoke about

422
00:27:50,179 --> 00:27:50,730
-Prism-
-Mm-hmm. Yep

423
00:27:50,730 --> 00:27:56,720
... at Laracon US this year. If there is a
chance that you want to move between

424
00:27:56,720 --> 00:28:01,850
different providers and wanna sw- swap
things out really simply, then Prism would

425
00:28:01,850 --> 00:28:07,220
probably be the way to go. If you just
want to use Gemini and always use Gemini,

426
00:28:07,220 --> 00:28:07,480
then

427
00:28:08,280 --> 00:28:12,400
definitely check out something like this,
you know, provider-specific, uh,

428
00:28:12,400 --> 00:28:18,280
application, uh, packages. So we'll have
links to that for you in the show notes.

429
00:28:18,280 --> 00:28:24,120
Very cool. I can see the little one has
crashed our party. Hey, what's up, kiddo?

430
00:28:25,300 --> 00:28:27,659
This is the best part of the show, guys
and girls,

431
00:28:28,260 --> 00:28:31,560
where the kids enter and just get to say
hello. She should wave to the camera.

432
00:28:31,560 --> 00:28:32,940
-Oh. Yeah.
-Oh, too late.

433
00:28:32,940 --> 00:28:33,600
-Oh, she's gone.
-Oh.

434
00:28:33,600 --> 00:28:37,960
It's, uh, school holidays, and they are,
they are home today with mom, who does

435
00:28:37,960 --> 00:28:41,990
-not... doesn't have them. Look-
-We are not gonna complain

436
00:28:41,990 --> 00:28:43,250
-... at this age-
-We are happy to see them.

437
00:28:43,250 --> 00:28:46,060
At this age, they do whatever they want to
do-

438
00:28:46,060 --> 00:28:47,710
-That is correct
-... for the most part. So you can't, you

439
00:28:47,710 --> 00:28:49,560
-can't s-
-It is their house too. Yep.

440
00:28:49,560 --> 00:28:50,159
-That's right.
-Absolutely.

441
00:28:50,159 --> 00:28:53,220
You could tell... I, I've told them, like,
if the door's shut, it means that I'm in

442
00:28:53,220 --> 00:28:56,920
a meeting, whether it's this or it's with,
you know, work people, do- doesn't

443
00:28:56,920 --> 00:28:57,780
-matter.
-Nope, absolutely not.

444
00:28:57,780 --> 00:29:01,020
Doesn't matter when, when they're looking,
when they're looking for their Elsa doll,

445
00:29:01,020 --> 00:29:04,220
or they're looking for their toy, they
come in and look for it. No matter what.

446
00:29:04,220 --> 00:29:06,960
All bets are off. No holds barred. I got
it.

447
00:29:06,960 --> 00:29:10,540
-We love them. We love them all.
-We do, we absolutely do. All right, folks,

448
00:29:10,540 --> 00:29:17,379
another package here. Building Terminal
UIs in PHP with ANSI Kit. Now, you might

449
00:29:17,379 --> 00:29:21,740
think to yourself, "Why do we need this?
Don't we already have Laravel Prompts?"

450
00:29:21,740 --> 00:29:25,200
Ah, yes, you do, but then it would be
dependent on making sure that you're using

451
00:29:25,200 --> 00:29:28,240
Laravel. And in that case, you'd say,
"Well, isn't this the Laravel News

452
00:29:28,240 --> 00:29:33,400
Podcast?" To which I would say, "Yes, it
is." But not all of us get to use Laravel

453
00:29:33,400 --> 00:29:38,679
all the time. So if you are stuck in a
project which is just PHP, or you'd rather

454
00:29:38,679 --> 00:29:41,320
not be using Laravel Prompts, you're
looking for something else, no problem,

455
00:29:41,320 --> 00:29:46,129
we've got you covered. ANSI Kit is a zero
dependency ANSI escape helper for building

456
00:29:46,129 --> 00:29:51,600
terminal UIs in PHP. Uh, so no
dependencies, right? That is the trick

457
00:29:51,600 --> 00:29:54,800
here. It is dependent on nothing. You
include this in your project, and you are

458
00:29:54,800 --> 00:29:59,340
good to go. So it's got a chainable API
for styles, colors, and cursor control

459
00:29:59,340 --> 00:30:03,260
along with useful components and
utilities. You might be reminded that in

460
00:30:03,260 --> 00:30:08,040
addition to Laravel Prompts, we also have
had something like this, uh, I think come

461
00:30:08,040 --> 00:30:11,019
out after Laravel Prompts, which was
talking specifically about some of these

462
00:30:11,020 --> 00:30:13,980
things. I think Aaron Francis actually had
something like this, where it was dealing

463
00:30:13,980 --> 00:30:18,724
with different colors and things like
that. So...So, um, in any case, these are

464
00:30:18,724 --> 00:30:22,324
difficult problems to solve. Multiple
people have solved them their own ways.

465
00:30:22,324 --> 00:30:26,624
Um, but this includes things like being
able to style colors, like the background,

466
00:30:26,624 --> 00:30:31,944
the foreground. It includes RGB, uh, 256
is another thing that it says here.

467
00:30:31,944 --> 00:30:35,344
There's like two 56, 156 colors, I'm
guessing is what it's saying. It includes

468
00:30:35,344 --> 00:30:39,244
the ability to style using bold, italic,
underline or dim. Uh, you can clear the

469
00:30:39,244 --> 00:30:44,444
screen, clear a line, clear from, on, up
to a particular pla- place. You can jump

470
00:30:44,444 --> 00:30:48,824
the cursor around, and then it also ships
with components like tables, banners and

471
00:30:48,824 --> 00:30:53,684
progress bars. So there's a screenshot
inside of the blog post here that shows a

472
00:30:53,684 --> 00:30:58,144
bunch of the different, um, components
that ship with it. There's some example

473
00:30:58,144 --> 00:31:02,224
code for how exactly you would get this
running in your project, and then there is

474
00:31:02,224 --> 00:31:05,944
a listing of all the different features
and components that they have. Let me list

475
00:31:05,944 --> 00:31:08,864
a couple of them here. I said what...
Some of them already, but I'll name some

476
00:31:08,864 --> 00:31:12,644
of them again. TableComponent,
BannerComponent, ProgressBar, Spinner,

477
00:31:12,644 --> 00:31:17,324
Choice, Keypress, InputHelper and more. So
Paul Rudman thought this one was worth a

478
00:31:17,324 --> 00:31:21,204
write-up. We will trust that it is, in
fact, a pretty awesome library. Thanks,

479
00:31:21,204 --> 00:31:24,504
Paul, for writing this right one up.
Everyone's favorite human, got to say it

480
00:31:24,504 --> 00:31:26,524
at least once a show. All right, Michael,
back to you.

481
00:31:26,524 --> 00:31:33,184
At least. Um, tutorial time. You have
helpfully, I was gonna say handily, but

482
00:31:33,184 --> 00:31:38,544
helpfully split this up into t- tutorials,
Livewire-specific tutorials, framework

483
00:31:38,544 --> 00:31:40,844
reminders and videos. And I

484
00:31:41,504 --> 00:31:43,404
am just gonna read through all the
headlines and leave-

485
00:31:43,404 --> 00:31:45,634
-That's better
-... the links to each of them in the show

486
00:31:45,634 --> 00:31:50,144
notes for you to follow up. So tutorials
first, debugging and logging in Laravel

487
00:31:50,144 --> 00:31:53,744
applications. The team at Sentry recently
published a helpful guide on how to make

488
00:31:53,744 --> 00:31:57,364
the most of Laravel's built-in debugging
and logging tools, and how to use Sentry

489
00:31:57,364 --> 00:32:01,044
to debug Laravel apps in production
effectively. There is an introduction to

490
00:32:01,044 --> 00:32:07,024
MongoDB and Laravel MongoDB setup. There
is the hidden cost of MySQL defaults in

491
00:32:07,024 --> 00:32:09,324
Laravel apps. I don't know what is going
on with this

492
00:32:10,264 --> 00:32:12,964
image. This... There's a horse, there's a
girl with a lollipop.

493
00:32:12,964 --> 00:32:16,564
-It looks very creepy. Yeah, it's, it's-
-The hidden cost-

494
00:32:16,564 --> 00:32:18,844
-It's-
-... is apparently creepy Wednesday

495
00:32:18,844 --> 00:32:23,324
Addams-esque imagery. I don't know what is
happening.

496
00:32:24,684 --> 00:32:26,464
-All right. My-
-I will say this one is one of the most

497
00:32:26,464 --> 00:32:29,384
interesting ones to me. This one was
written up by Eric Barnes. But it's

498
00:32:29,384 --> 00:32:35,104
basically like if you just start MySQL and
just ship it and you don't do anything

499
00:32:35,104 --> 00:32:37,564
-with, like, your, you know, DB pool size-
-Mm-hmm

500
00:32:37,564 --> 00:32:41,964
... holy cow, we have run into this
recently, and it was a pain. So if you

501
00:32:41,964 --> 00:32:42,334
-have not-
-Yeah

502
00:32:42,334 --> 00:32:46,794
... looked at any of these things, it's
definitely worth looking at once. And then

503
00:32:46,794 --> 00:32:50,784
it's also some tools like MySQL Tuner.
Like, what... You know, that'll... It's

504
00:32:50,784 --> 00:32:53,614
basically gonna run some stuff that's
gonna tell you, "Oh, you're not doing this

505
00:32:53,614 --> 00:32:55,524
-efficiently. You should check this out."
-Yeah.

506
00:32:55,524 --> 00:32:57,804
I am reading this as soon as our show is
done. So-

507
00:32:57,804 --> 00:32:59,144
-Absolutely
-... just telling you. This one looks

508
00:32:59,144 --> 00:33:03,024
-really good.
-Mm-hmm. Uh, and I... Anyway, as promised,

509
00:33:03,024 --> 00:33:07,324
Livewire session properties for persistent
component state, Livewire

510
00:33:07,324 --> 00:33:13,244
wireclick.preventDefault for form
handling. We also have two more of, uh,

511
00:33:13,244 --> 00:33:17,564
Harris'... What do we call it? Advanced,
efficient-

512
00:33:17,564 --> 00:33:19,264
-Mm-hmm
-... effective. I really should write it

513
00:33:19,264 --> 00:33:22,214
down. Harris' series on

514
00:33:22,844 --> 00:33:25,974
-writing good Lara... Testing your-
-Testing, yeah

515
00:33:25,974 --> 00:33:29,564
... reporting system with Laravel
factories and assertions and profiling

516
00:33:29,564 --> 00:33:34,804
Laravel, how to find hidden performance
killers. And then lastly, three framework

517
00:33:34,804 --> 00:33:38,604
reminders for you this week. Laravel
collection pluck method gains closure

518
00:33:38,604 --> 00:33:42,664
transformation power, Laravel
configuration arrays made simpler with

519
00:33:42,664 --> 00:33:48,183
config collection, and Laravel custom
validation rules for enhanced data

520
00:33:48,184 --> 00:33:52,764
integrity. That is all of the tutorials
this week. I will have links to them all

521
00:33:52,764 --> 00:33:58,534
for you in the show notes. Make sure you
check them out on YouTube, on, uh, in, in

522
00:33:58,534 --> 00:34:01,904
your podcatcher of choice. All of the
links are there.

523
00:34:01,904 --> 00:34:04,964
Absolutely. They are, they are in your
podcatcher of choice. They've gotten

524
00:34:04,964 --> 00:34:09,083
the... They're all broken down. Uh, it's
really well done and you can actually

525
00:34:09,083 --> 00:34:11,984
click around to the different sections
inside of the podcast as well if you're

526
00:34:11,984 --> 00:34:15,184
only interested in this particular pieces.
"Uh, that's one I'm interested in, let me

527
00:34:15,184 --> 00:34:18,144
click through that one." You can skip
through the rest of them, that's fine too.

528
00:34:18,144 --> 00:34:21,424
Folks, Episode 246, the one you just
listened to, you can find show notes for

529
00:34:21,424 --> 00:34:26,384
this at podcast.laravel-news.com/246. We'd
really appreciate it if you'd rate us up

530
00:34:26,384 --> 00:34:29,444
in your podcatcher of choice, as we spoke
about. Five stars would be incredible. And

531
00:34:29,444 --> 00:34:32,083
if you have any questions or comments,
we'd love to hear from you on X, on

532
00:34:32,083 --> 00:34:36,924
BlueSky, @JacobBennett, @MichaelDeRenda,
or @Laravel News. Folks, until next time,

533
00:34:36,924 --> 00:34:41,164
-it's been wonderful. We'll see you.
-Bye.