WEBVTT
00:00:00.020 --> 00:00:04.600
You've built your FastAPI app. It's running great locally. Now you want to share it with the world.
00:00:05.360 --> 00:00:12.480
But then reality hits. Containers, load balancers, HTTPS certificates, cloud consoles with 200
00:00:12.680 --> 00:00:18.560
options. What if deploying was just one command? That's exactly what Sebastian Ramirez and the
00:00:18.660 --> 00:00:24.460
FastAPI cloud team are building. On this episode, we sit down with Sebastian, Patrick Arminio,
00:00:24.720 --> 00:00:29.980
Savannah Ostrowski, and Jonathan Ewald to go inside FastAPI cloud, explore what it means
00:00:30.000 --> 00:00:35.340
to build a Pythonic cloud and dig into how this commercial venture is actually making FastAPI,
00:00:35.380 --> 00:00:42.060
the open source project, stronger than ever. This is Talk Python To Me, episode 536, recorded January
00:00:42.440 --> 00:00:51.440
13th, 2026. Talk Python To Me, yeah, we ready to roll. Upgrading the code, no fear of getting old.
00:00:51.580 --> 00:00:59.960
Async in the air, new frameworks in sight, geeky rap on deck. Quark crew, it's time to unite. We
00:01:01.820 --> 00:01:06.460
Welcome to Talk Python To Me, the number one Python podcast for developers and data scientists.
00:01:06.980 --> 00:01:12.300
This is your host, Michael Kennedy. I'm a PSF fellow who's been coding for over 25 years.
00:01:12.940 --> 00:01:17.460
Let's connect on social media. You'll find me and Talk Python on Mastodon, Bluesky, and X.
00:01:17.710 --> 00:01:23.000
The social links are all in your show notes. You can find over 10 years of past episodes at
00:01:23.120 --> 00:01:27.400
Talk Python.fm. And if you want to be part of the show, you can join our recording live streams.
00:01:27.680 --> 00:01:31.580
That's right, we live stream the raw uncut version of each episode on YouTube.
00:01:32.180 --> 00:01:36.600
Just visit talkpython.fm/youtube to see the schedule of upcoming events.
00:01:36.860 --> 00:01:40.480
Be sure to subscribe there and press the bell so you'll get notified anytime we're recording.
00:01:41.480 --> 00:01:46.440
This episode is brought to you by CommandBook, a native macOS app that I built that gives
00:01:46.640 --> 00:01:48.680
long-running terminal commands a permanent home.
00:01:49.080 --> 00:01:51.080
No more juggling six terminal tabs every morning.
00:01:51.700 --> 00:01:56.340
Carefully craft a command once, run it forever with auto-restart, URL detection, and a full CLI.
00:01:56.780 --> 00:01:59.840
Download it for free at talkpython.fm/command book app.
00:02:00.520 --> 00:02:03.140
And it's brought to you by the Talk Python in Production Book,
00:02:03.700 --> 00:02:08.360
an inside look at 10 years of the real-world DevOps behind the Talk Python sites and apps.
00:02:08.640 --> 00:02:11.340
Check it out at talkpython.fm/DevOps book.
00:02:12.100 --> 00:02:14.220
Before we dive in, I have something excellent to announce.
00:02:14.440 --> 00:02:17.820
A few episodes back, I told you about our new AI integrations,
00:02:18.120 --> 00:02:21.880
the Talk Python MCP servers, and our llms.txt file,
00:02:22.300 --> 00:02:31.420
so that AI tools can tap into our over 550 episodes and 7.5 million words of info around the Python community and history.
00:02:32.080 --> 00:02:33.580
Well, I'm building on that now.
00:02:34.240 --> 00:02:37.120
Talk Python now has an open source CLI tool.
00:02:37.490 --> 00:02:41.960
You can search episodes, transcripts, guests, and even our courses right from your terminal.
00:02:42.260 --> 00:02:43.240
No browser required.
00:02:44.240 --> 00:02:49.040
It's fast too, backed by our optimized APIs, taking about five milliseconds of response time,
00:02:49.300 --> 00:02:51.140
plus, you know, whatever the internet ping time is.
00:02:51.680 --> 00:02:57.120
It supports rich text for humans, JSON for programs, and markdown output for AIs.
00:02:57.900 --> 00:03:04.540
You just install it with uvtoolinstall talk-python-cli, and check it out on GitHub.
00:03:04.920 --> 00:03:06.460
The link is in the podcast player show notes.
00:03:07.160 --> 00:03:09.560
I also wrote up a blog post on the hows and whys of it.
00:03:09.880 --> 00:03:14.100
Check that out over on the Talk Python blog at, well, talkpython.fm/blog.
00:03:14.780 --> 00:03:17.120
The full link to the exact article is in the show notes.
00:03:17.860 --> 00:03:18.680
All right, let's jump in.
00:03:20.100 --> 00:03:20.700
Hello, everyone.
00:03:21.220 --> 00:03:23.940
Sebastian, Patrick, Savannah, and Jonathan.
00:03:24.460 --> 00:03:25.580
Awesome to have you all here.
00:03:26.160 --> 00:03:27.460
Excited to talk about FastAPI Cloud.
00:03:28.120 --> 00:03:28.300
Welcome.
00:03:28.310 --> 00:03:28.460
Yes.
00:03:28.980 --> 00:03:29.620
Thanks for having me.
00:03:29.860 --> 00:03:30.100
Thank you.
00:03:30.240 --> 00:03:31.080
We're also ahead, Mike.
00:03:31.660 --> 00:03:32.640
What a project.
00:03:32.920 --> 00:03:34.420
It's been going on for a while.
00:03:34.880 --> 00:03:40.100
I've heard stuff from Sebastian that maybe something was brewing and all these things,
00:03:40.320 --> 00:03:42.780
but not too long ago, you all announced it.
00:03:43.020 --> 00:03:47.100
And I heard that FastAPI, some people have been using it recently.
00:03:47.500 --> 00:03:50.820
Some of the surveys show that some people use it for websites.
00:03:51.140 --> 00:03:51.560
I'm not sure.
00:03:51.860 --> 00:03:52.320
Rumors.
00:03:52.900 --> 00:03:53.180
Yeah, yeah.
00:03:53.380 --> 00:03:53.800
Rumors.
00:03:54.680 --> 00:03:55.080
Rumors.
00:03:55.440 --> 00:03:56.020
Oh, my gosh.
00:03:56.100 --> 00:03:58.060
I mean, congratulations on that.
00:03:58.100 --> 00:04:03.120
But before we dive into FastAPI and FastAPI Cloud, let's just do a quick introduction.
00:04:03.720 --> 00:04:04.320
Who are you?
00:04:04.380 --> 00:04:08.220
We'll just go around the Brady Bunch squares of our live stream here and start with Sebastian.
00:04:08.620 --> 00:04:09.680
You've been on the show a few times.
00:04:09.800 --> 00:04:14.380
In fact, you've been on the show just recently for a really fun episode, Sebastian.
00:04:14.760 --> 00:04:15.060
Who are you?
00:04:15.260 --> 00:04:16.519
In real, that was super fun.
00:04:17.019 --> 00:04:18.100
So, hello, everyone.
00:04:18.280 --> 00:04:20.299
I'm Sebastian Ramirez, or Tiangulo.
00:04:20.799 --> 00:04:22.300
I created FastAPI.
00:04:22.400 --> 00:04:26.200
That is this Python framework for building web APIs and backend.
00:04:26.940 --> 00:04:29.980
In case you've been living in a hole and haven't done any Python for 10 years.
00:04:30.500 --> 00:04:36.480
You also are famous for really pointing out the ridiculousness of modern tech recruiting.
00:04:36.800 --> 00:04:38.220
You know what I'm talking about?
00:04:38.580 --> 00:04:40.140
Yeah, you know, like it's fun.
00:04:40.280 --> 00:04:42.700
This is probably the thing that I am known for.
00:04:42.780 --> 00:04:47.700
It's for writing a tweet saying, yeah, what was it?
00:04:47.980 --> 00:04:52.460
that I saw a job asking for five years of experience in FastAPI,
00:04:52.920 --> 00:04:56.040
and I only had 2.5 since I created the thing.
00:04:56.140 --> 00:04:58.920
So you didn't qualify for the FastAPI job?
00:04:59.000 --> 00:05:00.460
I didn't qualify for that, yeah.
00:05:00.800 --> 00:05:03.260
And then the funny thing is, you know, like people sometimes,
00:05:03.940 --> 00:05:06.240
even people in Python itself, and tell me like,
00:05:06.400 --> 00:05:08.220
oh, wait, like you're, and I say like, oh, yeah,
00:05:08.270 --> 00:05:09.580
I created this thing called FastAPI.
00:05:09.700 --> 00:05:11.340
Oh, wait, okay, so what is FastAPI?
00:05:11.480 --> 00:05:14.440
Oh, wait, you are the guy from the meme,
00:05:14.900 --> 00:05:16.160
the meme about FastAPI.
00:05:16.160 --> 00:05:16.780
Are you serious?
00:05:17.440 --> 00:05:22.960
Yeah, you know, like suddenly that is super important that I am the guy for the meme about FastAPI.
00:05:23.260 --> 00:05:26.020
Not the guy from FastAPI, the guy from the meme.
00:05:26.740 --> 00:05:29.080
Oh my gosh, I saw you on TikTok. It was amazing.
00:05:29.840 --> 00:05:34.240
It was a live achievement. I wrote a viral tweet. So yeah, nice to meet you all.
00:05:34.360 --> 00:05:37.680
You know what? Sometimes your moment in the sun is not the one you expected.
00:05:37.920 --> 00:05:40.340
No, congratulations on how good FastAPI is.
00:05:40.340 --> 00:05:40.620
On the tweet.
00:05:41.820 --> 00:05:44.980
Exactly. You really nailed it. Patrick, welcome to the show.
00:05:45.160 --> 00:05:46.580
Nice to be here. Yeah, I'm Patrick.
00:05:47.040 --> 00:05:50.780
I guess the main thing I'm kind of known for in the community is like this library called
00:05:50.940 --> 00:05:54.820
Strawberry, which is similar to FastAPI, but instead of REST is for GraphQL.
00:05:55.130 --> 00:06:00.740
Other than that, I help organize PyCon Italy and I used to also do EuroPython as well,
00:06:00.940 --> 00:06:03.160
but I stopped because of way too many things.
00:06:03.550 --> 00:06:05.120
Yeah, that's pretty much me.
00:06:05.200 --> 00:06:06.780
How do you see GraphQL these days?
00:06:07.290 --> 00:06:08.220
Is it still popular?
00:06:08.500 --> 00:06:12.160
I think it's mostly popular in the enterprises, unfortunately.
00:06:12.800 --> 00:06:16.039
I'm a bit, to be honest, I'm a bit annoyed about the companies that do tooling around
00:06:16.060 --> 00:06:20.200
GraphQL because I don't know, I feel like they're not really pushing it forward. They're just,
00:06:20.380 --> 00:06:24.900
I don't know, trying to work with enterprises and that's it. Or maybe people think to AI.
00:06:25.140 --> 00:06:31.180
Yeah. It feels a little bit like the soap, soap, wisdom, XML, modern version. Savannah.
00:06:33.040 --> 00:06:33.180
Yeah.
00:06:34.740 --> 00:06:39.840
You like tapping out of being an organizer for EuroPython is like, you know, the classic
00:06:40.060 --> 00:06:44.180
open source oversubscribed doing all the things very relatable.
00:06:44.720 --> 00:06:44.880
Yeah.
00:06:45.030 --> 00:06:45.180
Yeah.
00:06:45.660 --> 00:06:46.280
But yeah, I'm Savannah.
00:06:46.760 --> 00:06:47.660
What can I say?
00:06:47.780 --> 00:06:52.360
I am on the Python Steering Council for 2096, which is very exciting.
00:06:52.640 --> 00:06:52.920
Congratulations.
00:06:53.340 --> 00:06:53.780
Oh, thank you.
00:06:53.980 --> 00:06:59.280
I am also the release manager for the upcoming version of Python, Python 3.16.
00:06:59.910 --> 00:07:03.800
And so that'll kick off later this year, which is really cool and very exciting.
00:07:04.320 --> 00:07:08.800
I work on CPython stuff, the JIT, arg parse, basically whatever needs help.
00:07:09.060 --> 00:07:09.880
It's kind of where you'll find me.
00:07:09.960 --> 00:07:10.160
Awesome.
00:07:10.760 --> 00:07:12.300
Congratulations on the Steering Council.
00:07:12.880 --> 00:07:15.000
And yeah, that's a lot of cool stuff.
00:07:15.540 --> 00:07:19.740
Hopefully we don't get a Python 4.0 right after 3.16
00:07:20.540 --> 00:07:22.960
because then your job will never end, is what I've learned.
00:07:23.240 --> 00:07:23.560
Yeah, yeah.
00:07:23.920 --> 00:07:27.920
Benjamin Peterson, Python 2.7 forever kind of situation.
00:07:28.460 --> 00:07:28.860
Yeah, yeah.
00:07:29.070 --> 00:07:32.920
I mean, release management is still, I mean, it's still quite a commitment.
00:07:33.140 --> 00:07:36.900
It's like seven-ish years when you think about all the staggered releases
00:07:36.990 --> 00:07:38.620
because you're a release manager 2.0
00:07:38.620 --> 00:07:40.700
and then you have the five-year maintenance cycle.
00:07:41.980 --> 00:07:45.800
So yeah, it's Python forever is what I only said.
00:07:45.960 --> 00:07:47.040
Yeah, it's probably not a fad.
00:07:47.120 --> 00:07:48.720
It's probably going to stick around, this Python thing.
00:07:50.400 --> 00:07:51.080
No, that's awesome.
00:07:51.360 --> 00:07:51.580
Congratulations.
00:07:51.940 --> 00:07:53.780
Also, cool with arg parse.
00:07:54.080 --> 00:08:04.680
I feel like that's making a strong comeback now that we have these AI things that can just put stuff together for us instead of like, oh, I need to depend on this library and that library.
00:08:04.700 --> 00:08:08.060
Like, I just need to take a few arguments and have a little help text.
00:08:08.120 --> 00:08:10.000
And it's like, well, you've already got this built-in thing.
00:08:10.120 --> 00:08:11.240
Oh, who knew?
00:08:11.420 --> 00:08:12.820
You know, people are like, oh, I didn't even know.
00:08:12.870 --> 00:08:15.800
I thought I used typer or click or something, right?
00:08:15.940 --> 00:08:18.320
There's, you know, the typers and clicks of the world.
00:08:18.430 --> 00:08:20.720
But sometimes you just want the simplest thing.
00:08:20.880 --> 00:08:22.740
And ArgParse is pretty great at that.
00:08:22.950 --> 00:08:27.900
Although it has many quirks that are probably and most definitely unfixable at this point.
00:08:28.220 --> 00:08:32.080
Because bugs are features when you have things that have been around as long as Python.
00:08:32.490 --> 00:08:35.000
But yeah, no, I mean, AI loves to write Python.
00:08:35.320 --> 00:08:39.240
I think it's like the language used the most, AI-generated code.
00:08:39.680 --> 00:08:42.039
I'll just say we live in weird times, very weird times.
00:08:42.539 --> 00:08:44.940
I would love a precedented time at some time.
00:08:45.440 --> 00:08:45.840
Exactly.
00:08:46.160 --> 00:08:46.220
Yeah.
00:08:46.320 --> 00:08:47.660
Can we just get the boring times?
00:08:48.000 --> 00:08:49.640
No, nothing interesting, please.
00:08:49.940 --> 00:08:55.460
What I said about GraphQL may sound like a bit of a smash, but I didn't mean it in a negative,
00:08:56.020 --> 00:08:56.940
super negative way anyway.
00:08:57.220 --> 00:09:02.500
Like it used to be all the enterprises were all about soap and wisdom and like subscribing
00:09:02.580 --> 00:09:03.060
your tooling.
00:09:03.460 --> 00:09:04.160
Please don't write me.
00:09:04.160 --> 00:09:05.780
I'm not trying to bash on your technology.
00:09:07.780 --> 00:09:08.140
All right.
00:09:08.800 --> 00:09:10.080
Jonathan, also welcome.
00:09:10.320 --> 00:09:10.440
Hi.
00:09:10.580 --> 00:09:14.080
Yeah, I'm not nearly as famous as everyone else in this call.
00:09:14.980 --> 00:09:20.420
I'm more infamous internally at FastAPI Cloud, I would say, for a bunch of things.
00:09:21.000 --> 00:09:23.860
I've heard of emojis or something along the lines of line.
00:09:23.920 --> 00:09:24.160
One Mima way.
00:09:24.300 --> 00:09:25.580
You're just one Mima way.
00:09:25.680 --> 00:09:26.820
Just one Mima way.
00:09:27.020 --> 00:09:27.800
Yeah, that's true.
00:09:28.400 --> 00:09:30.000
We keep piling them up internally.
00:09:30.560 --> 00:09:34.060
But yeah, I used to work with Patrick together for years, also on Strawberry.
00:09:34.360 --> 00:09:35.280
Same library as him.
00:09:35.540 --> 00:09:36.340
That's how I know him.
00:09:36.620 --> 00:09:40.300
And that's why I, well, made a weird sound when you said soap.
00:09:41.320 --> 00:09:44.940
I've been with FastAPI Cloud since EuroPython, actually, the last one.
00:09:45.220 --> 00:09:48.620
I promised Sebastian I would implement server-send events in FastAPI,
00:09:48.720 --> 00:09:54.220
and I haven't started with it yet at all, but somehow I'm still here.
00:09:54.290 --> 00:09:54.840
So that's great.
00:09:55.960 --> 00:10:00.420
Well, actually, yeah, and it was actually like a sneak peek, I guess.
00:10:00.540 --> 00:10:04.280
We already started having a bunch of chats and discussing what we do.
00:10:04.430 --> 00:10:05.980
Should we do it here? Should we do it there?
00:10:06.100 --> 00:10:06.660
What should we do?
00:10:07.140 --> 00:10:11.640
So like, yeah, it's something that is coming to FastAPI probably soon-ish.
00:10:11.800 --> 00:10:14.520
Like there was a lot of things that needed to happen before that.
00:10:14.700 --> 00:10:18.360
Like Patrick is slightly smiley, like, oh no, this is pressure.
00:10:19.740 --> 00:10:23.160
There were some things that needed to happen in FastAPI, as you know, dropping support for
00:10:23.420 --> 00:10:27.480
Pydantic version one or things like that, that just made the internal code so complex.
00:10:28.020 --> 00:10:32.820
And now that it's over, we can actually work more on improving performance, adding features
00:10:33.040 --> 00:10:33.760
and things like that.
00:10:34.220 --> 00:10:42.820
I definitely want to dive into how FastAPI Cloud has sort of influenced the whole FastAPI side of things.
00:10:43.480 --> 00:10:50.780
But I made aware that there is, in fact, an entire website, an entire website dedicated to the meme.
00:10:51.180 --> 00:10:54.680
Yeah. And out in the audience, we get, hey, everyone, is that the guy from the meme?
00:10:54.960 --> 00:10:56.980
And meme is greater than Nobel Prize.
00:10:57.480 --> 00:10:59.040
So, you know what?
00:10:59.460 --> 00:11:00.280
It may be true.
00:11:00.660 --> 00:11:01.220
It may be true.
00:11:01.240 --> 00:11:04.540
I recognize the person saying, this is the guy from the Ming.
00:11:04.720 --> 00:11:05.740
He might be my husband.
00:11:09.140 --> 00:11:09.580
Incredible.
00:11:11.500 --> 00:11:11.840
Incredible.
00:11:12.600 --> 00:11:16.100
All right, well, let's start with FastAPI Cloud,
00:11:16.920 --> 00:11:19.260
and then we'll bring it back around to the FastAPI.
00:11:19.380 --> 00:11:21.300
Let's talk origin story.
00:11:21.540 --> 00:11:23.700
So what is this FastAPI Cloud?
00:11:23.900 --> 00:11:24.240
Nice.
00:11:24.660 --> 00:11:27.600
So if you were looking at the FastAPI Labs website,
00:11:27.660 --> 00:11:29.600
that doesn't really show that much.
00:11:29.660 --> 00:11:33.680
If you click on the join the waiting list that takes you to the website for FastAPI Cloud,
00:11:34.200 --> 00:11:36.720
there we can see this is what we are building.
00:11:36.920 --> 00:11:38.120
This is the thing that we are doing.
00:11:39.120 --> 00:11:40.220
It's actually super simple.
00:11:40.400 --> 00:11:44.540
The funny thing is that the pitch, the explanation of the product is so short.
00:11:44.760 --> 00:11:45.520
So it's one command.
00:11:45.590 --> 00:11:46.600
It's FastAPI Deploy.
00:11:46.960 --> 00:11:51.400
You have a FastAPI app, you just hit FastAPI Deploy, and then it's on the cloud.
00:11:51.410 --> 00:11:52.520
We take care of everything.
00:11:52.590 --> 00:11:57.580
We build a thing, deploy it, handle HTTPS, auto-scaling, all this stuff.
00:11:57.920 --> 00:12:00.760
and then you can just like focus on building the application,
00:12:01.230 --> 00:12:01.580
building apps.
00:12:01.920 --> 00:12:03.760
The funny thing is that it's super short to explain,
00:12:03.880 --> 00:12:06.100
but then building it is so cold, Blake.
00:12:06.220 --> 00:12:07.020
I'm glad it's so short.
00:12:07.220 --> 00:12:08.000
So thanks for being here.
00:12:08.080 --> 00:12:08.960
That was a great show, y'all.
00:12:09.260 --> 00:12:10.040
Well, no, just kidding.
00:12:11.120 --> 00:12:14.960
I think it's a little bit like Jupyter Notebooks
00:12:15.050 --> 00:12:17.960
in that sense that like you all are taking one for the team
00:12:18.620 --> 00:12:21.600
so that other people can have a simple experience.
00:12:22.500 --> 00:12:25.100
Whereas, you know, it's like those Jupyter folks,
00:12:25.130 --> 00:12:27.620
they write tons of TypeScript and do all sorts of things
00:12:27.640 --> 00:12:30.380
that nobody wants to necessarily do in the data science space
00:12:31.040 --> 00:12:32.760
so that you can just drag your widgets around.
00:12:33.000 --> 00:12:33.360
You know what I mean?
00:12:33.500 --> 00:12:35.060
I think that is a great analogy.
00:12:35.360 --> 00:12:39.000
I feel like the deployment space, it's a bit of a mixed bag.
00:12:39.500 --> 00:12:44.540
And I've been really frustrated to the point such that I wrote a book about it,
00:12:45.020 --> 00:12:47.340
that I think about an alternative,
00:12:48.000 --> 00:12:51.240
that I think over the last five plus years,
00:12:51.580 --> 00:12:55.080
it's just trended towards a little more complex, a little more complex.
00:12:56.000 --> 00:12:57.460
could we just add one of these things?
00:12:57.680 --> 00:12:58.760
And oh, now we got these three.
00:12:58.860 --> 00:13:01.920
We need one more thing to like make sure those things are doing, you know what I mean?
00:13:02.500 --> 00:13:07.180
And it's just like, wow, why are there 200 choices in my console to use this?
00:13:07.440 --> 00:13:08.780
Which is like kind of funny, right?
00:13:08.920 --> 00:13:12.100
Because I feel like a lot of these companies started with this, like,
00:13:12.280 --> 00:13:15.300
I don't want to understand all the ins and outs of all the infrastructure
00:13:15.680 --> 00:13:17.400
that comes with the cloud service provider.
00:13:17.580 --> 00:13:19.840
And that's really complicated to understand because I'm an app dev
00:13:19.960 --> 00:13:22.380
and I don't know anything about, you know, whatever, right?
00:13:22.520 --> 00:13:25.400
Now we're like, I don't know, kind of slowly accumulating.
00:13:25.460 --> 00:13:30.480
complexity but i think one of the cool things about what we're building and i like i've worked
00:13:30.480 --> 00:13:35.800
on cloud tooling before is like this is like just spoke for python developers and i think that's like
00:13:35.940 --> 00:13:41.220
quite like unique in that like we are really trying to like bring the bleeding edge and like
00:13:41.240 --> 00:13:45.420
all the new tooling that people are using and making sure that we play well with like uv and
00:13:45.520 --> 00:13:52.180
like i think like the there's a lot of thought and care put into that by the team that's a super good
00:13:52.200 --> 00:13:56.880
point. I mean, I remember Azure came out with like, here's your platform as a service. You just
00:13:57.280 --> 00:14:01.640
upload your web app and we'll just take it and go. And now that thing is so complicated along with
00:14:01.860 --> 00:14:06.160
many, many others, right? It's not just them. It's you've got AWS, you've got Vercel. There's
00:14:06.240 --> 00:14:09.900
lots of things we could point at for, wow, there's a lot of options here, you know?
00:14:09.960 --> 00:14:13.920
And then there are a lot of tools and like, you know, like many tools and many companies are also
00:14:14.040 --> 00:14:18.379
like doing a great job at many of the things that they are doing. But in many cases, it's just so
00:14:18.400 --> 00:14:19.500
complex, it's so complicated.
00:14:19.740 --> 00:14:25.340
You know, like I was, I have always been so, what, so adamant, I think is the word, to
00:14:25.700 --> 00:14:27.580
just teaching people how to use the tools.
00:14:28.000 --> 00:14:33.540
I think I have the most documentation about how to deploy things on your own than any other
00:14:33.760 --> 00:14:33.920
framework.
00:14:34.020 --> 00:14:35.360
I have so much information.
00:14:35.460 --> 00:14:36.940
MARK MANDEL: I hear that all the time from people.
00:14:37.140 --> 00:14:41.100
They say one of the reasons they chose FastAPIs is because how clear the documentation
00:14:41.440 --> 00:14:41.760
was, you know?
00:14:41.760 --> 00:14:44.979
FRANCESC CAMPOY: And then the thing is, you know, like just learning all those concepts
00:14:45.000 --> 00:14:47.520
and learning all the stuff that needs to be learned
00:14:47.750 --> 00:14:48.740
just to deploy something,
00:14:48.810 --> 00:14:50.900
and then you barely have the minimum.
00:14:51.460 --> 00:14:53.480
It's like, this is just too much.
00:14:53.640 --> 00:14:54.740
It's too much complacency.
00:14:54.960 --> 00:14:58.340
I think for me, I guess personally,
00:14:58.520 --> 00:15:00.400
my analogy is that FastAPI Cloud
00:15:00.560 --> 00:15:03.280
is the equivalent of what FastAPI is
00:15:03.350 --> 00:15:05.800
to building web APIs and backend.
00:15:06.140 --> 00:15:08.340
You could do the same with any other framework.
00:15:08.390 --> 00:15:09.580
You could validate data.
00:15:09.650 --> 00:15:10.940
You could generate open API.
00:15:11.070 --> 00:15:12.280
You could have automatic docs,
00:15:12.640 --> 00:15:19.340
But you will probably have to do a lot of the wiring yourself and making sure that it's actually correct and that it doesn't explode, all that stuff.
00:15:19.710 --> 00:15:25.600
That is, you know, like we are trying to do a lot of that work for the final users.
00:15:25.800 --> 00:15:26.840
Yeah, and I think it's great.
00:15:27.260 --> 00:15:36.500
I think it's really nice to just provide this on-ramp because, as you said at the opening, when I asked, you know, what the origin story is just FastAPI deploy.
00:15:37.050 --> 00:15:38.300
That solves so many stories.
00:15:38.580 --> 00:15:42.920
But I'm sure behind the scenes, what happens is just about as simple as that.
00:15:44.280 --> 00:15:44.940
Oh my gosh.
00:15:45.060 --> 00:15:45.720
About that.
00:15:48.460 --> 00:15:51.820
Some of us don't even get to write Python anymore to make all of this happen.
00:15:52.300 --> 00:15:54.480
So speaking about taking one for the team.
00:15:56.040 --> 00:15:57.620
Yeah, that is taking one for a team, right?
00:15:57.740 --> 00:15:58.200
It is.
00:16:00.220 --> 00:16:02.660
This portion of Talk Python To Me is brought to you by us.
00:16:02.980 --> 00:16:07.520
I'm thrilled to announce a brand new app built for developers created by yours truly.
00:16:07.980 --> 00:16:09.140
It's called Command Book.
00:16:09.930 --> 00:16:11.200
You know that thing you do every morning?
00:16:11.880 --> 00:16:14.460
Open up six terminal tabs, CD into this directory,
00:16:14.980 --> 00:16:16.020
activate that virtual environment,
00:16:16.550 --> 00:16:17.960
run the server with --reload.
00:16:18.260 --> 00:16:20.960
Now, CD somewhere else, start the background worker,
00:16:21.360 --> 00:16:23.940
another tab for Docker, another one to tail production logs.
00:16:24.400 --> 00:16:27.120
Every tab just says Python, Python, Python, Docker tail.
00:16:28.220 --> 00:16:29.160
And you're clicking through them going,
00:16:29.620 --> 00:16:30.840
which Python was that again?
00:16:31.260 --> 00:16:32.040
Where my app is running?
00:16:32.620 --> 00:16:35.560
Then sometime later, your dev server silently dies
00:16:35.750 --> 00:16:36.879
because it tried to reload
00:16:36.900 --> 00:16:38.420
while you're in the middle of a code edit,
00:16:39.020 --> 00:16:41.580
unmatched brace, a half-written import, or something.
00:16:42.320 --> 00:16:43.340
Now you're hunting through tabs
00:16:43.360 --> 00:16:45.800
to figure out which process crashed and how to restart it.
00:16:46.280 --> 00:16:47.260
My app, CommandBook,
00:16:47.500 --> 00:16:50.820
gives all of these long-running commands a permanent home.
00:16:51.380 --> 00:16:52.560
You save a command once,
00:16:53.000 --> 00:16:54.180
the working directory, the environment,
00:16:54.500 --> 00:16:55.640
three commands like git pull,
00:16:55.980 --> 00:16:57.640
and from then on, you just click run.
00:16:58.180 --> 00:16:59.540
You can even group commands together
00:16:59.840 --> 00:17:01.640
to start and stop everything for a project
00:17:01.880 --> 00:17:02.520
with a single click.
00:17:02.960 --> 00:17:05.040
It also has what I call honey badger mode,
00:17:05.260 --> 00:17:06.439
auto restart on crash.
00:17:07.220 --> 00:17:09.640
so when your dev server goes down mid-reload,
00:17:10.199 --> 00:17:12.079
Command Book just brings it right back up
00:17:12.360 --> 00:17:14.400
and does so over and over until the code is fixed.
00:17:15.020 --> 00:17:16.819
It also detects URLs from your output
00:17:17.079 --> 00:17:19.400
so you're never scrolling through thousands of lines of logs
00:17:19.600 --> 00:17:21.560
just to figure out how to reopen your web app.
00:17:22.079 --> 00:17:23.780
And it shows you uptime, memory usage,
00:17:24.120 --> 00:17:25.959
and all sorts of cool things about your process.
00:17:26.660 --> 00:17:28.640
The whole thing is a native macOS app.
00:17:28.780 --> 00:17:31.200
No Electron, no Chromium, just 21 megs.
00:17:31.640 --> 00:17:32.960
And it comes with a full CLI
00:17:33.180 --> 00:17:35.040
so anything you've configured in the UI,
00:17:35.420 --> 00:17:37.900
you can fire off from your terminal with just a single command.
00:17:38.440 --> 00:17:41.580
Right now, it's macOS only, but if there's enough interest,
00:17:41.840 --> 00:17:43.840
I'll build a Windows version too, so let me know.
00:17:44.660 --> 00:17:48.580
Please check it out at talkpython.fm/commandbook app.
00:17:49.140 --> 00:17:51.640
Download it for free, level up your developer workflow.
00:17:52.080 --> 00:17:53.720
The link is in your podcast player's show notes.
00:17:54.320 --> 00:17:56.380
That's talkpython.fm/commandbook.
00:17:56.580 --> 00:17:58.500
I really hope you enjoy this new app that I built.
00:18:00.320 --> 00:18:02.540
Let's save the internals for a little bit later.
00:18:02.940 --> 00:18:04.440
Maybe what we could do right now,
00:18:04.540 --> 00:18:12.300
Maybe we could do a bit of a walkthrough of just kind of what it's like to set up an app from scratch, right?
00:18:12.480 --> 00:18:12.700
Nice.
00:18:12.900 --> 00:18:20.220
I see that uv is here, which is, I've been certainly an advocate for uv in all sorts of deployment,
00:18:20.260 --> 00:18:25.380
but especially when you have like repeated build type of scenarios for like Docker,
00:18:26.060 --> 00:18:31.680
Docker Compose or Kubernetes or whatever, uv makes that stuff so much faster and so on.
00:18:31.780 --> 00:18:37.140
So who would like to be my guide that just kind of talks us through what it means to set up a new project here?
00:18:37.300 --> 00:18:41.500
I mean, there is like this really nice command that Savannah built, just FastAPI new,
00:18:41.920 --> 00:18:44.960
which I think is something like, I don't know, like super helpful.
00:18:45.160 --> 00:18:46.660
What does FastAPI new do?
00:18:46.880 --> 00:18:51.540
Like, is that kind of a cookie cutter-esque experience or what is it?
00:18:51.600 --> 00:18:52.080
Yes, exactly.
00:18:52.160 --> 00:18:56.960
At the moment, Onesco holds a super basic FastAPI application using uv.
00:18:57.360 --> 00:19:00.080
It also installs dependencies, creates a folder, everything that you need.
00:19:00.440 --> 00:19:03.240
In future, I think we're going to plan support for templates
00:19:03.500 --> 00:19:05.940
so you can build multiple kind of things as well.
00:19:06.210 --> 00:19:08.840
But for now, it's just basically just uv FastAPI new,
00:19:09.220 --> 00:19:10.640
sorry, uvx FastAPI new,
00:19:10.910 --> 00:19:12.540
and then that scaffolds the project for you.
00:19:12.900 --> 00:19:14.680
I don't know if you want to try it live or...
00:19:14.700 --> 00:19:15.440
No, go ahead.
00:19:15.580 --> 00:19:17.980
Just, I would think it might disrupt you.
00:19:18.030 --> 00:19:19.080
Just let's talk us through it.
00:19:19.240 --> 00:19:19.920
It could work.
00:19:20.240 --> 00:19:21.740
I'm just going to put that out there.
00:19:21.880 --> 00:19:23.000
I'll tell you the most insane,
00:19:23.330 --> 00:19:25.320
like let's do that live on the podcast experience.
00:19:25.520 --> 00:19:28.160
I'm pretty sure, yeah, this is definitely the most insane.
00:19:28.620 --> 00:19:36.320
I had Matthew Rocklin on from Coiled, and those guys are all about like, hey, we're going to scale up like a bunch of available servers for you, right?
00:19:36.700 --> 00:19:37.940
So that you can do your data science.
00:19:38.020 --> 00:19:41.000
Like I want to do some ML thing, and it needs 500 servers.
00:19:41.600 --> 00:19:45.520
So during the podcast, he's, oh, let me just spin up 2,000 EC2 instances.
00:19:45.800 --> 00:19:46.060
Hold on.
00:19:47.020 --> 00:19:49.040
And then we ran some code on it during the show.
00:19:49.100 --> 00:19:50.200
And he's like, oh, let's try that on ARM.
00:19:50.380 --> 00:19:53.040
And then spin up another 2,000 on ARM Linux machines.
00:19:53.120 --> 00:19:54.180
I'm like, okay, that's nuts.
00:19:55.440 --> 00:19:55.840
But let's just.
00:19:56.420 --> 00:19:57.180
That's a lot of power.
00:19:57.260 --> 00:20:01.960
So I was impressed, but Patrick, sorry, I kind of did realty there.
00:20:02.500 --> 00:20:02.980
Let's talk through it.
00:20:03.020 --> 00:20:08.260
Yeah, so you do uvx FastAPI app, FastAPI new, then you specify the name of the application.
00:20:08.740 --> 00:20:10.080
And that's almost there.
00:20:10.080 --> 00:20:13.240
You just need one more command to deploy, which is FastAPI deploy.
00:20:13.640 --> 00:20:17.660
The first time it's going to ask you to log in or join the waiting list if you haven't been invited yet.
00:20:17.940 --> 00:20:18.940
It's still in beta.
00:20:19.500 --> 00:20:20.900
And then you follow the steps.
00:20:21.200 --> 00:20:24.640
So like FastAPI deploy, log in, decide the team.
00:20:25.040 --> 00:20:27.820
If you have multiple teams, design the application name,
00:20:28.220 --> 00:20:31.020
and then you wait a few seconds and the application is going to be live.
00:20:31.100 --> 00:20:36.220
And just to be clear, FastAPI new is not required if you already have a FastAPI app.
00:20:36.520 --> 00:20:39.780
If you've already written your own code and you have your application,
00:20:40.120 --> 00:20:42.940
you can just go right into logging in and deploying.
00:20:43.440 --> 00:20:46.120
This is just so that if you're starting something new,
00:20:46.500 --> 00:20:49.900
you don't have to do any thinking about all the right things that need to be there.
00:20:50.180 --> 00:20:52.160
So this is more of a greenfield application.
00:20:52.880 --> 00:20:53.960
I'm bootstrapping a project.
00:20:54.240 --> 00:20:56.660
Right, right, because you want to have the best structure.
00:20:57.560 --> 00:20:58.980
Now, it uses uv.
00:20:59.420 --> 00:21:00.240
It is nodes required.
00:21:00.420 --> 00:21:03.900
Yeah, I was going to say, do I have to use the uv project management type of thing?
00:21:04.190 --> 00:21:08.100
Do I have to use the uv.lock files and uv add uv sync?
00:21:08.360 --> 00:21:09.480
Can I do requirements.txt?
00:21:09.640 --> 00:21:10.380
What's the story there?
00:21:10.500 --> 00:21:13.320
Yes, so we support uv with uv lock.
00:21:13.390 --> 00:21:16.860
We also support the, forget the name, the other, the PyLock file.
00:21:17.200 --> 00:21:19.580
And we also support plain requirements.txt.
00:21:19.980 --> 00:21:22.200
And maybe something else, I don't know, Jonathan, can you?
00:21:22.700 --> 00:21:23.720
PyLock's pretty new, right?
00:21:23.900 --> 00:21:26.520
I think Brett Cannon just got that out pretty recently, right?
00:21:26.820 --> 00:21:27.680
Brett was pretty excited.
00:21:27.980 --> 00:21:28.360
I know.
00:21:29.240 --> 00:21:29.960
Implemented that.
00:21:30.240 --> 00:21:30.660
Oh, was he?
00:21:30.850 --> 00:21:31.620
Okay, I'm sure he was.
00:21:31.800 --> 00:21:32.160
That's awesome.
00:21:32.260 --> 00:21:33.740
He put years of work into that.
00:21:33.860 --> 00:21:38.100
And he also said that one of the motivations was also like, you know, like cloud providers.
00:21:38.560 --> 00:21:39.200
So it's like, yes.
00:21:40.600 --> 00:21:49.220
The other thing is like, you know, if you use other different package managers, if they use the standard pyproject.toml format, that will also be supported.
00:21:49.500 --> 00:21:56.300
That means that, you know, like if you use PDM or if you use poetry with one of the recent versions, like that will work.
00:21:56.600 --> 00:22:03.100
If you use a very old version of poetry or like you use some other strange package manager or something, that will probably be problematic.
00:22:03.500 --> 00:22:08.440
But for like most of the use cases that use the standard package formats, it will just work.
00:22:08.640 --> 00:22:14.080
And if you use uv, then like you're going to have the best experience because we are fans of uv and Astral.
00:22:14.220 --> 00:22:19.380
They've definitely put a dent in the way that sort of Python gets started and making that a lot easier.
00:22:19.490 --> 00:22:20.500
So it totally makes sense.
00:22:21.310 --> 00:22:28.920
And also, I noticed, speaking of uv, that there's, at least in the recommended way, or the way in the docs, let's say,
00:22:29.580 --> 00:22:32.240
it doesn't say, here's how you install FastAPI.
00:22:32.650 --> 00:22:41.660
You just, here's how you run FastAPI-new, leveraging uv, which then will silently install and manage.
00:22:42.120 --> 00:22:43.260
All right, that's pretty neat.
00:22:43.420 --> 00:22:46.960
That helps you guys tell a simpler story, right?
00:22:47.350 --> 00:22:51.380
Instead of, here's how you create the virtual environment to install our thing and so on, you know?
00:22:51.380 --> 00:22:56.340
The idea is to make it like, as I was saying, just super simple for people just to start from scratch.
00:22:56.680 --> 00:23:00.760
Like no idea how to create an app, how to start, how to create an environment.
00:23:00.890 --> 00:23:03.340
It's just you run this command and you're off to go.
00:23:03.760 --> 00:23:06.200
Off to the races, I'm missing sands.
00:23:06.820 --> 00:23:09.460
Anyway, that's what Colombians do.
00:23:09.920 --> 00:23:17.880
But then if you already have an app, you have like, you know, like anything with FastAPI standard installed, then like that also just works.
00:23:18.010 --> 00:23:21.000
And Savannah, you pointed out that it doesn't have to be a new project.
00:23:21.620 --> 00:23:23.860
If you want to start from an existing one, that's totally fine.
00:23:24.300 --> 00:23:28.820
But what do I got to do if I'm starting from, if I'm migrating an existing one?
00:23:29.040 --> 00:23:30.320
Like how easy or hard is this?
00:23:30.580 --> 00:23:36.860
I have some like legacy project demo apps I've built at other companies I've worked with that have used FastAPI.
00:23:37.120 --> 00:23:44.460
And I literally just ran like FastAPI login and then FastAPI deploy and it just worked, which felt really magical.
00:23:44.740 --> 00:23:58.860
Right. Like I think that's like, I don't know, like having worked on cloud products for quite a while, like I think one of the biggest gaps is like the just I don't know, like the disparity between like my local dev environment and what is actually like lives up in the cloud somewhere.
00:23:59.360 --> 00:24:08.160
And so being able to just run one command and having the project as it exists on my machine go and work somewhere without having to think about like the infrastructure.
00:24:08.340 --> 00:24:14.920
And of course, like, you know, we want to be like amenable to folks who do want a little bit, you know, like higher touch.
00:24:15.480 --> 00:24:19.280
But we also want to work for people who are like learning FastAPI and Python, right?
00:24:19.400 --> 00:24:22.240
Like educators and people that are teaching Python.
00:24:22.420 --> 00:24:26.600
I think this is like something that you've had some interest in as well from those folks.
00:24:26.720 --> 00:24:44.200
Yeah, I was just listening to the Teaching Python podcast books just the other day and thinking, you know, like this, when I look at this, I know this is not necessarily your focus, but certainly people who are trying to teach a class, be it college class or high school class or whatever.
00:24:44.840 --> 00:24:49.020
And if you build anything on the web, the next question is, this is cool.
00:24:49.340 --> 00:24:50.420
How do I share it with people?
00:24:50.620 --> 00:24:51.800
And then they're like, oh, no.
00:24:52.420 --> 00:24:53.500
Oh, no.
00:24:53.720 --> 00:24:54.080
Hold on.
00:24:54.280 --> 00:24:55.560
Like coding boot camps, right?
00:24:55.640 --> 00:25:01.780
Like if you're teaching someone how to write Python or how to build an API with FastAPI,
00:25:02.110 --> 00:25:06.480
like actually setting up the environment for them to deploy is not part of it, right?
00:25:06.720 --> 00:25:08.660
Like that's not actually part of the curriculum.
00:25:08.840 --> 00:25:12.880
It's like this peripheral thing that ends up eating up a bunch of the educator's time or
00:25:12.890 --> 00:25:16.680
the student's time trying to understand both like how to write code and then also understand
00:25:16.840 --> 00:25:17.240
cloud stuff.
00:25:17.520 --> 00:25:20.380
And that's like a lot to ask people when they're fresh up the gate.
00:25:20.520 --> 00:25:23.720
I feel the same way about like tutorials and stuff at conferences.
00:25:24.200 --> 00:25:25.240
Yeah, totally.
00:25:25.780 --> 00:25:29.820
Yeah. Or training sessions. If you're doing like corporate training or like, they're all like,
00:25:29.940 --> 00:25:36.120
Oh, well, let's get everybody's machine working. There goes an hour and whatever. But yeah,
00:25:36.140 --> 00:25:40.520
if you can just say, look, I think when you're either, when you're trying to learn something,
00:25:40.960 --> 00:25:45.860
you'll be it through school or on your own or through these like more structured ways,
00:25:46.180 --> 00:25:50.760
like bootcamps and training and so on. I think if it's not the main purpose,
00:25:51.380 --> 00:25:56.200
I feel so often there's like, we're going to do 20 steps for four hours before you get any sort of
00:25:56.520 --> 00:26:01.080
reward of what you've done. And if you can go, okay, do you have it running? Okay, now you run
00:26:01.180 --> 00:26:04.880
this command. Look, now it's on the internet. Like, oh, wait, awesome. I got an app on the internet.
00:26:05.140 --> 00:26:09.780
Everybody look at me. You know what I mean? And I think shortening that cycle to where people can
00:26:10.000 --> 00:26:14.780
have that aha moment. And then later they can dive into like, well, how is it really working? And what
00:26:14.780 --> 00:26:21.340
do we really need to understand? But that quick iteration cycle, especially in the early parts of
00:26:21.360 --> 00:26:24.980
in new tech. It's really important. But also, you know, like down the line as well, I think,
00:26:25.280 --> 00:26:29.400
like, I don't know, there are so many things that I have been wanting to build and I don't,
00:26:29.780 --> 00:26:34.320
but I didn't because it was just so complex to deploy stuff. You know, like knowing,
00:26:34.680 --> 00:26:39.560
knowing how to do the whole thing, how to set up the clusters, the machines, install the Linux
00:26:40.299 --> 00:26:44.060
systems, deploy the cluster, whatever, like all that stuff, deploy the things,
00:26:44.360 --> 00:26:49.940
handling load balancers and HTTPS. I'm like, you know, like I know how to do that. I built one of
00:26:49.960 --> 00:26:54.400
the most popular websites teaching how to use Docker Swarm, which was like the contender
00:26:54.620 --> 00:26:56.160
before Kubernetes won everything.
00:26:56.580 --> 00:26:56.960
I like it.
00:26:57.380 --> 00:27:02.520
But still, it's just so complicated, like doing all those steps that are like, yeah, no, I'll
00:27:02.660 --> 00:27:03.380
just not do it.
00:27:04.000 --> 00:27:04.780
Like some other day.
00:27:05.360 --> 00:27:09.500
Now I can just like play around and do random stuff and just like deploy when it just works.
00:27:09.860 --> 00:27:11.300
It is, I really like that.
00:27:11.300 --> 00:27:16.220
I guess like coming back to that, like taking one for the team point earlier, like I feel
00:27:16.240 --> 00:27:20.860
like building Python tooling. It's kind of like taking one for the team sometimes because you have
00:27:20.860 --> 00:27:25.920
these folks that are like, you know, brand new to Python. Like Python is an extremely approachable
00:27:26.000 --> 00:27:30.160
language for people who are new to writing code. But then, you know, we also want to make FastAPI
00:27:30.420 --> 00:27:34.760
cloud work for someone that's building like an enterprise grade application, right? And so like,
00:27:35.240 --> 00:27:41.159
like pretty wide spectrum of folks with like a million different use cases and different types
00:27:41.180 --> 00:27:45.760
of applications they want to deploy with different constraints and like security stuff.
00:27:46.180 --> 00:27:49.540
And like, so yeah, I think, I don't know, maybe that's just like Python tooling.
00:27:50.060 --> 00:27:53.600
It's a lot of work, I guess, to like build something that works for the masses.
00:27:54.000 --> 00:27:57.000
Yeah, well, it's certainly tough to make something that feels simple,
00:27:57.520 --> 00:28:01.260
but it's not overly simplistic, you know, that can actually solve the problems.
00:28:01.540 --> 00:28:04.200
Has the right knobs for the right users too, right?
00:28:04.300 --> 00:28:07.920
I would argue we're not only trying to do it simple and easy.
00:28:08.220 --> 00:28:12.440
I feel like we're choosing a particular flavor of simple, which is...
00:28:13.400 --> 00:28:14.880
We have this discussion a few times.
00:28:15.080 --> 00:28:18.620
It's like, if you make a cloud, how do we make it feel Pythonic?
00:28:18.760 --> 00:28:20.480
What does that mean in a cloud setting?
00:28:20.900 --> 00:28:25.340
We talk about Pythonic libraries, Pythonic coding style in the community a lot.
00:28:25.700 --> 00:28:29.620
And now we kind of try to transfer that flavor, that feeling to the cloud
00:28:29.700 --> 00:28:33.720
and make everything around that feel just like we want our libraries to feel.
00:28:34.020 --> 00:28:36.960
So you feel at home as a Python developer and it just feels right.
00:28:37.280 --> 00:28:40.160
So that's extra step on top of making it simple.
00:28:40.560 --> 00:28:41.560
And we discuss that a lot.
00:28:41.820 --> 00:28:42.740
That's how I feel about it.
00:28:42.770 --> 00:28:43.160
I love it.
00:28:43.170 --> 00:28:46.860
I think it's one of the coolest things about this team.
00:28:47.440 --> 00:28:50.280
Like, you know, like people are being able to hear a few of us.
00:28:50.360 --> 00:28:55.040
There's like, there are like a bunch of others, but like that each one of us is so passionate
00:28:55.230 --> 00:28:57.320
about the things that we are working on.
00:28:57.760 --> 00:29:01.780
So like, you know, like each one of us is trying to make the best out of the things that
00:29:01.960 --> 00:29:02.540
we are building.
00:29:02.860 --> 00:29:07.040
And then like, we are so passionate about the thing that we care about and that we are building.
00:29:07.160 --> 00:29:10.740
that I think that ends up being an amazing result.
00:29:11.000 --> 00:29:12.360
For example, the CLI.
00:29:12.660 --> 00:29:16.960
We wanted to have some specific, you know, like behavior,
00:29:17.140 --> 00:29:18.140
some look and feel.
00:29:18.220 --> 00:29:22.200
And like we wanted to be able to have like the best kind of CLIs.
00:29:22.320 --> 00:29:25.700
So Patrick went ahead and built this bunch of tooling
00:29:25.840 --> 00:29:27.380
that we needed to be able to have it
00:29:27.460 --> 00:29:28.720
and like made it open source and everything.
00:29:29.160 --> 00:29:32.780
So we could have this great experience when working with CLIs.
00:29:33.140 --> 00:29:35.859
Jonathan recently was doing so much stuff
00:29:35.880 --> 00:29:38.580
about the something that caches and handling security,
00:29:38.940 --> 00:29:40.680
making sure that everything was super secure,
00:29:41.060 --> 00:29:42.420
super fast, super snappy.
00:29:42.800 --> 00:29:46.220
You know, like Alejandra is super careful about all the UI.
00:29:46.740 --> 00:29:48.820
Martin is super careful about all the infra.
00:29:49.200 --> 00:29:52.940
You know, it's like this passionate mess,
00:29:53.320 --> 00:29:54.420
which is a word I just made up.
00:29:57.340 --> 00:29:58.600
This, Alejandra goes and says,
00:29:58.640 --> 00:30:01.220
like, this thing doesn't have the proper margins.
00:30:01.320 --> 00:30:02.920
We need to increase this a little bit.
00:30:02.980 --> 00:30:04.340
I don't like it.
00:30:04.360 --> 00:30:05.360
She just goes and fixes it.
00:30:05.600 --> 00:30:06.100
The same with Marvin.
00:30:06.190 --> 00:30:09.340
He says, like, we need to have, like, this sort of thing in infrastructure.
00:30:09.550 --> 00:30:12.040
And, like, just comes and tells me, hey, we are doing this.
00:30:12.140 --> 00:30:12.800
And he's like, yes, sir.
00:30:13.340 --> 00:30:16.260
Like this with the OpenVPN, like, Unix, for example,
00:30:16.350 --> 00:30:18.100
that is mainly focused on the open source,
00:30:18.320 --> 00:30:21.960
is constantly looking at all the discussions, PRs, conversations,
00:30:22.340 --> 00:30:24.840
making sure that everything that we do, that doesn't.
00:30:24.840 --> 00:30:26.300
So why, you know, like, there have been, like,
00:30:26.810 --> 00:30:31.159
recently way more releases of FastAPI friends of the open source projects
00:30:31.620 --> 00:30:33.520
and very fast book fixes,
00:30:34.150 --> 00:30:37.060
very fast responses to handle everything for the community.
00:30:37.600 --> 00:30:40.360
Now we actually have people that is paying attention constantly
00:30:40.720 --> 00:30:41.460
to what is happening,
00:30:42.320 --> 00:30:43.360
what are the things that we have to do,
00:30:43.700 --> 00:30:46.620
and that really care about that part as well.
00:30:46.650 --> 00:30:50.220
So I think this extreme care about what we are doing.
00:30:50.440 --> 00:30:52.180
You know, like Savannah is making Python.
00:30:53.060 --> 00:30:56.860
This detail that each one of us cares so, so much
00:30:57.100 --> 00:30:58.500
about each one of the things that we build,
00:30:59.540 --> 00:31:01.620
making sure that the product is actually amazing.
00:31:01.840 --> 00:31:03.140
It's as good as it can be,
00:31:03.280 --> 00:31:05.500
and we can all feel at home when...
00:31:06.940 --> 00:31:08.920
I get so excited for talking about it
00:31:08.980 --> 00:31:12.140
because I really enjoy the end result of the product
00:31:12.220 --> 00:31:13.280
and of being able to use it.
00:31:13.820 --> 00:31:15.020
I would use it in the end.
00:31:15.140 --> 00:31:16.420
I would use to work with it.
00:31:16.800 --> 00:31:17.560
It's super simple.
00:31:17.660 --> 00:31:18.300
Yeah, that's awesome.
00:31:18.480 --> 00:31:19.680
Hey, let me adjust your mic real quick.
00:31:20.140 --> 00:31:21.840
I think it was like ducking,
00:31:22.300 --> 00:31:23.080
ducking out a little bit.
00:31:23.080 --> 00:31:24.000
We just went through a lot,
00:31:24.140 --> 00:31:26.399
a lot of content and a lot of sweating
00:31:26.420 --> 00:31:31.380
because your microphone went through like six different stages of weirdness.
00:31:31.720 --> 00:31:39.180
I think that really leads to like something I wanted to talk about is just what impact has this had on FastAPI?
00:31:39.180 --> 00:31:44.640
And before you jump in and answer that question, everyone, there's especially I think with Astral,
00:31:44.820 --> 00:31:49.920
but with because they've had so much success, there's been an undercurrent of concern of like,
00:31:49.920 --> 00:31:53.200
oh, my gosh, commercialism is getting into our open source.
00:31:53.480 --> 00:31:56.440
And what if it pollutes it and causes these negative aspects?
00:31:57.560 --> 00:32:02.500
But just hearing all of the energy around FastAPI with so many people,
00:32:03.140 --> 00:32:05.580
because of FastAPI Cloud, that's super neat.
00:32:05.770 --> 00:32:07.260
So I wanted to throw out to you all,
00:32:07.660 --> 00:32:12.100
how has this building FastAPI Cloud and the existence of FastAPI Cloud
00:32:12.300 --> 00:32:14.840
been giving back to FastAPI, I guess?
00:32:14.980 --> 00:32:17.560
I'm waiting to see if someone will speak FastAPI.
00:32:18.760 --> 00:32:20.580
I'm always the one that is speaking the most.
00:32:22.400 --> 00:32:23.920
I mean, it might be your project.
00:32:24.220 --> 00:32:25.680
Like, you may have started the project.
00:32:25.900 --> 00:32:26.600
Yeah, maybe so.
00:32:27.020 --> 00:32:31.220
Like, last year, I had, like, a few keynotes in some picons in different places.
00:32:31.320 --> 00:32:41.660
And, like, one of the key points that I wanted to bring was this idea that I'm trying to show that, in many cases, people worry about the boss factor.
00:32:41.960 --> 00:32:43.580
And the boss factor is just this idea.
00:32:43.840 --> 00:32:45.180
Yes, yes, I've heard this, yes.
00:32:45.320 --> 00:32:51.320
Yeah, you know, like, the boss factor is the idea that, oh, what happens if, like, there's one person doing this work?
00:32:51.420 --> 00:32:54.180
What happens if a boss runs over this person?
00:32:54.860 --> 00:32:58.260
And there's so much worry about this boss factor.
00:32:58.420 --> 00:33:01.960
It's sort of a morbid analogy, but I understand, right?
00:33:02.040 --> 00:33:06.980
Like, what will happen to the open source project if the maintainer vanishes for some reason, right?
00:33:07.140 --> 00:33:07.460
Exactly.
00:33:08.080 --> 00:33:11.160
But, you know, like, it also applies to projects and to many other different things.
00:33:11.600 --> 00:33:18.760
But what I think is that it's a disproportionate amount of attention to this detail of the boss factor.
00:33:19.180 --> 00:33:30.300
And I think every time people talk about the boss factor, you know, like one of my points in what I was trying to say in these talks was I would like people to think about the boss ticket factor.
00:33:30.720 --> 00:33:32.140
Who is paying for those tickets?
00:33:32.400 --> 00:33:34.140
It doesn't matter how big is the team.
00:33:34.440 --> 00:33:37.960
You know, like you have seen Google, Amazon, Meta, all the big ones.
00:33:38.240 --> 00:33:39.960
They don't have a small boost factor.
00:33:40.020 --> 00:33:45.100
They have a lot of people in their payroll and still they finish products.
00:33:45.340 --> 00:33:46.340
They just cancel them.
00:33:46.660 --> 00:33:48.940
Open source or private or whatever.
00:33:49.620 --> 00:33:51.820
is not the main factor
00:33:52.680 --> 00:33:54.640
defining the success of a project,
00:33:55.080 --> 00:33:57.240
being it commercial or open source of any type,
00:33:57.700 --> 00:34:00.280
is not really how many people are behind it.
00:34:00.640 --> 00:34:02.960
It's more of what is the value
00:34:03.140 --> 00:34:05.380
that whoever is putting the effort to keep it alive
00:34:05.840 --> 00:34:07.660
is getting from putting all that effort.
00:34:07.980 --> 00:34:09.020
It could be just satisfaction.
00:34:09.419 --> 00:34:10.600
It could be like open source,
00:34:10.679 --> 00:34:13.240
like, oh, I feel so good that I'm contributing to society.
00:34:13.360 --> 00:34:13.940
And that is valid.
00:34:14.600 --> 00:34:15.440
It doesn't pay the rent,
00:34:15.899 --> 00:34:16.899
but it's still valid.
00:34:17.080 --> 00:34:18.100
It might last for a while.
00:34:18.440 --> 00:34:25.820
But then also like, you know, like when you see like there are so many Python projects, so many Python, so many open source projects that can do well or can do bad.
00:34:26.000 --> 00:34:28.300
And it doesn't really depend on how many people they have.
00:34:28.820 --> 00:34:40.780
And when you are using a project, when you're using an open source project or when you are using a product of any type, I will encourage you to think about what is the best ticket factor of this project?
00:34:41.260 --> 00:34:47.500
What are the things that whoever is building this is receiving in exchange for giving it away?
00:34:47.940 --> 00:34:51.840
So like, you know, like what are they expecting to sell you at some point?
00:34:52.300 --> 00:34:54.500
Or what are they receiving in exchange?
00:34:55.080 --> 00:34:58.520
You know, for example, Bun, the JavaScript runtime.
00:34:58.820 --> 00:35:00.880
Like it was like, we don't know what they're going to sell.
00:35:01.040 --> 00:35:06.940
But now, you know, Cloud and Anthropic really want to have like this thing keep working because they are using it internally.
00:35:07.000 --> 00:35:09.360
So you can say like, OK, I'm going to use it.
00:35:09.420 --> 00:35:10.340
I'm going to use it for free.
00:35:10.500 --> 00:35:15.840
I know that what they receive for me using is just like that they just really want it.
00:35:15.980 --> 00:35:17.740
So I can just like, whenever you are using Bun,
00:35:17.860 --> 00:35:20.380
you are getting, now you are getting free services
00:35:20.600 --> 00:35:21.460
from Anthropic, that's it.
00:35:21.860 --> 00:35:23.940
But you know, like every time you are using a project,
00:35:24.040 --> 00:35:26.680
you can think about why are people receiving an exchange
00:35:27.080 --> 00:35:28.700
for giving this away for me?
00:35:28.960 --> 00:35:31.100
This is like the thing that I would like people
00:35:31.340 --> 00:35:33.800
to think about, you know, like also like
00:35:34.020 --> 00:35:35.120
how can they give back?
00:35:35.280 --> 00:35:37.860
Maybe they can actually contribute to that community
00:35:38.080 --> 00:35:38.660
or to that project.
00:35:38.800 --> 00:35:40.440
There are many ways and in many cases,
00:35:41.140 --> 00:35:43.260
the thing that is needed the most is just like help
00:35:43.620 --> 00:35:45.420
and work, just answering questions and issues.
00:35:47.260 --> 00:35:52.320
this portion of talk python enemy is brought to you by us i'm excited to talk about my first solo
00:35:52.520 --> 00:35:57.780
book talk python in production it's an inside look at how we host all the talk python sites
00:35:58.120 --> 00:36:03.440
apis mobile apps and way more here's the thing i believe most hosting stories sold to developers
00:36:03.520 --> 00:36:08.720
and data scientists are way over complicated and overpriced you've heard me say you're not google
00:36:09.000 --> 00:36:13.859
you're not netflix so you shouldn't run your infrastructure the way they do but if not that
00:36:13.960 --> 00:36:20.140
then what? This book is both a blueprint for what I chose for Talk Python and a story arc of 10 years
00:36:20.140 --> 00:36:25.680
of running my own infrastructure from a complete newbie, apprehensive to Linux, to some pretty
00:36:25.860 --> 00:36:31.940
neat infrastructures code DevOps. It covers Docker, Nginx, Let's Encrypt, self-hosted analytics and
00:36:32.140 --> 00:36:37.880
monitoring, CDN setup, framework migrations, and a whole philosophy that I've termed stack native,
00:36:38.460 --> 00:36:42.980
keeping things streamlined, powerful, and free of cloud lock-in. And it's more than just your
00:36:43.000 --> 00:36:48.120
standard tech book. It comes with code and figure galleries on GitHub, a discussion forum, and
00:36:48.500 --> 00:36:54.020
something unique, over an hour of audio readers briefs, short conversations that bookend each
00:36:54.460 --> 00:36:59.920
chapter to prime your focus or broaden your takeaways. Oh, and 0% of this book was written
00:37:00.040 --> 00:37:03.960
by AI. Every word is mine, written over the course in high months, for better or worse.
00:37:04.500 --> 00:37:09.820
I've made the first third of the book available for free online. After that, you can grab the DRM
00:37:09.840 --> 00:37:15.380
free EPUB and Kindle editions. And I'm working on a paperback edition as well. Please check it out
00:37:15.460 --> 00:37:20.740
at talkpython.fm/DevOps, or just click book in the nav bar on the website. It's a great way to
00:37:20.820 --> 00:37:25.040
support the podcast. And I hope it changes a bit how you think about running your apps in production.
00:37:26.040 --> 00:37:30.480
Kind of related to what you're saying, I think one of the angles that I really appreciate about
00:37:30.560 --> 00:37:36.160
the way we think about FastAPI and FastAPI Cloud is like where like a lot of our team was involved
00:37:36.180 --> 00:37:41.020
in open source before coming to work at FastAPI Cloud on various projects around the Python
00:37:41.260 --> 00:37:42.240
ecosystem, outside of Python.
00:37:42.740 --> 00:37:48.140
And I think all of us have deep appreciation and understanding of the value of open source
00:37:48.780 --> 00:37:53.460
and really, really try and build in a way that is like, I mean, Sebastian, you've talked
00:37:53.560 --> 00:37:56.540
about this a lot, but solving a real problem for folks, right?
00:37:56.840 --> 00:38:01.920
And so FastAPI Cloud is sort of this extension of this open source ecosystem people would
00:38:01.980 --> 00:38:02.380
be using.
00:38:03.680 --> 00:38:05.120
FastAPI Cloud may be an option.
00:38:05.500 --> 00:38:07.580
Maybe someone picks some other cloud for some reason.
00:38:07.970 --> 00:38:10.580
I don't think like, I think we're all very mindful of that.
00:38:10.790 --> 00:38:12.520
But like the angle that's very cool, I think,
00:38:12.600 --> 00:38:15.600
is that like, because we all work at FastAPI Cloud,
00:38:15.880 --> 00:38:17.580
like I know that I personally have time,
00:38:17.860 --> 00:38:19.220
more time for my open source work
00:38:19.380 --> 00:38:21.420
and my employer understands the value
00:38:21.560 --> 00:38:22.540
of my open source work,
00:38:23.020 --> 00:38:25.160
which isn't that positive for the open source community.
00:38:25.290 --> 00:38:27.300
Like I get to work on CPython sometimes
00:38:27.820 --> 00:38:29.780
and I have, you know, the bandwidth
00:38:29.950 --> 00:38:31.480
to go and do my steering council work
00:38:31.540 --> 00:38:32.880
or upcoming release management work.
00:38:33.300 --> 00:38:34.880
I understand like this sort of like,
00:38:35.420 --> 00:38:39.200
tempering, like open source, commercial, bad, all bad.
00:38:39.400 --> 00:38:39.940
It's not all bad.
00:38:40.060 --> 00:38:41.920
It's actually like really good in a lot of cases
00:38:42.280 --> 00:38:43.740
for folks to build business.
00:38:43.920 --> 00:38:46.320
Look at uv for an example to hold up, right?
00:38:46.420 --> 00:38:47.700
Astral, yeah, yeah, totally.
00:38:47.860 --> 00:38:48.160
Yeah, yeah.
00:38:48.340 --> 00:38:50.180
I think there are some really good examples of this.
00:38:50.370 --> 00:38:52.900
So I think like that's another angle that,
00:38:52.980 --> 00:38:55.480
I mean, I really, I get a lot of energy out of our team
00:38:55.890 --> 00:38:57.380
because we all, I don't have to,
00:38:57.630 --> 00:38:59.220
I don't have to fight the open source battle
00:38:59.580 --> 00:39:00.860
at FastAPI Cloud.
00:39:01.160 --> 00:39:02.080
I think that's really cool.
00:39:02.260 --> 00:39:03.620
I do think that's super cool as well.
00:39:03.660 --> 00:39:05.260
Let me put out two examples for you.
00:39:05.340 --> 00:39:11.840
here that I think everyone will be aware of as sort of to add to what Sebastian was saying is
00:39:12.140 --> 00:39:17.500
look how much Apple freaked out when Steve Jobs died and how many people work at Apple, right?
00:39:17.940 --> 00:39:23.040
Like that was still like, oh my gosh. But, you know, I think there's, they're hanging in there.
00:39:23.140 --> 00:39:27.920
They're going to be probably making it. They are not in our business. I tell you what,
00:39:27.950 --> 00:39:35.300
they got some of my money. That's for sure. But also, you know, look at Flask, right? Armin
00:39:35.500 --> 00:39:41.000
drifted away, which is totally fine. And David Lord and Pallets picked it up and kept running,
00:39:41.090 --> 00:39:46.020
right? Like it's still one of the most popular frameworks out there, right? So it's, I think
00:39:46.030 --> 00:39:51.200
the bus factor is over, overblown a bit, but also looking at the team of folks here, I think it's,
00:39:51.340 --> 00:39:54.880
it's even more obvious that there's a bunch of people who are on the inside, you know?
00:39:54.990 --> 00:39:59.560
For example, Flask, you know, like I learned so many things from Flask and like, the thing is,
00:39:59.750 --> 00:40:04.020
I feel like sometimes, sometimes people go and complain about the tool and say like, oh,
00:40:04.140 --> 00:40:08.980
this is not working for this or for that. And in many cases, it's in this insensitive way towards
00:40:09.260 --> 00:40:13.360
the people that are working on that. And it's like, you know, like in the end, realize that
00:40:13.480 --> 00:40:17.440
there's actually people behind the scenes doing the work. And like, in many cases, it's just like
00:40:17.620 --> 00:40:22.480
one or two people doing a lot of work in many cases, just for free. And, you know, like, I think
00:40:22.820 --> 00:40:27.480
it's worth calling that out. Like all the work that David Lord does for Flask is just like so
00:40:27.600 --> 00:40:32.780
much work. And yeah, deserves a lot of respect. I totally agree. The other thing that I forgot to
00:40:32.800 --> 00:40:37.740
mention is that there are so many ideas of potential products that I could build over the years, and I
00:40:37.820 --> 00:40:42.840
never did, and I never started a company because I didn't have clarity of what will be a good thing
00:40:43.140 --> 00:40:49.860
to actually sell and will have a good alignment. The cloud product has such a good alignment with
00:40:49.860 --> 00:40:57.640
the open source side because as more successful FastAPI is, the more successful FastAPI cloud
00:40:57.920 --> 00:40:59.140
has a potential to be.
00:40:59.840 --> 00:41:02.640
The more people using Python effectively,
00:41:03.040 --> 00:41:05.800
the more people might end up checking out FastAPI
00:41:05.820 --> 00:41:07.800
and the more people might end up checking out the product.
00:41:08.240 --> 00:41:10.980
So if FastAPI does well, if the open source does well,
00:41:11.060 --> 00:41:13.140
if Python does well, that's better for the company.
00:41:13.340 --> 00:41:17.420
So it doesn't really depend on my personal principles
00:41:17.580 --> 00:41:19.020
and values or something like that.
00:41:19.340 --> 00:41:23.680
It's aligned with, it's financially aligned with the company.
00:41:24.040 --> 00:41:27.620
So it's just going to be beneficial in the end
00:41:27.640 --> 00:41:29.680
It doesn't depend on good intentions.
00:41:30.519 --> 00:41:31.760
And FastAPI is open source.
00:41:31.980 --> 00:41:33.800
It has like 7,000 forks or something.
00:41:34.020 --> 00:41:36.320
So if a boost runs over me,
00:41:37.020 --> 00:41:38.100
there are 7,000 forks.
00:41:38.220 --> 00:41:39.000
It's not going away.
00:41:39.160 --> 00:41:40.420
I definitely agree with you on that.
00:41:40.470 --> 00:41:43.300
I feel like I should maybe give a little bit of a,
00:41:43.860 --> 00:41:44.880
I'll tell a little bit of the story
00:41:45.130 --> 00:41:46.120
of what's going on with,
00:41:46.910 --> 00:41:47.600
where did I put it?
00:41:47.840 --> 00:41:48.780
I don't think I pasted it over here,
00:41:49.200 --> 00:41:51.160
is what's going on with Tailwind right now.
00:41:51.550 --> 00:41:54.180
And I think Tailwind is having a tough time,
00:41:54.280 --> 00:41:54.700
Tailwind CSS.
00:41:55.480 --> 00:42:01.500
Traffic to Tailwind is up six times year over year on npm downloads.
00:42:02.280 --> 00:42:07.060
But the revenue of Tailwind is down five times.
00:42:07.540 --> 00:42:11.580
You know, I mean, these are completely out of whack things because instead of people going
00:42:11.580 --> 00:42:15.560
to docs to learn about it, it's just like, well, when you go to the docs, you learn they
00:42:15.640 --> 00:42:16.960
also have premium offerings, right?
00:42:17.440 --> 00:42:22.240
And I think you guys are different because it's not just, oh, here's a little bit nicer
00:42:22.420 --> 00:42:23.520
of a thing, right?
00:42:23.680 --> 00:42:34.040
I feel like it would be a little bit as if you were selling cookie cutter templates for FastAPI apps, you know, it's like, well, the AI can make the shape of the thing that comes out of the cookie cutter, to be honest.
00:42:34.260 --> 00:42:41.380
But you're offering something that has ongoing value that it costs more and is more complex in other places.
00:42:42.020 --> 00:42:50.720
And so I think maybe just thinking about the how this just keeps the team going for FastAPI is really awesome.
00:42:50.880 --> 00:42:53.260
And I think it's got a nice flywheel effect there.
00:42:53.340 --> 00:42:56.540
is I'll link to this, I guess, audio track.
00:42:56.730 --> 00:42:57.540
I don't know what I call it.
00:42:57.580 --> 00:42:59.000
It's a blog post that has one sentence,
00:42:59.260 --> 00:43:00.960
but a 30-minute audio you can check out
00:43:01.120 --> 00:43:02.960
from the guy, Adam,
00:43:03.420 --> 00:43:04.600
who's one of the founders of Tailwind,
00:43:04.780 --> 00:43:06.060
talking about going into this.
00:43:06.740 --> 00:43:07.360
It's kind of rough.
00:43:07.450 --> 00:43:09.900
I think I don't necessarily want to go into a deep AI,
00:43:10.080 --> 00:43:11.000
what it means for the industry.
00:43:11.180 --> 00:43:13.120
Like, let's stay focused on what you guys are doing.
00:43:13.150 --> 00:43:16.940
But I think it's going to be its own series.
00:43:17.280 --> 00:43:21.240
I mean, Stack Overflow had as many questions asked
00:43:21.260 --> 00:43:25.240
this month as they did in the first month of their existence, right?
00:43:25.530 --> 00:43:29.480
Three or 4,000, whereas at their peak, they were 200,000 questions a month.
00:43:29.900 --> 00:43:34.920
There's like real turmoil that's coming from some of these things, which is tricky.
00:43:35.560 --> 00:43:40.000
But I'm really excited to see you all doing this because I'm a big fan of FastAPI.
00:43:40.500 --> 00:43:45.840
And I think this is just sustaining and more for FastAPI, right?
00:43:45.920 --> 00:43:46.520
Like, what do you all think?
00:43:46.640 --> 00:43:48.260
That's what we hope that is going on.
00:43:49.920 --> 00:43:51.840
I thought about Tailwind for a second, right?
00:43:52.060 --> 00:43:54.280
It's not like we're immune to what happened to them.
00:43:54.420 --> 00:43:56.500
Like we also have a lot of documentation online.
00:43:56.880 --> 00:43:58.040
AI could train on that.
00:43:58.240 --> 00:43:59.400
And if it's good enough,
00:43:59.420 --> 00:44:01.300
it could maintain your infrastructure and stuff.
00:44:01.380 --> 00:44:02.960
It's just too hard at the moment.
00:44:03.080 --> 00:44:05.460
And there's an additional thing we're kind of selling,
00:44:05.760 --> 00:44:07.620
which is like, I guess, responsibility.
00:44:08.180 --> 00:44:11.480
Like you're shifting the risk from like letting your AI
00:44:11.800 --> 00:44:15.540
or your infantry team maintain your infrastructure to us.
00:44:15.920 --> 00:44:18.660
So we're staying up at night and worry about it.
00:44:18.980 --> 00:44:20.400
that has a lot of value as well.
00:44:20.780 --> 00:44:24.300
And that's probably not going to get removed by AI.
00:44:24.980 --> 00:44:27.040
Here's a very common Claude Code,
00:44:27.540 --> 00:44:28.760
cursor, whatever conversation.
00:44:29.520 --> 00:44:33.140
Hey, build me something with Python and needs an API.
00:44:33.240 --> 00:44:34.600
Okay, we built it with FastAPI.
00:44:34.900 --> 00:44:35.920
How do I host it?
00:44:36.230 --> 00:44:37.160
Right, that doesn't just,
00:44:37.380 --> 00:44:39.060
it will build a cloud for you, right?
00:44:39.140 --> 00:44:41.400
It's going to recommend something out there.
00:44:41.840 --> 00:44:45.120
And a real natural way to how do I host FastAPI
00:44:45.280 --> 00:44:46.740
is FastAPI cloud, right?
00:44:46.880 --> 00:44:48.060
Like if it suggests,
00:44:48.200 --> 00:44:50.940
oh, you're just going to like spread it across Lambda by breaking.
00:44:51.080 --> 00:44:52.460
Like, whoa, no, I want something simple.
00:44:52.640 --> 00:44:54.180
Okay, give me FastAPI cloud, right?
00:44:54.320 --> 00:44:55.860
I think that that's a really good thing.
00:44:55.860 --> 00:44:57.800
And then on the enterprise side,
00:44:58.340 --> 00:45:03.220
enterprise folks are notoriously not good at supporting open source
00:45:03.440 --> 00:45:05.720
in that they're not like paying for it.
00:45:05.720 --> 00:45:11.000
I know some companies are big supporters of the PSF and Python and open source.
00:45:11.440 --> 00:45:15.240
But in general, it's like, yeah, we have this project with 5,000 people working on it.
00:45:15.240 --> 00:45:15.680
It's all Python.
00:45:16.340 --> 00:45:19.240
And are we sponsoring this?
00:45:19.640 --> 00:45:19.780
Nope.
00:45:20.140 --> 00:45:22.060
We're just enjoying the money, right?
00:45:22.180 --> 00:45:22.740
And we're a bank.
00:45:23.360 --> 00:45:24.140
So we got the money.
00:45:24.260 --> 00:45:24.860
We got all the money.
00:45:25.780 --> 00:45:29.520
So they're just not good at paying for like a really great framework that they use a lot.
00:45:29.860 --> 00:45:34.460
But they got plenty of hosting, plenty of internal apps that they just need to make run and stuff.
00:45:34.680 --> 00:45:40.220
So I think both on like the low end and the high end, there's a lot of synergy between these things.
00:45:40.340 --> 00:45:52.540
That is not just, you know, slightly advanced, not to diminish it, but slightly advanced UI widgets that you could ask your AI to build or something or like cookie cutter templates for project starters.
00:45:52.840 --> 00:45:59.120
I think we are in a somewhat fortunate position of like, you know, like FastAPI. FastAPI has grown so much.
00:45:59.560 --> 00:46:06.100
Like, you know, like when you check the statistics about downloads or GitHub stars or entries in developer surveys,
00:46:06.220 --> 00:46:08.680
like it's at the top in like in each category.
00:46:08.860 --> 00:46:13.560
It's like, you know, like the backend framework with the most GitHub stars across languages,
00:46:14.040 --> 00:46:17.180
even like, you know, like Java, Go, Ruby, JS, like whatever.
00:46:17.280 --> 00:46:19.840
It's like the top one, at least in GitHub stars.
00:46:20.260 --> 00:46:24.620
So like, you know, like FastAPI is like people are liking it, fortunately.
00:46:25.480 --> 00:46:29.080
And there's probably going to be people deploying things to FastAPI Cloud.
00:46:29.100 --> 00:46:32.600
So that's probably going to be like, we are probably going to be fine.
00:46:33.180 --> 00:46:38.760
I think, you know, like the, I guess it will be like a good point to ask people to go and
00:46:38.880 --> 00:46:42.580
check where the open source project is that they are using and check where is the bus ticket
00:46:42.800 --> 00:46:44.920
factor for those open source projects.
00:46:45.040 --> 00:46:55.800
You know, like if you are using Tailwind CSS, it would have been very cool if at some point you check if the premium things were useful for you and for your company or your project or something like that, you know?
00:46:56.100 --> 00:46:59.400
Yeah, because what is the thing that keeps that project going?
00:46:59.560 --> 00:46:59.880
Exactly.
00:47:00.260 --> 00:47:12.820
And I really personally admire if a project or something offers like more value, not just, hey, buy me a coffee, but here's a thing that you get way more of, you know?
00:47:12.820 --> 00:47:14.840
And in that regard, I think Tailwind was doing that, right?
00:47:14.960 --> 00:47:17.240
They were offering this suite of pre-built things.
00:47:17.570 --> 00:47:18.940
And I think that that's great.
00:47:19.280 --> 00:47:24.440
But yeah, I do think you've got more of these crazy AI things
00:47:24.470 --> 00:47:26.680
are going to maybe recommend FastAPI Cloud more
00:47:26.960 --> 00:47:28.340
than they're just going to undercut it.
00:47:28.350 --> 00:47:29.200
So I think that's really great.
00:47:29.460 --> 00:47:33.180
And by the way, I was just looking for the GitHub Stars graph.
00:47:33.530 --> 00:47:36.200
Like there's a whole, I can't remember what the domain of that site is.
00:47:36.840 --> 00:47:38.980
And I ran across, by the way, I just want to give a quick shout out.
00:47:39.130 --> 00:47:43.420
Like your cult repo documentary on FastAPI was awesome.
00:47:44.000 --> 00:47:44.080
Right?
00:47:44.420 --> 00:47:45.080
That was so fun.
00:47:45.440 --> 00:47:46.280
They made me look good.
00:47:46.280 --> 00:47:47.040
I didn't see that coming.
00:47:47.660 --> 00:47:50.060
Yeah, it came right on the heels of the Python official
00:47:50.700 --> 00:47:51.800
documentary, the one hour one.
00:47:51.900 --> 00:47:54.200
This is the same group, and the production quality
00:47:54.260 --> 00:47:54.660
is really nice.
00:47:54.750 --> 00:47:55.320
So like--
00:47:55.440 --> 00:47:58.580
When they released the trailer for the Python documentary,
00:47:58.800 --> 00:48:00.940
before releasing the documentary, when they released the trailer,
00:48:01.180 --> 00:48:02.980
they contacted me and said, hey, we're
00:48:03.670 --> 00:48:06.080
doing these mini documentaries about different frameworks,
00:48:06.230 --> 00:48:08.360
different tools, and we want to include FastAPI there.
00:48:08.410 --> 00:48:09.260
I was like, oh, nice.
00:48:10.040 --> 00:48:12.220
But then I was just trying to stay excited,
00:48:12.440 --> 00:48:13.200
but super excited.
00:48:13.760 --> 00:48:17.740
Oh, that's so cool. Yeah, I watched it as soon as it came out. So I'll link to that. People should
00:48:17.880 --> 00:48:22.500
definitely, it's only like 10 minutes or something, but it's worth it. We're checking out. So it's not
00:48:22.500 --> 00:48:26.900
a huge investment time. People can watch it, I suppose. It's not TikTok. I mean, it's not like,
00:48:27.440 --> 00:48:34.900
oh, I saw the documentary, but it doesn't take you on huge about it.
00:48:34.960 --> 00:48:37.840
You have to listen for 10 minutes, overly excited Colombian.
00:48:37.940 --> 00:48:41.320
I don't understand what's happened to the attention span of society. I'm really,
00:48:41.560 --> 00:48:45.600
honestly a little concerned. I used to, when I would create my courses, people would say,
00:48:45.760 --> 00:48:49.460
you know, like a four hour course and there'd be like a 10, 15 minute sort of, Hey, here's how you
00:48:49.580 --> 00:48:52.280
set up your computer. And here's all the introduction and people, Oh, that's so awesome.
00:48:52.400 --> 00:48:55.200
I loved how you kind of set the stage. I'm really motivated to take the course.
00:48:55.840 --> 00:48:59.800
Nowadays, I just get messages like, why are you still talking? This is five minutes long. Do you
00:48:59.960 --> 00:49:06.500
understand? I'm like, this is your job. You can't spend five minutes. Oh my gosh. Anyway, that's,
00:49:06.620 --> 00:49:11.520
that's sort of the origin of my comment there. It's all right. So we're kind of getting so much
00:49:11.540 --> 00:49:17.380
time, I think I want to talk about a couple of things. Let's talk a little bit about internals.
00:49:17.460 --> 00:49:22.820
Like what, I don't know who wants to take this one, but let's talk about just how, when I say
00:49:23.080 --> 00:49:30.140
FastAPI deploy, then what? It's just a uv pip install and it just goes and it's magic and it's
00:49:30.240 --> 00:49:34.320
easy, right? We have a nickname for Jonathan. Can we say it or no? I don't know. It's so funny.
00:49:34.380 --> 00:49:38.660
This happened because I told my friends, I'm so concerned about being at the podcast because
00:49:38.680 --> 00:49:42.000
Because everyone here is a visionary, and then I'm the back-end guy.
00:49:42.300 --> 00:49:46.300
I think the things I could contribute to this conversation, I should probably keep to myself.
00:49:47.540 --> 00:49:50.020
But you're just leaking your turnouts, right?
00:49:50.180 --> 00:49:52.940
There are some things that are not really secret.
00:49:53.340 --> 00:50:01.300
Like, as Sebastian said earlier, Kubernetes 1 in the infrastructure and deployment field, to some extent.
00:50:01.500 --> 00:50:03.600
So that's somewhere in there, right?
00:50:03.880 --> 00:50:07.260
But it's all the way deep down, so no one has to worry about it.
00:50:07.420 --> 00:50:08.500
But it's still a foundation.
00:50:08.580 --> 00:50:09.580
which is a good foundation.
00:50:09.950 --> 00:50:11.300
I think one thing that's,
00:50:11.610 --> 00:50:12.500
you might have guessed it,
00:50:12.800 --> 00:50:15.240
but FastAPI Cloud is built on FastAPI,
00:50:15.480 --> 00:50:16.440
which kind of makes sense, right?
00:50:16.760 --> 00:50:17.940
And that also has an effect
00:50:18.200 --> 00:50:20.500
on like recent patches, updates and stuff.
00:50:20.720 --> 00:50:22.560
Because if we find something internally
00:50:23.000 --> 00:50:23.860
which we're not happy with,
00:50:24.040 --> 00:50:25.240
then we just fix it.
00:50:25.440 --> 00:50:27.080
And that's how some releases
00:50:27.600 --> 00:50:29.460
came out faster than months before.
00:50:30.220 --> 00:50:31.420
Power of dogfooding.
00:50:31.820 --> 00:50:32.480
Yeah, that's awesome.
00:50:32.620 --> 00:50:33.080
Dogfooding a lot.
00:50:33.280 --> 00:50:35.100
Also all the related libraries
00:50:35.540 --> 00:50:38.360
like SQL model and, well, others.
00:50:38.840 --> 00:50:39.940
they experience the same thing.
00:50:40.160 --> 00:50:41.500
New library is coming out.
00:50:42.020 --> 00:50:43.680
Patrick will announce at some point soon.
00:50:43.860 --> 00:50:45.680
It's not just FastAPI and friends.
00:50:45.980 --> 00:50:46.980
We're like really open.
00:50:47.260 --> 00:50:49.160
Like recently, Patrick just open-sourced
00:50:49.540 --> 00:50:51.680
everything we use for authentication authorization,
00:50:52.160 --> 00:50:52.520
for example.
00:50:52.840 --> 00:50:53.700
Is it open-source yet?
00:50:53.960 --> 00:50:54.840
Did they just leak something?
00:50:55.000 --> 00:50:56.940
It will be announced soon at some point.
00:50:57.920 --> 00:50:59.720
We build stuff internally in the moment really.
00:51:00.520 --> 00:51:01.820
Like we build it in a way,
00:51:01.960 --> 00:51:02.800
like in a separate package,
00:51:03.260 --> 00:51:04.420
just like an open-source library.
00:51:04.540 --> 00:51:05.740
And if we feel like the time is ripe,
00:51:05.860 --> 00:51:07.260
it's just getting open-sourced
00:51:07.280 --> 00:51:08.860
because a lot of things are reusable.
00:51:09.420 --> 00:51:10.460
And that's in all departments.
00:51:10.900 --> 00:51:11.700
That happens a lot.
00:51:12.320 --> 00:51:14.660
When I started there, I already realized that.
00:51:14.760 --> 00:51:15.880
Everyone was building open source,
00:51:16.030 --> 00:51:17.600
but now I joined in myself as well.
00:51:17.720 --> 00:51:22.020
I open source the library for compressing
00:51:22.120 --> 00:51:24.240
and decompressing archives in Python
00:51:24.860 --> 00:51:27.440
because the internal top high thing is just slow
00:51:27.520 --> 00:51:28.660
and we needed it to be faster
00:51:28.840 --> 00:51:30.620
because we're staring at the deployment process
00:51:30.690 --> 00:51:33.160
and we're like, hey, we could probably shave off a few seconds here.
00:51:33.760 --> 00:51:35.740
Then that's just open source for everyone to use.
00:51:35.800 --> 00:51:38.900
So we're contributing to the old Python ecosystem as well.
00:51:38.900 --> 00:51:39.940
You have to say the name.
00:51:40.140 --> 00:51:40.820
It's so good.
00:51:41.500 --> 00:51:42.080
Is it good?
00:51:42.240 --> 00:51:46.280
No, it's just, it's faster because it's, you know, faster than just tar.
00:51:47.260 --> 00:51:47.880
Fast tar?
00:51:48.160 --> 00:51:48.500
I love it.
00:51:48.510 --> 00:51:49.140
Fast tar, yes.
00:51:49.760 --> 00:51:53.300
And you can say with that very, very German accent, fast tar.
00:51:53.420 --> 00:51:54.140
I'll go star it.
00:51:54.200 --> 00:51:55.820
We'll get you some stars.
00:51:56.520 --> 00:51:57.060
This is going to happen.
00:51:57.200 --> 00:51:58.300
That's the irony about it.
00:51:58.440 --> 00:51:59.960
Like, it literally has no stars.
00:52:00.090 --> 00:52:01.660
But if you scroll down, you see the downloads.
00:52:01.880 --> 00:52:04.100
That's going to prove we're actually using it.
00:52:04.180 --> 00:52:04.740
Yeah, I like it.
00:52:05.060 --> 00:52:06.100
It's a little context manager.
00:52:07.660 --> 00:52:12.700
It's almost working the same as the tarfile in the standard library.
00:52:13.000 --> 00:52:16.060
Like the same, like almost similar API to that.
00:52:16.360 --> 00:52:18.720
It's basically a drop-in replacement, more or less.
00:52:19.440 --> 00:52:21.400
But they know they need everything to happen in Rust.
00:52:21.680 --> 00:52:22.080
Because Rust.
00:52:22.420 --> 00:52:23.340
Because Rust, yeah.
00:52:23.560 --> 00:52:27.180
Well, as soon as it becomes infrastructure and you've got to run it a million times,
00:52:27.740 --> 00:52:29.100
that starts to make sense, right?
00:52:29.220 --> 00:52:29.280
Yeah.
00:52:29.420 --> 00:52:33.180
Python is one of the fastest programming languages in the world.
00:52:33.680 --> 00:52:36.960
when you think about human time to build the things, right?
00:52:37.140 --> 00:52:39.480
Like that's one of its real superpowers is like,
00:52:39.800 --> 00:52:44.060
I mean, there's the whole story of Google Video and YouTube, right?
00:52:44.160 --> 00:52:46.920
And Google Video was written in C++ with 100 engineers
00:52:47.160 --> 00:52:49.220
and YouTube was a small team in Python
00:52:49.460 --> 00:52:51.100
and they just couldn't keep up with the features.
00:52:51.200 --> 00:52:53.000
So they bought this little old thing, YouTube,
00:52:53.560 --> 00:52:55.000
and see if we're going to make something with it.
00:52:55.280 --> 00:52:57.220
And last I checked, it was still in Python.
00:52:57.420 --> 00:53:00.260
I'm sure some of it isn't, but a few years ago it was, which is wild.
00:53:00.760 --> 00:53:02.560
Anyway, there's different ways of fast,
00:53:02.680 --> 00:53:04.520
But when it's down to like little utilities, yeah.
00:53:04.620 --> 00:53:06.660
I know some people that are trying to make Python fast.
00:53:06.710 --> 00:53:07.220
I know a couple.
00:53:07.440 --> 00:53:07.620
Yeah.
00:53:08.200 --> 00:53:11.540
And honestly, massive success in the last five years, right?
00:53:11.740 --> 00:53:17.400
Like since 3.11, since the specializing adaptive interpreter, there's been pretty big improvements.
00:53:17.720 --> 00:53:20.360
3.9 and 3.11 did a lot of like foundational work.
00:53:20.410 --> 00:53:24.020
And then 3.9 onward really just uncorked a lot of innovation there.
00:53:24.340 --> 00:53:25.260
Yeah, that's pretty awesome.
00:53:26.000 --> 00:53:26.260
All right.
00:53:26.560 --> 00:53:29.320
It sounds like, Sebastian, you've talked a lot about Kubernetes.
00:53:29.740 --> 00:53:31.360
So I imagine Kubernetes is happening.
00:53:31.960 --> 00:53:34.820
Do we get to pick what data centers it runs on?
00:53:34.840 --> 00:53:37.720
Do we get to pick what clouds it runs on?
00:53:37.920 --> 00:53:40.560
You're going to get to pick some of these things.
00:53:41.340 --> 00:53:41.800
Not yet.
00:53:42.100 --> 00:53:43.000
It's not released yet.
00:53:43.600 --> 00:53:45.320
But, you know, like it's top, of course.
00:53:45.620 --> 00:53:48.680
Like we have like regular cloud providers on the MIT
00:53:48.720 --> 00:53:49.720
and there's a bunch of Kubernetes.
00:53:49.920 --> 00:53:52.140
Then there's a bunch of additional stuff
00:53:52.360 --> 00:53:53.560
that needs to run on top.
00:53:53.760 --> 00:53:55.599
Then there's like custom Kubernetes controllers
00:53:56.320 --> 00:53:58.560
and things that Jonathan was saying
00:53:58.580 --> 00:54:00.399
that he's having to write in Go
00:54:00.420 --> 00:54:04.180
so that people in Python can be happy to be able to, you know,
00:54:04.200 --> 00:54:07.040
like manage all the Kubernetes shenanigans that need to happen
00:54:07.160 --> 00:54:09.700
because there's so much complexity that needs to be handled.
00:54:10.340 --> 00:54:11.440
There's a lot of that.
00:54:11.760 --> 00:54:14.860
We do a lot of advanced tricks also.
00:54:15.380 --> 00:54:17.440
Jonathan was recently doing a bunch of advanced tricks
00:54:17.580 --> 00:54:20.160
to handle the caches for the builds.
00:54:20.520 --> 00:54:22.120
So the way that we handle caches,
00:54:22.260 --> 00:54:25.220
and we also like tap into uv and how things work
00:54:25.340 --> 00:54:28.399
so that builds can be super, super fast
00:54:28.420 --> 00:54:30.080
because it's like something is,
00:54:30.540 --> 00:54:33.280
we are, you know, like we are very much targeted
00:54:33.560 --> 00:54:35.940
at FastAPI and Python in general.
00:54:36.100 --> 00:54:38.440
So we can take advantage of knowing
00:54:39.060 --> 00:54:40.260
how things run internally,
00:54:40.720 --> 00:54:41.700
how things are installed,
00:54:42.220 --> 00:54:43.280
how to optimize everything.
00:54:43.380 --> 00:54:45.000
So everything is just like super fast,
00:54:45.140 --> 00:54:47.640
super fast to install, to run, to like do everything.
00:54:47.700 --> 00:54:50.400
I imagine you all have base Docker images
00:54:50.960 --> 00:54:53.700
that are like just one layer away
00:54:54.080 --> 00:54:55.880
from whoever's code is running.
00:54:56.440 --> 00:54:58.060
You know, like you've got it all optimized,
00:54:58.120 --> 00:55:02.020
already pre-built with FastAPI and whatever settings of Python you want.
00:55:02.140 --> 00:55:03.460
A bunch of things and tricks.
00:55:04.100 --> 00:55:05.340
But there are also different things,
00:55:05.560 --> 00:55:08.440
like the different ways that we do to actually build the things
00:55:08.540 --> 00:55:13.860
and install things and put them inside of the actual build application.
00:55:14.220 --> 00:55:18.060
There's a lot of sourcing that we do there,
00:55:18.120 --> 00:55:20.840
and Jonathan has been working on a lot of that.
00:55:21.340 --> 00:55:23.380
And there's also all the logic and all the stuff.
00:55:23.500 --> 00:55:26.840
We have a bunch of stuff on top of that to handle out of scaling,
00:55:27.040 --> 00:55:31.160
which is something that is actually not that easy to find in different providers.
00:55:31.820 --> 00:55:37.220
We have auto-scaling based on requests, including scaling down to zero, which saves costs.
00:55:37.840 --> 00:55:40.080
But this is not Lambdas.
00:55:40.280 --> 00:55:41.340
It's not AWS Lambdas.
00:55:42.119 --> 00:55:46.860
It's like the full deployed application, the full container or whatever it is,
00:55:47.300 --> 00:55:49.900
which is the full thing with all the dependencies.
00:55:50.100 --> 00:55:54.060
It's running for whenever it has to run, but we can scale based on requests.
00:55:54.740 --> 00:56:07.280
So I guess it's like the type of thing that you will have if you have this giant cluster for a huge enterprise with a bunch of infra people making sure everything just works perfectly.
00:56:08.000 --> 00:56:10.320
But you just pay us to do that for you.
00:56:10.420 --> 00:56:15.360
This is also a good time for us to probably say lots of stuff is coming and we're in private beta.
00:56:15.540 --> 00:56:22.660
And so you should sign up for the wait list so that you can get admitted and try out these very cool things we've been talking about.
00:56:22.660 --> 00:56:22.840
Absolutely.
00:56:23.240 --> 00:56:29.020
And I think I'll let Tech Insider out in the audience sort of lean into it.
00:56:29.020 --> 00:56:29.520
Public release one.
00:56:30.019 --> 00:56:30.900
Sebastian, when?
00:56:31.180 --> 00:56:32.140
Public release one.
00:56:32.440 --> 00:56:34.960
My final topic, which is just what's the roadmap?
00:56:35.560 --> 00:56:36.320
When is this stuff?
00:56:36.660 --> 00:56:38.540
Like, how do we get into it here?
00:56:38.820 --> 00:56:40.180
Why would they like Litestar?
00:56:40.400 --> 00:56:43.940
We have the, right now we have the waiting list and we are onboarding people.
00:56:44.080 --> 00:56:46.460
We already have like a bunch of people in the private beta.
00:56:46.920 --> 00:56:51.720
We're going to keep onboarding people from the waiting list and like, you know, like ramp that up.
00:56:51.780 --> 00:56:56.060
But it will be like, you know, like through the waiting list is the main place where we are onboarding.
00:56:56.140 --> 00:56:58.440
People will want to make sure that everything is super fine-tuned.
00:56:58.820 --> 00:57:00.300
And we're going to keep it that way for a while.
00:57:00.540 --> 00:57:06.100
So like people that are on the waiting list are going to be like the ones that are going to be able to start using it the soonest.
00:57:06.420 --> 00:57:10.160
At some point, we'll probably have ways for people to invite others and things like that.
00:57:10.500 --> 00:57:17.920
About the things that we are building, we want to, you know, like we are super focused on FastAPI and then Python in general.
00:57:18.060 --> 00:57:20.880
at some point will probably support different tools,
00:57:21.340 --> 00:57:24.060
different ways to run, also like Python code in general,
00:57:24.480 --> 00:57:25.360
probably different frameworks.
00:57:25.900 --> 00:57:30.240
It will also depend a lot on what the users are asking for,
00:57:30.360 --> 00:57:33.300
whether like the tools, the frameworks, the use cases,
00:57:33.460 --> 00:57:34.700
the things that they need to build.
00:57:34.740 --> 00:57:37.860
And like, we're going to evolve the platform and the system
00:57:38.500 --> 00:57:40.780
based on what people need out of it.
00:57:40.800 --> 00:57:42.900
We have like a GitHub repo where we have issues,
00:57:43.060 --> 00:57:45.780
but we also have like a Slack that once people are admitted,
00:57:45.820 --> 00:57:50.760
they can talk directly to us and that feedback is really, really valuable for shaping the roadmap
00:57:50.970 --> 00:57:53.500
and figuring out all the fun things you want us to support.
00:57:53.560 --> 00:57:58.620
Awesome. Of course, you're going to charge money for it. It runs on servers and you guys are not
00:57:59.170 --> 00:58:04.640
a charity, but can you give any sense of what you're thinking about that kind of stuff or
00:58:05.060 --> 00:58:06.080
join the waitlist and see?
00:58:06.240 --> 00:58:11.920
Well, first join the waitlist and see, but we don't have like that predefined yet,
00:58:12.220 --> 00:58:16.080
but they will be on the ballpark of what you could get from different cloud providers.
00:58:16.280 --> 00:58:23.920
So different similar-ish providers will be on the ballpark of what you will get.
00:58:24.300 --> 00:58:26.980
But it's not written in stone yet.
00:58:27.320 --> 00:58:32.060
It's still a little bit different because we can auto-scale based on requests.
00:58:32.340 --> 00:58:36.580
So we can increase the amount of replicas of your application automatically,
00:58:36.960 --> 00:58:40.000
and then we can decrease them automatically, and we can scale down to zero.
00:58:40.060 --> 00:58:49.940
So you can probably handle all the load that you need and in the end spend a lot less because you don't have to have a bunch of instances constantly running or things like that, you know.
00:58:50.420 --> 00:58:55.840
So it will probably work a little bit different than what it will be for other providers.
00:58:56.360 --> 00:58:58.380
But in the end, it should be roughly similar.
00:58:58.560 --> 00:59:18.360
Okay. And given the fact that you all handle so much of it as a platform as a service type of thing, you don't have to have a cloud expert on hand or a DevOps expert necessarily, right? As soon as a company hires somebody to be an AWS cloud architect or something like that, it's no longer just what is your AWS bill.
00:59:18.580 --> 00:59:22.380
It's also a little bit of pain that we are swallowing so you don't have to take it.
00:59:22.740 --> 00:59:24.580
Exactly. It's part of taking one for the team, right?
00:59:24.740 --> 00:59:24.920
Yes.
00:59:25.140 --> 00:59:25.200
Yes.
00:59:27.160 --> 00:59:27.340
Indeed.
00:59:27.960 --> 00:59:30.960
All right, so I had one or two things specifically
00:59:31.610 --> 00:59:32.360
that I was seeking.
00:59:32.550 --> 00:59:33.880
It's like custom domains.
00:59:34.410 --> 00:59:35.580
How far off are custom domains?
00:59:35.700 --> 00:59:38.100
I was like, oh, I could put some cool things on there.
00:59:39.420 --> 00:59:41.140
I could tell Jonathan is psyched about this.
00:59:41.280 --> 00:59:44.320
It'd be really fun to put one of my really small
00:59:44.799 --> 00:59:46.100
FastAPI projects over there,
00:59:46.740 --> 00:59:48.360
something I set up for some of my courses or something,
00:59:48.520 --> 00:59:50.100
and then I can point people to go,
00:59:50.160 --> 00:59:51.400
look, it's running on FastAPI Cloud.
00:59:51.400 --> 00:59:53.620
How neat, you guys can check that out over there.
00:59:54.060 --> 00:59:55.360
And I'm like, but it's on its own domain,
00:59:55.580 --> 01:00:00.380
that domain is baked into the course videos, you know what I mean? And it's written in stone.
01:00:00.580 --> 01:00:01.140
It's marketing.
01:00:01.520 --> 01:00:07.880
Yeah, exactly. So I can't really move it because it has, you know, some subdomain of Talk Python,
01:00:08.060 --> 01:00:08.120
right?
01:00:08.240 --> 01:00:12.120
I was working on it. And then I got the notification by Google Calendar that I should
01:00:12.440 --> 01:00:14.140
join a certain podcast. So...
01:00:14.140 --> 01:00:18.920
Are you telling me we don't have custom domains? Because I'm here asking you about custom domains.
01:00:19.100 --> 01:00:19.700
How meta is that?
01:00:19.720 --> 01:00:23.540
You got it. It could be here already. But no, you have to wait a bit more.
01:00:23.640 --> 01:00:24.400
Okay. But soon?
01:00:24.520 --> 01:00:29.660
Yeah. As soon as broad enough, but I'm actively working on it. Let's put it like that.
01:00:29.740 --> 01:00:34.320
Okay. That sounds great. And then, I mean, just, it's never simple. You know, I just,
01:00:34.780 --> 01:00:39.140
I set up some stuff and it's like, you get the pop-up. Oh, you got to put this, you know,
01:00:39.280 --> 01:00:45.320
this TXT record or this CNAME or whatever record into your DNS and then we're checking it. Oh,
01:00:45.780 --> 01:00:50.239
it might take three days for your DNS to propagate. So hang in there and just, I can imagine like
01:00:50.560 --> 01:00:56.560
you're having fun yeah i guess you're kidding me that's like wow i i thought i'm almost off work
01:00:56.780 --> 01:01:00.260
but no you're bringing it all back but yeah that's a that's a thing i'm sure the company
01:01:00.760 --> 01:01:04.540
could support therapy to like work work through the issues and the trauma that you've suffered
01:01:04.760 --> 01:01:10.340
from the dns it's always dns that's right i mean you got that's an yes it's always dns yes
01:01:10.460 --> 01:01:15.699
i guess one of our goals with custom domains also to make it super simple for you to set up them
01:01:15.940 --> 01:01:23.040
Like, for example, if you're using one of the providers that support OAuth, we can also just do one click and then it's going to be automatically.
01:01:23.160 --> 01:01:24.960
Oh, that's cool. Yeah, that's really nice.
01:01:25.120 --> 01:01:27.300
But unfortunately, it depends on the platform you're using.
01:01:27.460 --> 01:01:29.300
All of them support this.
01:01:29.480 --> 01:01:32.720
This is said by the person in charge of most of the integrations.
01:01:32.860 --> 01:01:37.340
So Patrick has built, we have integrations for a bunch of database providers and things like that.
01:01:38.060 --> 01:01:41.900
I think now Patrick knows by memory, OpenID specification.
01:01:42.260 --> 01:01:42.720
I don't know.
01:01:44.300 --> 01:01:48.600
Yeah, the other thing I wanted to talk a bit about was just integrations, like what kind of stuff you guys have coming in.
01:01:48.600 --> 01:01:51.940
I saw that Hugging Face is going to be integrated soon.
01:01:52.120 --> 01:01:55.320
You've got Supabase, which is kind of Postgres as a service.
01:01:56.040 --> 01:01:59.860
There's a lot of those things out there that theoretically could be added.
01:02:00.100 --> 01:02:01.440
Someone also asked for MongoDB.
01:02:01.660 --> 01:02:03.640
Maybe that's one that we're going to take a look into.
01:02:04.070 --> 01:02:06.320
It really depends on the provider.
01:02:06.370 --> 01:02:11.360
So at the moment, we don't want to ask databases for you because that's also another kind of rabbit hole.
01:02:11.780 --> 01:02:13.200
Jonathan is probably not ready for that.
01:02:14.180 --> 01:02:15.880
But yeah, definitely database.
01:02:16.040 --> 01:02:21.260
But I guess we can say that we're also talking with the people from Pydantic
01:02:21.360 --> 01:02:24.720
so we can integrate maybe Logfire automatically, that kind of stuff.
01:02:25.120 --> 01:02:25.220
Yeah.
01:02:25.440 --> 01:02:28.600
And also things like Redis, which is also another kind of database.
01:02:29.300 --> 01:02:30.200
That's also coming soon.
01:02:30.360 --> 01:02:33.580
Yeah, there's a couple of database as a service type things
01:02:33.740 --> 01:02:37.700
that don't require too much other than just connecting API keys
01:02:37.920 --> 01:02:38.740
and something like that, right?
01:02:38.940 --> 01:02:40.180
Those seem like low-hanging fruit.
01:02:40.300 --> 01:02:43.940
Like the kind of goal with the integration is not just done.
01:02:44.000 --> 01:02:46.620
Like, yeah, right now it's just setting up an environment variable.
01:02:47.080 --> 01:02:51.240
But the idea is also to more, I don't know, like the proper integration, I would say.
01:02:52.320 --> 01:02:56.040
Like, for example, for things like Supabase, if, yeah, I think that's support branching.
01:02:56.080 --> 01:03:00.500
Like, for example, once we support PR Previews for GitHub, like we can also create
01:03:00.500 --> 01:03:03.680
a branch automatically for you if you have the Supabase integration enabled.
01:03:04.180 --> 01:03:05.920
And we can do this kind of stuff as well.
01:03:06.020 --> 01:03:09.620
Or even we could show like some information about database.
01:03:10.000 --> 01:03:12.200
I don't know, like load or like memory usage,
01:03:12.320 --> 01:03:13.920
things are directly from our dashboard.
01:03:14.080 --> 01:03:14.860
So you don't have to go there.
01:03:15.080 --> 01:03:17.920
That's the main reason why we're building this infrastructure
01:03:18.180 --> 01:03:19.160
for the integration.
01:03:19.480 --> 01:03:21.620
Well, people can sign up to the waiting list
01:03:21.820 --> 01:03:24.420
and hopefully get on the private beta.
01:03:24.880 --> 01:03:26.180
We actually check the waiting list.
01:03:26.220 --> 01:03:29.080
We actually check the use cases, team sizes,
01:03:29.440 --> 01:03:31.440
like what are people building with it?
01:03:31.540 --> 01:03:33.400
Like we actually go and check it
01:03:33.480 --> 01:03:36.580
and we bring in people from the waiting list.
01:03:37.020 --> 01:03:39.220
Nice. You know, I didn't join the waiting list directly.
01:03:39.460 --> 01:03:42.820
I was added by some guy I know who was very kind
01:03:42.850 --> 01:03:44.560
to help me get some behind-the-scene look.
01:03:45.200 --> 01:03:46.360
So I don't know what the process is.
01:03:46.460 --> 01:03:48.560
Do you actually say what you want to do with it?
01:03:48.590 --> 01:03:51.360
And you evaluate that a little bit as well based on, like,
01:03:51.360 --> 01:03:53.340
hey, this would be a cool use case for us to support?
01:03:53.430 --> 01:03:54.960
There are many types of applications
01:03:55.150 --> 01:03:57.320
and many types of different team sizes,
01:03:57.600 --> 01:04:00.520
many types of things that people might want to build.
01:04:00.720 --> 01:04:03.020
And we try to see, like, okay, where is a case
01:04:03.160 --> 01:04:06.360
where we could be a good fit and we can provide a great service?
01:04:06.980 --> 01:04:08.880
And where are the things that people are trying to build?
01:04:09.220 --> 01:04:14.860
Also, it also helps us see, like, you know, like, what are people trying to do with Fasted
01:04:14.980 --> 01:04:17.080
Vehicle so that we know what we have to provide?
01:04:17.560 --> 01:04:23.800
But we actually go and check those, you know, like those submissions on, like, sexually thousands
01:04:24.010 --> 01:04:30.480
of people in the waiting list, but we still go and check and approve kind of manually still
01:04:30.780 --> 01:04:34.840
to bring a bunch of people on board in the different ways that we have been bringing people.
01:04:35.240 --> 01:04:39.180
So if people go and join the waiting list and actually tell us what they are, what is their
01:04:39.200 --> 01:04:41.900
use case, their team, what are they planning on doing?
01:04:42.440 --> 01:04:45.160
There's a much higher chance that we are going to go
01:04:45.340 --> 01:04:46.280
on to bring them up.
01:04:46.280 --> 01:04:46.500
MARK MANDEL: Awesome.
01:04:47.100 --> 01:04:49.280
So everyone, go join the waitlist.
01:04:49.360 --> 01:04:52.980
If you're doing FastAPI, I'll link to it in the show notes,
01:04:53.080 --> 01:04:53.420
of course.
01:04:53.860 --> 01:04:57.040
Thank you all for being here and sharing the story.
01:04:57.340 --> 01:05:00.900
And I, for one, am very excited to see FastAPI Cloud exist
01:05:01.000 --> 01:05:04.180
and just one more way to make FastAPI stronger
01:05:04.420 --> 01:05:06.400
and more resilient and so on.
01:05:06.400 --> 01:05:07.340
FRANCESC CAMPOY: Thank you very much.
01:05:07.580 --> 01:05:08.400
Thank you for having us.
01:05:08.580 --> 01:05:09.480
Yeah, it's super fun.
01:05:09.480 --> 01:05:10.260
Thanks for having us.
01:05:10.460 --> 01:05:10.840
Yeah, you bet.
01:05:11.220 --> 01:05:11.500
Bye, everyone.
01:05:11.640 --> 01:05:12.080
Bye, folks.
01:05:12.380 --> 01:05:12.680
Bye-bye.
01:05:12.940 --> 01:05:13.060
Bye.
01:05:14.300 --> 01:05:16.540
This has been another episode of Talk Python To Me.
01:05:16.820 --> 01:05:17.620
Thank you to our sponsors.
01:05:17.860 --> 01:05:19.120
Be sure to check out what they're offering.
01:05:19.340 --> 01:05:20.700
It really helps support the show.
01:05:21.560 --> 01:05:23.720
This episode is brought to you by CommandBook,
01:05:23.980 --> 01:05:26.080
a native macOS app that I built
01:05:26.240 --> 01:05:28.780
that gives long-running terminal commands a permanent home.
01:05:29.180 --> 01:05:31.180
No more juggling six terminal tabs every morning.
01:05:31.620 --> 01:05:33.040
Carefully craft a command once,
01:05:33.300 --> 01:05:34.700
run it forever with auto-restart,
01:05:34.900 --> 01:05:36.420
URL detection, and a full CLI.
01:05:36.880 --> 01:05:39.940
Download it for free at talkpython.fm/command book app.
01:05:41.040 --> 01:05:43.660
And it's brought to you by the Talk Python in Production Book,
01:05:44.190 --> 01:05:48.820
an inside look at 10 years of the real-world DevOps behind the Talk Python sites and apps.
01:05:49.160 --> 01:05:51.860
Check it out at talkpython.fm/DevOps book.
01:05:52.720 --> 01:05:54.580
If you or your team needs to learn Python,
01:05:54.790 --> 01:05:59.620
we have over 270 hours of beginner and advanced courses on topics ranging from
01:05:59.960 --> 01:06:04.860
complete beginners to async code, Flask, Django, HTML, and even LLMs.
01:06:05.140 --> 01:06:07.360
Best of all, there's no subscription in sight.
01:06:08.020 --> 01:06:09.680
Browse the catalog at talkpython.fm.
01:06:10.420 --> 01:06:12.360
And if you're not already subscribed to the show
01:06:12.600 --> 01:06:13.740
on your favorite podcast player,
01:06:14.400 --> 01:06:15.040
what are you waiting for?
01:06:15.720 --> 01:06:17.480
Just search for Python in your podcast player.
01:06:17.640 --> 01:06:18.460
We should be right at the top.
01:06:18.880 --> 01:06:20.420
If you enjoy that geeky rap song,
01:06:20.500 --> 01:06:21.720
you can download the full track.
01:06:21.860 --> 01:06:23.760
The link is actually in your podcast blur show notes.
01:06:24.600 --> 01:06:25.920
This is your host, Michael Kennedy.
01:06:26.320 --> 01:06:27.380
Thank you so much for listening.
01:06:27.600 --> 01:06:28.400
I really appreciate it.
01:06:28.820 --> 01:06:29.540
I'll see you next time.
01:06:41.180 --> 01:06:43.980
I'm out.
00:00:00.020 --> 00:00:04.600
You've built your FastAPI app. It's running great locally. Now you want to share it with the world.
00:00:05.360 --> 00:00:12.480
But then reality hits. Containers, load balancers, HTTPS certificates, cloud consoles with 200
00:00:12.680 --> 00:00:18.560
options. What if deploying was just one command? That's exactly what Sebastian Ramirez and the
00:00:18.660 --> 00:00:24.460
FastAPI cloud team are building. On this episode, we sit down with Sebastian, Patrick Arminio,
00:00:24.720 --> 00:00:29.980
Savannah Ostrowski, and Jonathan Ewald to go inside FastAPI cloud, explore what it means
00:00:30.000 --> 00:00:35.340
to build a Pythonic cloud and dig into how this commercial venture is actually making FastAPI,
00:00:35.380 --> 00:00:42.060
the open source project, stronger than ever. This is Talk Python To Me, episode 536, recorded January
00:00:42.440 --> 00:00:51.440
13th, 2026. Talk Python To Me, yeah, we ready to roll. Upgrading the code, no fear of getting old.
00:00:51.580 --> 00:00:59.960
Async in the air, new frameworks in sight, geeky rap on deck. Quark crew, it's time to unite. We
00:01:01.820 --> 00:01:06.460
Welcome to Talk Python To Me, the number one Python podcast for developers and data scientists.
00:01:06.980 --> 00:01:12.300
This is your host, Michael Kennedy. I'm a PSF fellow who's been coding for over 25 years.
00:01:12.940 --> 00:01:17.460
Let's connect on social media. You'll find me and Talk Python on Mastodon, Bluesky, and X.
00:01:17.710 --> 00:01:23.000
The social links are all in your show notes. You can find over 10 years of past episodes at
00:01:23.120 --> 00:01:27.400
Talk Python.fm. And if you want to be part of the show, you can join our recording live streams.
00:01:27.680 --> 00:01:31.580
That's right, we live stream the raw uncut version of each episode on YouTube.
00:01:32.180 --> 00:01:36.600
Just visit talkpython.fm/youtube to see the schedule of upcoming events.
00:01:36.860 --> 00:01:40.480
Be sure to subscribe there and press the bell so you'll get notified anytime we're recording.
00:01:41.480 --> 00:01:46.440
This episode is brought to you by CommandBook, a native macOS app that I built that gives
00:01:46.640 --> 00:01:48.680
long-running terminal commands a permanent home.
00:01:49.080 --> 00:01:51.080
No more juggling six terminal tabs every morning.
00:01:51.700 --> 00:01:56.340
Carefully craft a command once, run it forever with auto-restart, URL detection, and a full CLI.
00:01:56.780 --> 00:01:59.840
Download it for free at talkpython.fm/command book app.
00:02:00.520 --> 00:02:03.140
And it's brought to you by the Talk Python in Production Book,
00:02:03.700 --> 00:02:08.360
an inside look at 10 years of the real-world DevOps behind the Talk Python sites and apps.
00:02:08.640 --> 00:02:11.340
Check it out at talkpython.fm/DevOps book.
00:02:12.100 --> 00:02:14.220
Before we dive in, I have something excellent to announce.
00:02:14.440 --> 00:02:17.820
A few episodes back, I told you about our new AI integrations,
00:02:18.120 --> 00:02:21.880
the Talk Python MCP servers, and our llms.txt file,
00:02:22.300 --> 00:02:31.420
so that AI tools can tap into our over 550 episodes and 7.5 million words of info around the Python community and history.
00:02:32.080 --> 00:02:33.580
Well, I'm building on that now.
00:02:34.240 --> 00:02:37.120
Talk Python now has an open source CLI tool.
00:02:37.490 --> 00:02:41.960
You can search episodes, transcripts, guests, and even our courses right from your terminal.
00:02:42.260 --> 00:02:43.240
No browser required.
00:02:44.240 --> 00:02:49.040
It's fast too, backed by our optimized APIs, taking about five milliseconds of response time,
00:02:49.300 --> 00:02:51.140
plus, you know, whatever the internet ping time is.
00:02:51.680 --> 00:02:57.120
It supports rich text for humans, JSON for programs, and markdown output for AIs.
00:02:57.900 --> 00:03:04.540
You just install it with uvtoolinstall talk-python-cli, and check it out on GitHub.
00:03:04.920 --> 00:03:06.460
The link is in the podcast player show notes.
00:03:07.160 --> 00:03:09.560
I also wrote up a blog post on the hows and whys of it.
00:03:09.880 --> 00:03:14.100
Check that out over on the Talk Python blog at, well, talkpython.fm/blog.
00:03:14.780 --> 00:03:17.120
The full link to the exact article is in the show notes.
00:03:17.860 --> 00:03:18.680
All right, let's jump in.
00:03:20.100 --> 00:03:20.700
Hello, everyone.
00:03:21.220 --> 00:03:23.940
Sebastian, Patrick, Savannah, and Jonathan.
00:03:24.460 --> 00:03:25.580
Awesome to have you all here.
00:03:26.160 --> 00:03:27.460
Excited to talk about FastAPI Cloud.
00:03:28.120 --> 00:03:28.300
Welcome.
00:03:28.310 --> 00:03:28.460
Yes.
00:03:28.980 --> 00:03:29.620
Thanks for having me.
00:03:29.860 --> 00:03:30.100
Thank you.
00:03:30.240 --> 00:03:31.080
We're also ahead, Mike.
00:03:31.660 --> 00:03:32.640
What a project.
00:03:32.920 --> 00:03:34.420
It's been going on for a while.
00:03:34.880 --> 00:03:40.100
I've heard stuff from Sebastian that maybe something was brewing and all these things,
00:03:40.320 --> 00:03:42.780
but not too long ago, you all announced it.
00:03:43.020 --> 00:03:47.100
And I heard that FastAPI, some people have been using it recently.
00:03:47.500 --> 00:03:50.820
Some of the surveys show that some people use it for websites.
00:03:51.140 --> 00:03:51.560
I'm not sure.
00:03:51.860 --> 00:03:52.320
Rumors.
00:03:52.900 --> 00:03:53.180
Yeah, yeah.
00:03:53.380 --> 00:03:53.800
Rumors.
00:03:54.680 --> 00:03:55.080
Rumors.
00:03:55.440 --> 00:03:56.020
Oh, my gosh.
00:03:56.100 --> 00:03:58.060
I mean, congratulations on that.
00:03:58.100 --> 00:04:03.120
But before we dive into FastAPI and FastAPI Cloud, let's just do a quick introduction.
00:04:03.720 --> 00:04:04.320
Who are you?
00:04:04.380 --> 00:04:08.220
We'll just go around the Brady Bunch squares of our live stream here and start with Sebastian.
00:04:08.620 --> 00:04:09.680
You've been on the show a few times.
00:04:09.800 --> 00:04:14.380
In fact, you've been on the show just recently for a really fun episode, Sebastian.
00:04:14.760 --> 00:04:15.060
Who are you?
00:04:15.260 --> 00:04:16.519
In real, that was super fun.
00:04:17.019 --> 00:04:18.100
So, hello, everyone.
00:04:18.280 --> 00:04:20.299
I'm Sebastian Ramirez, or Tiangulo.
00:04:20.799 --> 00:04:22.300
I created FastAPI.
00:04:22.400 --> 00:04:26.200
That is this Python framework for building web APIs and backend.
00:04:26.940 --> 00:04:29.980
In case you've been living in a hole and haven't done any Python for 10 years.
00:04:30.500 --> 00:04:36.480
You also are famous for really pointing out the ridiculousness of modern tech recruiting.
00:04:36.800 --> 00:04:38.220
You know what I'm talking about?
00:04:38.580 --> 00:04:40.140
Yeah, you know, like it's fun.
00:04:40.280 --> 00:04:42.700
This is probably the thing that I am known for.
00:04:42.780 --> 00:04:47.700
It's for writing a tweet saying, yeah, what was it?
00:04:47.980 --> 00:04:52.460
that I saw a job asking for five years of experience in FastAPI,
00:04:52.920 --> 00:04:56.040
and I only had 2.5 since I created the thing.
00:04:56.140 --> 00:04:58.920
So you didn't qualify for the FastAPI job?
00:04:59.000 --> 00:05:00.460
I didn't qualify for that, yeah.
00:05:00.800 --> 00:05:03.260
And then the funny thing is, you know, like people sometimes,
00:05:03.940 --> 00:05:06.240
even people in Python itself, and tell me like,
00:05:06.400 --> 00:05:08.220
oh, wait, like you're, and I say like, oh, yeah,
00:05:08.270 --> 00:05:09.580
I created this thing called FastAPI.
00:05:09.700 --> 00:05:11.340
Oh, wait, okay, so what is FastAPI?
00:05:11.480 --> 00:05:14.440
Oh, wait, you are the guy from the meme,
00:05:14.900 --> 00:05:16.160
the meme about FastAPI.
00:05:16.160 --> 00:05:16.780
Are you serious?
00:05:17.440 --> 00:05:22.960
Yeah, you know, like suddenly that is super important that I am the guy for the meme about FastAPI.
00:05:23.260 --> 00:05:26.020
Not the guy from FastAPI, the guy from the meme.
00:05:26.740 --> 00:05:29.080
Oh my gosh, I saw you on TikTok. It was amazing.
00:05:29.840 --> 00:05:34.240
It was a live achievement. I wrote a viral tweet. So yeah, nice to meet you all.
00:05:34.360 --> 00:05:37.680
You know what? Sometimes your moment in the sun is not the one you expected.
00:05:37.920 --> 00:05:40.340
No, congratulations on how good FastAPI is.
00:05:40.340 --> 00:05:40.620
On the tweet.
00:05:41.820 --> 00:05:44.980
Exactly. You really nailed it. Patrick, welcome to the show.
00:05:45.160 --> 00:05:46.580
Nice to be here. Yeah, I'm Patrick.
00:05:47.040 --> 00:05:50.780
I guess the main thing I'm kind of known for in the community is like this library called
00:05:50.940 --> 00:05:54.820
Strawberry, which is similar to FastAPI, but instead of REST is for GraphQL.
00:05:55.130 --> 00:06:00.740
Other than that, I help organize PyCon Italy and I used to also do EuroPython as well,
00:06:00.940 --> 00:06:03.160
but I stopped because of way too many things.
00:06:03.550 --> 00:06:05.120
Yeah, that's pretty much me.
00:06:05.200 --> 00:06:06.780
How do you see GraphQL these days?
00:06:07.290 --> 00:06:08.220
Is it still popular?
00:06:08.500 --> 00:06:12.160
I think it's mostly popular in the enterprises, unfortunately.
00:06:12.800 --> 00:06:16.039
I'm a bit, to be honest, I'm a bit annoyed about the companies that do tooling around
00:06:16.060 --> 00:06:20.200
GraphQL because I don't know, I feel like they're not really pushing it forward. They're just,
00:06:20.380 --> 00:06:24.900
I don't know, trying to work with enterprises and that's it. Or maybe people think to AI.
00:06:25.140 --> 00:06:31.180
Yeah. It feels a little bit like the soap, soap, wisdom, XML, modern version. Savannah.
00:06:33.040 --> 00:06:33.180
Yeah.
00:06:34.740 --> 00:06:39.840
You like tapping out of being an organizer for EuroPython is like, you know, the classic
00:06:40.060 --> 00:06:44.180
open source oversubscribed doing all the things very relatable.
00:06:44.720 --> 00:06:44.880
Yeah.
00:06:45.030 --> 00:06:45.180
Yeah.
00:06:45.660 --> 00:06:46.280
But yeah, I'm Savannah.
00:06:46.760 --> 00:06:47.660
What can I say?
00:06:47.780 --> 00:06:52.360
I am on the Python Steering Council for 2096, which is very exciting.
00:06:52.640 --> 00:06:52.920
Congratulations.
00:06:53.340 --> 00:06:53.780
Oh, thank you.
00:06:53.980 --> 00:06:59.280
I am also the release manager for the upcoming version of Python, Python 3.16.
00:06:59.910 --> 00:07:03.800
And so that'll kick off later this year, which is really cool and very exciting.
00:07:04.320 --> 00:07:08.800
I work on CPython stuff, the JIT, arg parse, basically whatever needs help.
00:07:09.060 --> 00:07:09.880
It's kind of where you'll find me.
00:07:09.960 --> 00:07:10.160
Awesome.
00:07:10.760 --> 00:07:12.300
Congratulations on the Steering Council.
00:07:12.880 --> 00:07:15.000
And yeah, that's a lot of cool stuff.
00:07:15.540 --> 00:07:19.740
Hopefully we don't get a Python 4.0 right after 3.16
00:07:20.540 --> 00:07:22.960
because then your job will never end, is what I've learned.
00:07:23.240 --> 00:07:23.560
Yeah, yeah.
00:07:23.920 --> 00:07:27.920
Benjamin Peterson, Python 2.7 forever kind of situation.
00:07:28.460 --> 00:07:28.860
Yeah, yeah.
00:07:29.070 --> 00:07:32.920
I mean, release management is still, I mean, it's still quite a commitment.
00:07:33.140 --> 00:07:36.900
It's like seven-ish years when you think about all the staggered releases
00:07:36.990 --> 00:07:38.620
because you're a release manager 2.0
00:07:38.620 --> 00:07:40.700
and then you have the five-year maintenance cycle.
00:07:41.980 --> 00:07:45.800
So yeah, it's Python forever is what I only said.
00:07:45.960 --> 00:07:47.040
Yeah, it's probably not a fad.
00:07:47.120 --> 00:07:48.720
It's probably going to stick around, this Python thing.
00:07:50.400 --> 00:07:51.080
No, that's awesome.
00:07:51.360 --> 00:07:51.580
Congratulations.
00:07:51.940 --> 00:07:53.780
Also, cool with arg parse.
00:07:54.080 --> 00:08:04.680
I feel like that's making a strong comeback now that we have these AI things that can just put stuff together for us instead of like, oh, I need to depend on this library and that library.
00:08:04.700 --> 00:08:08.060
Like, I just need to take a few arguments and have a little help text.
00:08:08.120 --> 00:08:10.000
And it's like, well, you've already got this built-in thing.
00:08:10.120 --> 00:08:11.240
Oh, who knew?
00:08:11.420 --> 00:08:12.820
You know, people are like, oh, I didn't even know.
00:08:12.870 --> 00:08:15.800
I thought I used typer or click or something, right?
00:08:15.940 --> 00:08:18.320
There's, you know, the typers and clicks of the world.
00:08:18.430 --> 00:08:20.720
But sometimes you just want the simplest thing.
00:08:20.880 --> 00:08:22.740
And ArgParse is pretty great at that.
00:08:22.950 --> 00:08:27.900
Although it has many quirks that are probably and most definitely unfixable at this point.
00:08:28.220 --> 00:08:32.080
Because bugs are features when you have things that have been around as long as Python.
00:08:32.490 --> 00:08:35.000
But yeah, no, I mean, AI loves to write Python.
00:08:35.320 --> 00:08:39.240
I think it's like the language used the most, AI-generated code.
00:08:39.680 --> 00:08:42.039
I'll just say we live in weird times, very weird times.
00:08:42.539 --> 00:08:44.940
I would love a precedented time at some time.
00:08:45.440 --> 00:08:45.840
Exactly.
00:08:46.160 --> 00:08:46.220
Yeah.
00:08:46.320 --> 00:08:47.660
Can we just get the boring times?
00:08:48.000 --> 00:08:49.640
No, nothing interesting, please.
00:08:49.940 --> 00:08:55.460
What I said about GraphQL may sound like a bit of a smash, but I didn't mean it in a negative,
00:08:56.020 --> 00:08:56.940
super negative way anyway.
00:08:57.220 --> 00:09:02.500
Like it used to be all the enterprises were all about soap and wisdom and like subscribing
00:09:02.580 --> 00:09:03.060
your tooling.
00:09:03.460 --> 00:09:04.160
Please don't write me.
00:09:04.160 --> 00:09:05.780
I'm not trying to bash on your technology.
00:09:07.780 --> 00:09:08.140
All right.
00:09:08.800 --> 00:09:10.080
Jonathan, also welcome.
00:09:10.320 --> 00:09:10.440
Hi.
00:09:10.580 --> 00:09:14.080
Yeah, I'm not nearly as famous as everyone else in this call.
00:09:14.980 --> 00:09:20.420
I'm more infamous internally at FastAPI Cloud, I would say, for a bunch of things.
00:09:21.000 --> 00:09:23.860
I've heard of emojis or something along the lines of line.
00:09:23.920 --> 00:09:24.160
One Mima way.
00:09:24.300 --> 00:09:25.580
You're just one Mima way.
00:09:25.680 --> 00:09:26.820
Just one Mima way.
00:09:27.020 --> 00:09:27.800
Yeah, that's true.
00:09:28.400 --> 00:09:30.000
We keep piling them up internally.
00:09:30.560 --> 00:09:34.060
But yeah, I used to work with Patrick together for years, also on Strawberry.
00:09:34.360 --> 00:09:35.280
Same library as him.
00:09:35.540 --> 00:09:36.340
That's how I know him.
00:09:36.620 --> 00:09:40.300
And that's why I, well, made a weird sound when you said soap.
00:09:41.320 --> 00:09:44.940
I've been with FastAPI Cloud since EuroPython, actually, the last one.
00:09:45.220 --> 00:09:48.620
I promised Sebastian I would implement server-send events in FastAPI,
00:09:48.720 --> 00:09:54.220
and I haven't started with it yet at all, but somehow I'm still here.
00:09:54.290 --> 00:09:54.840
So that's great.
00:09:55.960 --> 00:10:00.420
Well, actually, yeah, and it was actually like a sneak peek, I guess.
00:10:00.540 --> 00:10:04.280
We already started having a bunch of chats and discussing what we do.
00:10:04.430 --> 00:10:05.980
Should we do it here? Should we do it there?
00:10:06.100 --> 00:10:06.660
What should we do?
00:10:07.140 --> 00:10:11.640
So like, yeah, it's something that is coming to FastAPI probably soon-ish.
00:10:11.800 --> 00:10:14.520
Like there was a lot of things that needed to happen before that.
00:10:14.700 --> 00:10:18.360
Like Patrick is slightly smiley, like, oh no, this is pressure.
00:10:19.740 --> 00:10:23.160
There were some things that needed to happen in FastAPI, as you know, dropping support for
00:10:23.420 --> 00:10:27.480
Pydantic version one or things like that, that just made the internal code so complex.
00:10:28.020 --> 00:10:32.820
And now that it's over, we can actually work more on improving performance, adding features
00:10:33.040 --> 00:10:33.760
and things like that.
00:10:34.220 --> 00:10:42.820
I definitely want to dive into how FastAPI Cloud has sort of influenced the whole FastAPI side of things.
00:10:43.480 --> 00:10:50.780
But I made aware that there is, in fact, an entire website, an entire website dedicated to the meme.
00:10:51.180 --> 00:10:54.680
Yeah. And out in the audience, we get, hey, everyone, is that the guy from the meme?
00:10:54.960 --> 00:10:56.980
And meme is greater than Nobel Prize.
00:10:57.480 --> 00:10:59.040
So, you know what?
00:10:59.460 --> 00:11:00.280
It may be true.
00:11:00.660 --> 00:11:01.220
It may be true.
00:11:01.240 --> 00:11:04.540
I recognize the person saying, this is the guy from the Ming.
00:11:04.720 --> 00:11:05.740
He might be my husband.
00:11:09.140 --> 00:11:09.580
Incredible.
00:11:11.500 --> 00:11:11.840
Incredible.
00:11:12.600 --> 00:11:16.100
All right, well, let's start with FastAPI Cloud,
00:11:16.920 --> 00:11:19.260
and then we'll bring it back around to the FastAPI.
00:11:19.380 --> 00:11:21.300
Let's talk origin story.
00:11:21.540 --> 00:11:23.700
So what is this FastAPI Cloud?
00:11:23.900 --> 00:11:24.240
Nice.
00:11:24.660 --> 00:11:27.600
So if you were looking at the FastAPI Labs website,
00:11:27.660 --> 00:11:29.600
that doesn't really show that much.
00:11:29.660 --> 00:11:33.680
If you click on the join the waiting list that takes you to the website for FastAPI Cloud,
00:11:34.200 --> 00:11:36.720
there we can see this is what we are building.
00:11:36.920 --> 00:11:38.120
This is the thing that we are doing.
00:11:39.120 --> 00:11:40.220
It's actually super simple.
00:11:40.400 --> 00:11:44.540
The funny thing is that the pitch, the explanation of the product is so short.
00:11:44.760 --> 00:11:45.520
So it's one command.
00:11:45.590 --> 00:11:46.600
It's FastAPI Deploy.
00:11:46.960 --> 00:11:51.400
You have a FastAPI app, you just hit FastAPI Deploy, and then it's on the cloud.
00:11:51.410 --> 00:11:52.520
We take care of everything.
00:11:52.590 --> 00:11:57.580
We build a thing, deploy it, handle HTTPS, auto-scaling, all this stuff.
00:11:57.920 --> 00:12:00.760
and then you can just like focus on building the application,
00:12:01.230 --> 00:12:01.580
building apps.
00:12:01.920 --> 00:12:03.760
The funny thing is that it's super short to explain,
00:12:03.880 --> 00:12:06.100
but then building it is so cold, Blake.
00:12:06.220 --> 00:12:07.020
I'm glad it's so short.
00:12:07.220 --> 00:12:08.000
So thanks for being here.
00:12:08.080 --> 00:12:08.960
That was a great show, y'all.
00:12:09.260 --> 00:12:10.040
Well, no, just kidding.
00:12:11.120 --> 00:12:14.960
I think it's a little bit like Jupyter Notebooks
00:12:15.050 --> 00:12:17.960
in that sense that like you all are taking one for the team
00:12:18.620 --> 00:12:21.600
so that other people can have a simple experience.
00:12:22.500 --> 00:12:25.100
Whereas, you know, it's like those Jupyter folks,
00:12:25.130 --> 00:12:27.620
they write tons of TypeScript and do all sorts of things
00:12:27.640 --> 00:12:30.380
that nobody wants to necessarily do in the data science space
00:12:31.040 --> 00:12:32.760
so that you can just drag your widgets around.
00:12:33.000 --> 00:12:33.360
You know what I mean?
00:12:33.500 --> 00:12:35.060
I think that is a great analogy.
00:12:35.360 --> 00:12:39.000
I feel like the deployment space, it's a bit of a mixed bag.
00:12:39.500 --> 00:12:44.540
And I've been really frustrated to the point such that I wrote a book about it,
00:12:45.020 --> 00:12:47.340
that I think about an alternative,
00:12:48.000 --> 00:12:51.240
that I think over the last five plus years,
00:12:51.580 --> 00:12:55.080
it's just trended towards a little more complex, a little more complex.
00:12:56.000 --> 00:12:57.460
could we just add one of these things?
00:12:57.680 --> 00:12:58.760
And oh, now we got these three.
00:12:58.860 --> 00:13:01.920
We need one more thing to like make sure those things are doing, you know what I mean?
00:13:02.500 --> 00:13:07.180
And it's just like, wow, why are there 200 choices in my console to use this?
00:13:07.440 --> 00:13:08.780
Which is like kind of funny, right?
00:13:08.920 --> 00:13:12.100
Because I feel like a lot of these companies started with this, like,
00:13:12.280 --> 00:13:15.300
I don't want to understand all the ins and outs of all the infrastructure
00:13:15.680 --> 00:13:17.400
that comes with the cloud service provider.
00:13:17.580 --> 00:13:19.840
And that's really complicated to understand because I'm an app dev
00:13:19.960 --> 00:13:22.380
and I don't know anything about, you know, whatever, right?
00:13:22.520 --> 00:13:25.400
Now we're like, I don't know, kind of slowly accumulating.
00:13:25.460 --> 00:13:30.480
complexity but i think one of the cool things about what we're building and i like i've worked
00:13:30.480 --> 00:13:35.800
on cloud tooling before is like this is like just spoke for python developers and i think that's like
00:13:35.940 --> 00:13:41.220
quite like unique in that like we are really trying to like bring the bleeding edge and like
00:13:41.240 --> 00:13:45.420
all the new tooling that people are using and making sure that we play well with like uv and
00:13:45.520 --> 00:13:52.180
like i think like the there's a lot of thought and care put into that by the team that's a super good
00:13:52.200 --> 00:13:56.880
point. I mean, I remember Azure came out with like, here's your platform as a service. You just
00:13:57.280 --> 00:14:01.640
upload your web app and we'll just take it and go. And now that thing is so complicated along with
00:14:01.860 --> 00:14:06.160
many, many others, right? It's not just them. It's you've got AWS, you've got Vercel. There's
00:14:06.240 --> 00:14:09.900
lots of things we could point at for, wow, there's a lot of options here, you know?
00:14:09.960 --> 00:14:13.920
And then there are a lot of tools and like, you know, like many tools and many companies are also
00:14:14.040 --> 00:14:18.379
like doing a great job at many of the things that they are doing. But in many cases, it's just so
00:14:18.400 --> 00:14:19.500
complex, it's so complicated.
00:14:19.740 --> 00:14:25.340
You know, like I was, I have always been so, what, so adamant, I think is the word, to
00:14:25.700 --> 00:14:27.580
just teaching people how to use the tools.
00:14:28.000 --> 00:14:33.540
I think I have the most documentation about how to deploy things on your own than any other
00:14:33.760 --> 00:14:33.920
framework.
00:14:34.020 --> 00:14:35.360
I have so much information.
00:14:35.460 --> 00:14:36.940
MARK MANDEL: I hear that all the time from people.
00:14:37.140 --> 00:14:41.100
They say one of the reasons they chose FastAPIs is because how clear the documentation
00:14:41.440 --> 00:14:41.760
was, you know?
00:14:41.760 --> 00:14:44.979
FRANCESC CAMPOY: And then the thing is, you know, like just learning all those concepts
00:14:45.000 --> 00:14:47.520
and learning all the stuff that needs to be learned
00:14:47.750 --> 00:14:48.740
just to deploy something,
00:14:48.810 --> 00:14:50.900
and then you barely have the minimum.
00:14:51.460 --> 00:14:53.480
It's like, this is just too much.
00:14:53.640 --> 00:14:54.740
It's too much complacency.
00:14:54.960 --> 00:14:58.340
I think for me, I guess personally,
00:14:58.520 --> 00:15:00.400
my analogy is that FastAPI Cloud
00:15:00.560 --> 00:15:03.280
is the equivalent of what FastAPI is
00:15:03.350 --> 00:15:05.800
to building web APIs and backend.
00:15:06.140 --> 00:15:08.340
You could do the same with any other framework.
00:15:08.390 --> 00:15:09.580
You could validate data.
00:15:09.650 --> 00:15:10.940
You could generate open API.
00:15:11.070 --> 00:15:12.280
You could have automatic docs,
00:15:12.640 --> 00:15:19.340
But you will probably have to do a lot of the wiring yourself and making sure that it's actually correct and that it doesn't explode, all that stuff.
00:15:19.710 --> 00:15:25.600
That is, you know, like we are trying to do a lot of that work for the final users.
00:15:25.800 --> 00:15:26.840
Yeah, and I think it's great.
00:15:27.260 --> 00:15:36.500
I think it's really nice to just provide this on-ramp because, as you said at the opening, when I asked, you know, what the origin story is just FastAPI deploy.
00:15:37.050 --> 00:15:38.300
That solves so many stories.
00:15:38.580 --> 00:15:42.920
But I'm sure behind the scenes, what happens is just about as simple as that.
00:15:44.280 --> 00:15:44.940
Oh my gosh.
00:15:45.060 --> 00:15:45.720
About that.
00:15:48.460 --> 00:15:51.820
Some of us don't even get to write Python anymore to make all of this happen.
00:15:52.300 --> 00:15:54.480
So speaking about taking one for the team.
00:15:56.040 --> 00:15:57.620
Yeah, that is taking one for a team, right?
00:15:57.740 --> 00:15:58.200
It is.
00:16:00.220 --> 00:16:02.660
This portion of Talk Python To Me is brought to you by us.
00:16:02.980 --> 00:16:07.520
I'm thrilled to announce a brand new app built for developers created by yours truly.
00:16:07.980 --> 00:16:09.140
It's called Command Book.
00:16:09.930 --> 00:16:11.200
You know that thing you do every morning?
00:16:11.880 --> 00:16:14.460
Open up six terminal tabs, CD into this directory,
00:16:14.980 --> 00:16:16.020
activate that virtual environment,
00:16:16.550 --> 00:16:17.960
run the server with --reload.
00:16:18.260 --> 00:16:20.960
Now, CD somewhere else, start the background worker,
00:16:21.360 --> 00:16:23.940
another tab for Docker, another one to tail production logs.
00:16:24.400 --> 00:16:27.120
Every tab just says Python, Python, Python, Docker tail.
00:16:28.220 --> 00:16:29.160
And you're clicking through them going,
00:16:29.620 --> 00:16:30.840
which Python was that again?
00:16:31.260 --> 00:16:32.040
Where my app is running?
00:16:32.620 --> 00:16:35.560
Then sometime later, your dev server silently dies
00:16:35.750 --> 00:16:36.879
because it tried to reload
00:16:36.900 --> 00:16:38.420
while you're in the middle of a code edit,
00:16:39.020 --> 00:16:41.580
unmatched brace, a half-written import, or something.
00:16:42.320 --> 00:16:43.340
Now you're hunting through tabs
00:16:43.360 --> 00:16:45.800
to figure out which process crashed and how to restart it.
00:16:46.280 --> 00:16:47.260
My app, CommandBook,
00:16:47.500 --> 00:16:50.820
gives all of these long-running commands a permanent home.
00:16:51.380 --> 00:16:52.560
You save a command once,
00:16:53.000 --> 00:16:54.180
the working directory, the environment,
00:16:54.500 --> 00:16:55.640
three commands like git pull,
00:16:55.980 --> 00:16:57.640
and from then on, you just click run.
00:16:58.180 --> 00:16:59.540
You can even group commands together
00:16:59.840 --> 00:17:01.640
to start and stop everything for a project
00:17:01.880 --> 00:17:02.520
with a single click.
00:17:02.960 --> 00:17:05.040
It also has what I call honey badger mode,
00:17:05.260 --> 00:17:06.439
auto restart on crash.
00:17:07.220 --> 00:17:09.640
so when your dev server goes down mid-reload,
00:17:10.199 --> 00:17:12.079
Command Book just brings it right back up
00:17:12.360 --> 00:17:14.400
and does so over and over until the code is fixed.
00:17:15.020 --> 00:17:16.819
It also detects URLs from your output
00:17:17.079 --> 00:17:19.400
so you're never scrolling through thousands of lines of logs
00:17:19.600 --> 00:17:21.560
just to figure out how to reopen your web app.
00:17:22.079 --> 00:17:23.780
And it shows you uptime, memory usage,
00:17:24.120 --> 00:17:25.959
and all sorts of cool things about your process.
00:17:26.660 --> 00:17:28.640
The whole thing is a native macOS app.
00:17:28.780 --> 00:17:31.200
No Electron, no Chromium, just 21 megs.
00:17:31.640 --> 00:17:32.960
And it comes with a full CLI
00:17:33.180 --> 00:17:35.040
so anything you've configured in the UI,
00:17:35.420 --> 00:17:37.900
you can fire off from your terminal with just a single command.
00:17:38.440 --> 00:17:41.580
Right now, it's macOS only, but if there's enough interest,
00:17:41.840 --> 00:17:43.840
I'll build a Windows version too, so let me know.
00:17:44.660 --> 00:17:48.580
Please check it out at talkpython.fm/commandbook app.
00:17:49.140 --> 00:17:51.640
Download it for free, level up your developer workflow.
00:17:52.080 --> 00:17:53.720
The link is in your podcast player's show notes.
00:17:54.320 --> 00:17:56.380
That's talkpython.fm/commandbook.
00:17:56.580 --> 00:17:58.500
I really hope you enjoy this new app that I built.
00:18:00.320 --> 00:18:02.540
Let's save the internals for a little bit later.
00:18:02.940 --> 00:18:04.440
Maybe what we could do right now,
00:18:04.540 --> 00:18:12.300
Maybe we could do a bit of a walkthrough of just kind of what it's like to set up an app from scratch, right?
00:18:12.480 --> 00:18:12.700
Nice.
00:18:12.900 --> 00:18:20.220
I see that uv is here, which is, I've been certainly an advocate for uv in all sorts of deployment,
00:18:20.260 --> 00:18:25.380
but especially when you have like repeated build type of scenarios for like Docker,
00:18:26.060 --> 00:18:31.680
Docker Compose or Kubernetes or whatever, uv makes that stuff so much faster and so on.
00:18:31.780 --> 00:18:37.140
So who would like to be my guide that just kind of talks us through what it means to set up a new project here?
00:18:37.300 --> 00:18:41.500
I mean, there is like this really nice command that Savannah built, just FastAPI new,
00:18:41.920 --> 00:18:44.960
which I think is something like, I don't know, like super helpful.
00:18:45.160 --> 00:18:46.660
What does FastAPI new do?
00:18:46.880 --> 00:18:51.540
Like, is that kind of a cookie cutter-esque experience or what is it?
00:18:51.600 --> 00:18:52.080
Yes, exactly.
00:18:52.160 --> 00:18:56.960
At the moment, Onesco holds a super basic FastAPI application using uv.
00:18:57.360 --> 00:19:00.080
It also installs dependencies, creates a folder, everything that you need.
00:19:00.440 --> 00:19:03.240
In future, I think we're going to plan support for templates
00:19:03.500 --> 00:19:05.940
so you can build multiple kind of things as well.
00:19:06.210 --> 00:19:08.840
But for now, it's just basically just uv FastAPI new,
00:19:09.220 --> 00:19:10.640
sorry, uvx FastAPI new,
00:19:10.910 --> 00:19:12.540
and then that scaffolds the project for you.
00:19:12.900 --> 00:19:14.680
I don't know if you want to try it live or...
00:19:14.700 --> 00:19:15.440
No, go ahead.
00:19:15.580 --> 00:19:17.980
Just, I would think it might disrupt you.
00:19:18.030 --> 00:19:19.080
Just let's talk us through it.
00:19:19.240 --> 00:19:19.920
It could work.
00:19:20.240 --> 00:19:21.740
I'm just going to put that out there.
00:19:21.880 --> 00:19:23.000
I'll tell you the most insane,
00:19:23.330 --> 00:19:25.320
like let's do that live on the podcast experience.
00:19:25.520 --> 00:19:28.160
I'm pretty sure, yeah, this is definitely the most insane.
00:19:28.620 --> 00:19:36.320
I had Matthew Rocklin on from Coiled, and those guys are all about like, hey, we're going to scale up like a bunch of available servers for you, right?
00:19:36.700 --> 00:19:37.940
So that you can do your data science.
00:19:38.020 --> 00:19:41.000
Like I want to do some ML thing, and it needs 500 servers.
00:19:41.600 --> 00:19:45.520
So during the podcast, he's, oh, let me just spin up 2,000 EC2 instances.
00:19:45.800 --> 00:19:46.060
Hold on.
00:19:47.020 --> 00:19:49.040
And then we ran some code on it during the show.
00:19:49.100 --> 00:19:50.200
And he's like, oh, let's try that on ARM.
00:19:50.380 --> 00:19:53.040
And then spin up another 2,000 on ARM Linux machines.
00:19:53.120 --> 00:19:54.180
I'm like, okay, that's nuts.
00:19:55.440 --> 00:19:55.840
But let's just.
00:19:56.420 --> 00:19:57.180
That's a lot of power.
00:19:57.260 --> 00:20:01.960
So I was impressed, but Patrick, sorry, I kind of did realty there.
00:20:02.500 --> 00:20:02.980
Let's talk through it.
00:20:03.020 --> 00:20:08.260
Yeah, so you do uvx FastAPI app, FastAPI new, then you specify the name of the application.
00:20:08.740 --> 00:20:10.080
And that's almost there.
00:20:10.080 --> 00:20:13.240
You just need one more command to deploy, which is FastAPI deploy.
00:20:13.640 --> 00:20:17.660
The first time it's going to ask you to log in or join the waiting list if you haven't been invited yet.
00:20:17.940 --> 00:20:18.940
It's still in beta.
00:20:19.500 --> 00:20:20.900
And then you follow the steps.
00:20:21.200 --> 00:20:24.640
So like FastAPI deploy, log in, decide the team.
00:20:25.040 --> 00:20:27.820
If you have multiple teams, design the application name,
00:20:28.220 --> 00:20:31.020
and then you wait a few seconds and the application is going to be live.
00:20:31.100 --> 00:20:36.220
And just to be clear, FastAPI new is not required if you already have a FastAPI app.
00:20:36.520 --> 00:20:39.780
If you've already written your own code and you have your application,
00:20:40.120 --> 00:20:42.940
you can just go right into logging in and deploying.
00:20:43.440 --> 00:20:46.120
This is just so that if you're starting something new,
00:20:46.500 --> 00:20:49.900
you don't have to do any thinking about all the right things that need to be there.
00:20:50.180 --> 00:20:52.160
So this is more of a greenfield application.
00:20:52.880 --> 00:20:53.960
I'm bootstrapping a project.
00:20:54.240 --> 00:20:56.660
Right, right, because you want to have the best structure.
00:20:57.560 --> 00:20:58.980
Now, it uses uv.
00:20:59.420 --> 00:21:00.240
It is nodes required.
00:21:00.420 --> 00:21:03.900
Yeah, I was going to say, do I have to use the uv project management type of thing?
00:21:04.190 --> 00:21:08.100
Do I have to use the uv.lock files and uv add uv sync?
00:21:08.360 --> 00:21:09.480
Can I do requirements.txt?
00:21:09.640 --> 00:21:10.380
What's the story there?
00:21:10.500 --> 00:21:13.320
Yes, so we support uv with uv lock.
00:21:13.390 --> 00:21:16.860
We also support the, forget the name, the other, the PyLock file.
00:21:17.200 --> 00:21:19.580
And we also support plain requirements.txt.
00:21:19.980 --> 00:21:22.200
And maybe something else, I don't know, Jonathan, can you?
00:21:22.700 --> 00:21:23.720
PyLock's pretty new, right?
00:21:23.900 --> 00:21:26.520
I think Brett Cannon just got that out pretty recently, right?
00:21:26.820 --> 00:21:27.680
Brett was pretty excited.
00:21:27.980 --> 00:21:28.360
I know.
00:21:29.240 --> 00:21:29.960
Implemented that.
00:21:30.240 --> 00:21:30.660
Oh, was he?
00:21:30.850 --> 00:21:31.620
Okay, I'm sure he was.
00:21:31.800 --> 00:21:32.160
That's awesome.
00:21:32.260 --> 00:21:33.740
He put years of work into that.
00:21:33.860 --> 00:21:38.100
And he also said that one of the motivations was also like, you know, like cloud providers.
00:21:38.560 --> 00:21:39.200
So it's like, yes.
00:21:40.600 --> 00:21:49.220
The other thing is like, you know, if you use other different package managers, if they use the standard pyproject.toml format, that will also be supported.
00:21:49.500 --> 00:21:56.300
That means that, you know, like if you use PDM or if you use poetry with one of the recent versions, like that will work.
00:21:56.600 --> 00:22:03.100
If you use a very old version of poetry or like you use some other strange package manager or something, that will probably be problematic.
00:22:03.500 --> 00:22:08.440
But for like most of the use cases that use the standard package formats, it will just work.
00:22:08.640 --> 00:22:14.080
And if you use uv, then like you're going to have the best experience because we are fans of uv and Astral.
00:22:14.220 --> 00:22:19.380
They've definitely put a dent in the way that sort of Python gets started and making that a lot easier.
00:22:19.490 --> 00:22:20.500
So it totally makes sense.
00:22:21.310 --> 00:22:28.920
And also, I noticed, speaking of uv, that there's, at least in the recommended way, or the way in the docs, let's say,
00:22:29.580 --> 00:22:32.240
it doesn't say, here's how you install FastAPI.
00:22:32.650 --> 00:22:41.660
You just, here's how you run FastAPI-new, leveraging uv, which then will silently install and manage.
00:22:42.120 --> 00:22:43.260
All right, that's pretty neat.
00:22:43.420 --> 00:22:46.960
That helps you guys tell a simpler story, right?
00:22:47.350 --> 00:22:51.380
Instead of, here's how you create the virtual environment to install our thing and so on, you know?
00:22:51.380 --> 00:22:56.340
The idea is to make it like, as I was saying, just super simple for people just to start from scratch.
00:22:56.680 --> 00:23:00.760
Like no idea how to create an app, how to start, how to create an environment.
00:23:00.890 --> 00:23:03.340
It's just you run this command and you're off to go.
00:23:03.760 --> 00:23:06.200
Off to the races, I'm missing sands.
00:23:06.820 --> 00:23:09.460
Anyway, that's what Colombians do.
00:23:09.920 --> 00:23:17.880
But then if you already have an app, you have like, you know, like anything with FastAPI standard installed, then like that also just works.
00:23:18.010 --> 00:23:21.000
And Savannah, you pointed out that it doesn't have to be a new project.
00:23:21.620 --> 00:23:23.860
If you want to start from an existing one, that's totally fine.
00:23:24.300 --> 00:23:28.820
But what do I got to do if I'm starting from, if I'm migrating an existing one?
00:23:29.040 --> 00:23:30.320
Like how easy or hard is this?
00:23:30.580 --> 00:23:36.860
I have some like legacy project demo apps I've built at other companies I've worked with that have used FastAPI.
00:23:37.120 --> 00:23:44.460
And I literally just ran like FastAPI login and then FastAPI deploy and it just worked, which felt really magical.
00:23:44.740 --> 00:23:58.860
Right. Like I think that's like, I don't know, like having worked on cloud products for quite a while, like I think one of the biggest gaps is like the just I don't know, like the disparity between like my local dev environment and what is actually like lives up in the cloud somewhere.
00:23:59.360 --> 00:24:08.160
And so being able to just run one command and having the project as it exists on my machine go and work somewhere without having to think about like the infrastructure.
00:24:08.340 --> 00:24:14.920
And of course, like, you know, we want to be like amenable to folks who do want a little bit, you know, like higher touch.
00:24:15.480 --> 00:24:19.280
But we also want to work for people who are like learning FastAPI and Python, right?
00:24:19.400 --> 00:24:22.240
Like educators and people that are teaching Python.
00:24:22.420 --> 00:24:26.600
I think this is like something that you've had some interest in as well from those folks.
00:24:26.720 --> 00:24:44.200
Yeah, I was just listening to the Teaching Python podcast books just the other day and thinking, you know, like this, when I look at this, I know this is not necessarily your focus, but certainly people who are trying to teach a class, be it college class or high school class or whatever.
00:24:44.840 --> 00:24:49.020
And if you build anything on the web, the next question is, this is cool.
00:24:49.340 --> 00:24:50.420
How do I share it with people?
00:24:50.620 --> 00:24:51.800
And then they're like, oh, no.
00:24:52.420 --> 00:24:53.500
Oh, no.
00:24:53.720 --> 00:24:54.080
Hold on.
00:24:54.280 --> 00:24:55.560
Like coding boot camps, right?
00:24:55.640 --> 00:25:01.780
Like if you're teaching someone how to write Python or how to build an API with FastAPI,
00:25:02.110 --> 00:25:06.480
like actually setting up the environment for them to deploy is not part of it, right?
00:25:06.720 --> 00:25:08.660
Like that's not actually part of the curriculum.
00:25:08.840 --> 00:25:12.880
It's like this peripheral thing that ends up eating up a bunch of the educator's time or
00:25:12.890 --> 00:25:16.680
the student's time trying to understand both like how to write code and then also understand
00:25:16.840 --> 00:25:17.240
cloud stuff.
00:25:17.520 --> 00:25:20.380
And that's like a lot to ask people when they're fresh up the gate.
00:25:20.520 --> 00:25:23.720
I feel the same way about like tutorials and stuff at conferences.
00:25:24.200 --> 00:25:25.240
Yeah, totally.
00:25:25.780 --> 00:25:29.820
Yeah. Or training sessions. If you're doing like corporate training or like, they're all like,
00:25:29.940 --> 00:25:36.120
Oh, well, let's get everybody's machine working. There goes an hour and whatever. But yeah,
00:25:36.140 --> 00:25:40.520
if you can just say, look, I think when you're either, when you're trying to learn something,
00:25:40.960 --> 00:25:45.860
you'll be it through school or on your own or through these like more structured ways,
00:25:46.180 --> 00:25:50.760
like bootcamps and training and so on. I think if it's not the main purpose,
00:25:51.380 --> 00:25:56.200
I feel so often there's like, we're going to do 20 steps for four hours before you get any sort of
00:25:56.520 --> 00:26:01.080
reward of what you've done. And if you can go, okay, do you have it running? Okay, now you run
00:26:01.180 --> 00:26:04.880
this command. Look, now it's on the internet. Like, oh, wait, awesome. I got an app on the internet.
00:26:05.140 --> 00:26:09.780
Everybody look at me. You know what I mean? And I think shortening that cycle to where people can
00:26:10.000 --> 00:26:14.780
have that aha moment. And then later they can dive into like, well, how is it really working? And what
00:26:14.780 --> 00:26:21.340
do we really need to understand? But that quick iteration cycle, especially in the early parts of
00:26:21.360 --> 00:26:24.980
in new tech. It's really important. But also, you know, like down the line as well, I think,
00:26:25.280 --> 00:26:29.400
like, I don't know, there are so many things that I have been wanting to build and I don't,
00:26:29.780 --> 00:26:34.320
but I didn't because it was just so complex to deploy stuff. You know, like knowing,
00:26:34.680 --> 00:26:39.560
knowing how to do the whole thing, how to set up the clusters, the machines, install the Linux
00:26:40.299 --> 00:26:44.060
systems, deploy the cluster, whatever, like all that stuff, deploy the things,
00:26:44.360 --> 00:26:49.940
handling load balancers and HTTPS. I'm like, you know, like I know how to do that. I built one of
00:26:49.960 --> 00:26:54.400
the most popular websites teaching how to use Docker Swarm, which was like the contender
00:26:54.620 --> 00:26:56.160
before Kubernetes won everything.
00:26:56.580 --> 00:26:56.960
I like it.
00:26:57.380 --> 00:27:02.520
But still, it's just so complicated, like doing all those steps that are like, yeah, no, I'll
00:27:02.660 --> 00:27:03.380
just not do it.
00:27:04.000 --> 00:27:04.780
Like some other day.
00:27:05.360 --> 00:27:09.500
Now I can just like play around and do random stuff and just like deploy when it just works.
00:27:09.860 --> 00:27:11.300
It is, I really like that.
00:27:11.300 --> 00:27:16.220
I guess like coming back to that, like taking one for the team point earlier, like I feel
00:27:16.240 --> 00:27:20.860
like building Python tooling. It's kind of like taking one for the team sometimes because you have
00:27:20.860 --> 00:27:25.920
these folks that are like, you know, brand new to Python. Like Python is an extremely approachable
00:27:26.000 --> 00:27:30.160
language for people who are new to writing code. But then, you know, we also want to make FastAPI
00:27:30.420 --> 00:27:34.760
cloud work for someone that's building like an enterprise grade application, right? And so like,
00:27:35.240 --> 00:27:41.159
like pretty wide spectrum of folks with like a million different use cases and different types
00:27:41.180 --> 00:27:45.760
of applications they want to deploy with different constraints and like security stuff.
00:27:46.180 --> 00:27:49.540
And like, so yeah, I think, I don't know, maybe that's just like Python tooling.
00:27:50.060 --> 00:27:53.600
It's a lot of work, I guess, to like build something that works for the masses.
00:27:54.000 --> 00:27:57.000
Yeah, well, it's certainly tough to make something that feels simple,
00:27:57.520 --> 00:28:01.260
but it's not overly simplistic, you know, that can actually solve the problems.
00:28:01.540 --> 00:28:04.200
Has the right knobs for the right users too, right?
00:28:04.300 --> 00:28:07.920
I would argue we're not only trying to do it simple and easy.
00:28:08.220 --> 00:28:12.440
I feel like we're choosing a particular flavor of simple, which is...
00:28:13.400 --> 00:28:14.880
We have this discussion a few times.
00:28:15.080 --> 00:28:18.620
It's like, if you make a cloud, how do we make it feel Pythonic?
00:28:18.760 --> 00:28:20.480
What does that mean in a cloud setting?
00:28:20.900 --> 00:28:25.340
We talk about Pythonic libraries, Pythonic coding style in the community a lot.
00:28:25.700 --> 00:28:29.620
And now we kind of try to transfer that flavor, that feeling to the cloud
00:28:29.700 --> 00:28:33.720
and make everything around that feel just like we want our libraries to feel.
00:28:34.020 --> 00:28:36.960
So you feel at home as a Python developer and it just feels right.
00:28:37.280 --> 00:28:40.160
So that's extra step on top of making it simple.
00:28:40.560 --> 00:28:41.560
And we discuss that a lot.
00:28:41.820 --> 00:28:42.740
That's how I feel about it.
00:28:42.770 --> 00:28:43.160
I love it.
00:28:43.170 --> 00:28:46.860
I think it's one of the coolest things about this team.
00:28:47.440 --> 00:28:50.280
Like, you know, like people are being able to hear a few of us.
00:28:50.360 --> 00:28:55.040
There's like, there are like a bunch of others, but like that each one of us is so passionate
00:28:55.230 --> 00:28:57.320
about the things that we are working on.
00:28:57.760 --> 00:29:01.780
So like, you know, like each one of us is trying to make the best out of the things that
00:29:01.960 --> 00:29:02.540
we are building.
00:29:02.860 --> 00:29:07.040
And then like, we are so passionate about the thing that we care about and that we are building.
00:29:07.160 --> 00:29:10.740
that I think that ends up being an amazing result.
00:29:11.000 --> 00:29:12.360
For example, the CLI.
00:29:12.660 --> 00:29:16.960
We wanted to have some specific, you know, like behavior,
00:29:17.140 --> 00:29:18.140
some look and feel.
00:29:18.220 --> 00:29:22.200
And like we wanted to be able to have like the best kind of CLIs.
00:29:22.320 --> 00:29:25.700
So Patrick went ahead and built this bunch of tooling
00:29:25.840 --> 00:29:27.380
that we needed to be able to have it
00:29:27.460 --> 00:29:28.720
and like made it open source and everything.
00:29:29.160 --> 00:29:32.780
So we could have this great experience when working with CLIs.
00:29:33.140 --> 00:29:35.859
Jonathan recently was doing so much stuff
00:29:35.880 --> 00:29:38.580
about the something that caches and handling security,
00:29:38.940 --> 00:29:40.680
making sure that everything was super secure,
00:29:41.060 --> 00:29:42.420
super fast, super snappy.
00:29:42.800 --> 00:29:46.220
You know, like Alejandra is super careful about all the UI.
00:29:46.740 --> 00:29:48.820
Martin is super careful about all the infra.
00:29:49.200 --> 00:29:52.940
You know, it's like this passionate mess,
00:29:53.320 --> 00:29:54.420
which is a word I just made up.
00:29:57.340 --> 00:29:58.600
This, Alejandra goes and says,
00:29:58.640 --> 00:30:01.220
like, this thing doesn't have the proper margins.
00:30:01.320 --> 00:30:02.920
We need to increase this a little bit.
00:30:02.980 --> 00:30:04.340
I don't like it.
00:30:04.360 --> 00:30:05.360
She just goes and fixes it.
00:30:05.600 --> 00:30:06.100
The same with Marvin.
00:30:06.190 --> 00:30:09.340
He says, like, we need to have, like, this sort of thing in infrastructure.
00:30:09.550 --> 00:30:12.040
And, like, just comes and tells me, hey, we are doing this.
00:30:12.140 --> 00:30:12.800
And he's like, yes, sir.
00:30:13.340 --> 00:30:16.260
Like this with the OpenVPN, like, Unix, for example,
00:30:16.350 --> 00:30:18.100
that is mainly focused on the open source,
00:30:18.320 --> 00:30:21.960
is constantly looking at all the discussions, PRs, conversations,
00:30:22.340 --> 00:30:24.840
making sure that everything that we do, that doesn't.
00:30:24.840 --> 00:30:26.300
So why, you know, like, there have been, like,
00:30:26.810 --> 00:30:31.159
recently way more releases of FastAPI friends of the open source projects
00:30:31.620 --> 00:30:33.520
and very fast book fixes,
00:30:34.150 --> 00:30:37.060
very fast responses to handle everything for the community.
00:30:37.600 --> 00:30:40.360
Now we actually have people that is paying attention constantly
00:30:40.720 --> 00:30:41.460
to what is happening,
00:30:42.320 --> 00:30:43.360
what are the things that we have to do,
00:30:43.700 --> 00:30:46.620
and that really care about that part as well.
00:30:46.650 --> 00:30:50.220
So I think this extreme care about what we are doing.
00:30:50.440 --> 00:30:52.180
You know, like Savannah is making Python.
00:30:53.060 --> 00:30:56.860
This detail that each one of us cares so, so much
00:30:57.100 --> 00:30:58.500
about each one of the things that we build,
00:30:59.540 --> 00:31:01.620
making sure that the product is actually amazing.
00:31:01.840 --> 00:31:03.140
It's as good as it can be,
00:31:03.280 --> 00:31:05.500
and we can all feel at home when...
00:31:06.940 --> 00:31:08.920
I get so excited for talking about it
00:31:08.980 --> 00:31:12.140
because I really enjoy the end result of the product
00:31:12.220 --> 00:31:13.280
and of being able to use it.
00:31:13.820 --> 00:31:15.020
I would use it in the end.
00:31:15.140 --> 00:31:16.420
I would use to work with it.
00:31:16.800 --> 00:31:17.560
It's super simple.
00:31:17.660 --> 00:31:18.300
Yeah, that's awesome.
00:31:18.480 --> 00:31:19.680
Hey, let me adjust your mic real quick.
00:31:20.140 --> 00:31:21.840
I think it was like ducking,
00:31:22.300 --> 00:31:23.080
ducking out a little bit.
00:31:23.080 --> 00:31:24.000
We just went through a lot,
00:31:24.140 --> 00:31:26.399
a lot of content and a lot of sweating
00:31:26.420 --> 00:31:31.380
because your microphone went through like six different stages of weirdness.
00:31:31.720 --> 00:31:39.180
I think that really leads to like something I wanted to talk about is just what impact has this had on FastAPI?
00:31:39.180 --> 00:31:44.640
And before you jump in and answer that question, everyone, there's especially I think with Astral,
00:31:44.820 --> 00:31:49.920
but with because they've had so much success, there's been an undercurrent of concern of like,
00:31:49.920 --> 00:31:53.200
oh, my gosh, commercialism is getting into our open source.
00:31:53.480 --> 00:31:56.440
And what if it pollutes it and causes these negative aspects?
00:31:57.560 --> 00:32:02.500
But just hearing all of the energy around FastAPI with so many people,
00:32:03.140 --> 00:32:05.580
because of FastAPI Cloud, that's super neat.
00:32:05.770 --> 00:32:07.260
So I wanted to throw out to you all,
00:32:07.660 --> 00:32:12.100
how has this building FastAPI Cloud and the existence of FastAPI Cloud
00:32:12.300 --> 00:32:14.840
been giving back to FastAPI, I guess?
00:32:14.980 --> 00:32:17.560
I'm waiting to see if someone will speak FastAPI.
00:32:18.760 --> 00:32:20.580
I'm always the one that is speaking the most.
00:32:22.400 --> 00:32:23.920
I mean, it might be your project.
00:32:24.220 --> 00:32:25.680
Like, you may have started the project.
00:32:25.900 --> 00:32:26.600
Yeah, maybe so.
00:32:27.020 --> 00:32:31.220
Like, last year, I had, like, a few keynotes in some picons in different places.
00:32:31.320 --> 00:32:41.660
And, like, one of the key points that I wanted to bring was this idea that I'm trying to show that, in many cases, people worry about the boss factor.
00:32:41.960 --> 00:32:43.580
And the boss factor is just this idea.
00:32:43.840 --> 00:32:45.180
Yes, yes, I've heard this, yes.
00:32:45.320 --> 00:32:51.320
Yeah, you know, like, the boss factor is the idea that, oh, what happens if, like, there's one person doing this work?
00:32:51.420 --> 00:32:54.180
What happens if a boss runs over this person?
00:32:54.860 --> 00:32:58.260
And there's so much worry about this boss factor.
00:32:58.420 --> 00:33:01.960
It's sort of a morbid analogy, but I understand, right?
00:33:02.040 --> 00:33:06.980
Like, what will happen to the open source project if the maintainer vanishes for some reason, right?
00:33:07.140 --> 00:33:07.460
Exactly.
00:33:08.080 --> 00:33:11.160
But, you know, like, it also applies to projects and to many other different things.
00:33:11.600 --> 00:33:18.760
But what I think is that it's a disproportionate amount of attention to this detail of the boss factor.
00:33:19.180 --> 00:33:30.300
And I think every time people talk about the boss factor, you know, like one of my points in what I was trying to say in these talks was I would like people to think about the boss ticket factor.
00:33:30.720 --> 00:33:32.140
Who is paying for those tickets?
00:33:32.400 --> 00:33:34.140
It doesn't matter how big is the team.
00:33:34.440 --> 00:33:37.960
You know, like you have seen Google, Amazon, Meta, all the big ones.
00:33:38.240 --> 00:33:39.960
They don't have a small boost factor.
00:33:40.020 --> 00:33:45.100
They have a lot of people in their payroll and still they finish products.
00:33:45.340 --> 00:33:46.340
They just cancel them.
00:33:46.660 --> 00:33:48.940
Open source or private or whatever.
00:33:49.620 --> 00:33:51.820
is not the main factor
00:33:52.680 --> 00:33:54.640
defining the success of a project,
00:33:55.080 --> 00:33:57.240
being it commercial or open source of any type,
00:33:57.700 --> 00:34:00.280
is not really how many people are behind it.
00:34:00.640 --> 00:34:02.960
It's more of what is the value
00:34:03.140 --> 00:34:05.380
that whoever is putting the effort to keep it alive
00:34:05.840 --> 00:34:07.660
is getting from putting all that effort.
00:34:07.980 --> 00:34:09.020
It could be just satisfaction.
00:34:09.419 --> 00:34:10.600
It could be like open source,
00:34:10.679 --> 00:34:13.240
like, oh, I feel so good that I'm contributing to society.
00:34:13.360 --> 00:34:13.940
And that is valid.
00:34:14.600 --> 00:34:15.440
It doesn't pay the rent,
00:34:15.899 --> 00:34:16.899
but it's still valid.
00:34:17.080 --> 00:34:18.100
It might last for a while.
00:34:18.440 --> 00:34:25.820
But then also like, you know, like when you see like there are so many Python projects, so many Python, so many open source projects that can do well or can do bad.
00:34:26.000 --> 00:34:28.300
And it doesn't really depend on how many people they have.
00:34:28.820 --> 00:34:40.780
And when you are using a project, when you're using an open source project or when you are using a product of any type, I will encourage you to think about what is the best ticket factor of this project?
00:34:41.260 --> 00:34:47.500
What are the things that whoever is building this is receiving in exchange for giving it away?
00:34:47.940 --> 00:34:51.840
So like, you know, like what are they expecting to sell you at some point?
00:34:52.300 --> 00:34:54.500
Or what are they receiving in exchange?
00:34:55.080 --> 00:34:58.520
You know, for example, Bun, the JavaScript runtime.
00:34:58.820 --> 00:35:00.880
Like it was like, we don't know what they're going to sell.
00:35:01.040 --> 00:35:06.940
But now, you know, Cloud and Anthropic really want to have like this thing keep working because they are using it internally.
00:35:07.000 --> 00:35:09.360
So you can say like, OK, I'm going to use it.
00:35:09.420 --> 00:35:10.340
I'm going to use it for free.
00:35:10.500 --> 00:35:15.840
I know that what they receive for me using is just like that they just really want it.
00:35:15.980 --> 00:35:17.740
So I can just like, whenever you are using Bun,
00:35:17.860 --> 00:35:20.380
you are getting, now you are getting free services
00:35:20.600 --> 00:35:21.460
from Anthropic, that's it.
00:35:21.860 --> 00:35:23.940
But you know, like every time you are using a project,
00:35:24.040 --> 00:35:26.680
you can think about why are people receiving an exchange
00:35:27.080 --> 00:35:28.700
for giving this away for me?
00:35:28.960 --> 00:35:31.100
This is like the thing that I would like people
00:35:31.340 --> 00:35:33.800
to think about, you know, like also like
00:35:34.020 --> 00:35:35.120
how can they give back?
00:35:35.280 --> 00:35:37.860
Maybe they can actually contribute to that community
00:35:38.080 --> 00:35:38.660
or to that project.
00:35:38.800 --> 00:35:40.440
There are many ways and in many cases,
00:35:41.140 --> 00:35:43.260
the thing that is needed the most is just like help
00:35:43.620 --> 00:35:45.420
and work, just answering questions and issues.
00:35:47.260 --> 00:35:52.320
this portion of talk python enemy is brought to you by us i'm excited to talk about my first solo
00:35:52.520 --> 00:35:57.780
book talk python in production it's an inside look at how we host all the talk python sites
00:35:58.120 --> 00:36:03.440
apis mobile apps and way more here's the thing i believe most hosting stories sold to developers
00:36:03.520 --> 00:36:08.720
and data scientists are way over complicated and overpriced you've heard me say you're not google
00:36:09.000 --> 00:36:13.859
you're not netflix so you shouldn't run your infrastructure the way they do but if not that
00:36:13.960 --> 00:36:20.140
then what? This book is both a blueprint for what I chose for Talk Python and a story arc of 10 years
00:36:20.140 --> 00:36:25.680
of running my own infrastructure from a complete newbie, apprehensive to Linux, to some pretty
00:36:25.860 --> 00:36:31.940
neat infrastructures code DevOps. It covers Docker, Nginx, Let's Encrypt, self-hosted analytics and
00:36:32.140 --> 00:36:37.880
monitoring, CDN setup, framework migrations, and a whole philosophy that I've termed stack native,
00:36:38.460 --> 00:36:42.980
keeping things streamlined, powerful, and free of cloud lock-in. And it's more than just your
00:36:43.000 --> 00:36:48.120
standard tech book. It comes with code and figure galleries on GitHub, a discussion forum, and
00:36:48.500 --> 00:36:54.020
something unique, over an hour of audio readers briefs, short conversations that bookend each
00:36:54.460 --> 00:36:59.920
chapter to prime your focus or broaden your takeaways. Oh, and 0% of this book was written
00:37:00.040 --> 00:37:03.960
by AI. Every word is mine, written over the course in high months, for better or worse.
00:37:04.500 --> 00:37:09.820
I've made the first third of the book available for free online. After that, you can grab the DRM
00:37:09.840 --> 00:37:15.380
free EPUB and Kindle editions. And I'm working on a paperback edition as well. Please check it out
00:37:15.460 --> 00:37:20.740
at talkpython.fm/DevOps, or just click book in the nav bar on the website. It's a great way to
00:37:20.820 --> 00:37:25.040
support the podcast. And I hope it changes a bit how you think about running your apps in production.
00:37:26.040 --> 00:37:30.480
Kind of related to what you're saying, I think one of the angles that I really appreciate about
00:37:30.560 --> 00:37:36.160
the way we think about FastAPI and FastAPI Cloud is like where like a lot of our team was involved
00:37:36.180 --> 00:37:41.020
in open source before coming to work at FastAPI Cloud on various projects around the Python
00:37:41.260 --> 00:37:42.240
ecosystem, outside of Python.
00:37:42.740 --> 00:37:48.140
And I think all of us have deep appreciation and understanding of the value of open source
00:37:48.780 --> 00:37:53.460
and really, really try and build in a way that is like, I mean, Sebastian, you've talked
00:37:53.560 --> 00:37:56.540
about this a lot, but solving a real problem for folks, right?
00:37:56.840 --> 00:38:01.920
And so FastAPI Cloud is sort of this extension of this open source ecosystem people would
00:38:01.980 --> 00:38:02.380
be using.
00:38:03.680 --> 00:38:05.120
FastAPI Cloud may be an option.
00:38:05.500 --> 00:38:07.580
Maybe someone picks some other cloud for some reason.
00:38:07.970 --> 00:38:10.580
I don't think like, I think we're all very mindful of that.
00:38:10.790 --> 00:38:12.520
But like the angle that's very cool, I think,
00:38:12.600 --> 00:38:15.600
is that like, because we all work at FastAPI Cloud,
00:38:15.880 --> 00:38:17.580
like I know that I personally have time,
00:38:17.860 --> 00:38:19.220
more time for my open source work
00:38:19.380 --> 00:38:21.420
and my employer understands the value
00:38:21.560 --> 00:38:22.540
of my open source work,
00:38:23.020 --> 00:38:25.160
which isn't that positive for the open source community.
00:38:25.290 --> 00:38:27.300
Like I get to work on CPython sometimes
00:38:27.820 --> 00:38:29.780
and I have, you know, the bandwidth
00:38:29.950 --> 00:38:31.480
to go and do my steering council work
00:38:31.540 --> 00:38:32.880
or upcoming release management work.
00:38:33.300 --> 00:38:34.880
I understand like this sort of like,
00:38:35.420 --> 00:38:39.200
tempering, like open source, commercial, bad, all bad.
00:38:39.400 --> 00:38:39.940
It's not all bad.
00:38:40.060 --> 00:38:41.920
It's actually like really good in a lot of cases
00:38:42.280 --> 00:38:43.740
for folks to build business.
00:38:43.920 --> 00:38:46.320
Look at uv for an example to hold up, right?
00:38:46.420 --> 00:38:47.700
Astral, yeah, yeah, totally.
00:38:47.860 --> 00:38:48.160
Yeah, yeah.
00:38:48.340 --> 00:38:50.180
I think there are some really good examples of this.
00:38:50.370 --> 00:38:52.900
So I think like that's another angle that,
00:38:52.980 --> 00:38:55.480
I mean, I really, I get a lot of energy out of our team
00:38:55.890 --> 00:38:57.380
because we all, I don't have to,
00:38:57.630 --> 00:38:59.220
I don't have to fight the open source battle
00:38:59.580 --> 00:39:00.860
at FastAPI Cloud.
00:39:01.160 --> 00:39:02.080
I think that's really cool.
00:39:02.260 --> 00:39:03.620
I do think that's super cool as well.
00:39:03.660 --> 00:39:05.260
Let me put out two examples for you.
00:39:05.340 --> 00:39:11.840
here that I think everyone will be aware of as sort of to add to what Sebastian was saying is
00:39:12.140 --> 00:39:17.500
look how much Apple freaked out when Steve Jobs died and how many people work at Apple, right?
00:39:17.940 --> 00:39:23.040
Like that was still like, oh my gosh. But, you know, I think there's, they're hanging in there.
00:39:23.140 --> 00:39:27.920
They're going to be probably making it. They are not in our business. I tell you what,
00:39:27.950 --> 00:39:35.300
they got some of my money. That's for sure. But also, you know, look at Flask, right? Armin
00:39:35.500 --> 00:39:41.000
drifted away, which is totally fine. And David Lord and Pallets picked it up and kept running,
00:39:41.090 --> 00:39:46.020
right? Like it's still one of the most popular frameworks out there, right? So it's, I think
00:39:46.030 --> 00:39:51.200
the bus factor is over, overblown a bit, but also looking at the team of folks here, I think it's,
00:39:51.340 --> 00:39:54.880
it's even more obvious that there's a bunch of people who are on the inside, you know?
00:39:54.990 --> 00:39:59.560
For example, Flask, you know, like I learned so many things from Flask and like, the thing is,
00:39:59.750 --> 00:40:04.020
I feel like sometimes, sometimes people go and complain about the tool and say like, oh,
00:40:04.140 --> 00:40:08.980
this is not working for this or for that. And in many cases, it's in this insensitive way towards
00:40:09.260 --> 00:40:13.360
the people that are working on that. And it's like, you know, like in the end, realize that
00:40:13.480 --> 00:40:17.440
there's actually people behind the scenes doing the work. And like, in many cases, it's just like
00:40:17.620 --> 00:40:22.480
one or two people doing a lot of work in many cases, just for free. And, you know, like, I think
00:40:22.820 --> 00:40:27.480
it's worth calling that out. Like all the work that David Lord does for Flask is just like so
00:40:27.600 --> 00:40:32.780
much work. And yeah, deserves a lot of respect. I totally agree. The other thing that I forgot to
00:40:32.800 --> 00:40:37.740
mention is that there are so many ideas of potential products that I could build over the years, and I
00:40:37.820 --> 00:40:42.840
never did, and I never started a company because I didn't have clarity of what will be a good thing
00:40:43.140 --> 00:40:49.860
to actually sell and will have a good alignment. The cloud product has such a good alignment with
00:40:49.860 --> 00:40:57.640
the open source side because as more successful FastAPI is, the more successful FastAPI cloud
00:40:57.920 --> 00:40:59.140
has a potential to be.
00:40:59.840 --> 00:41:02.640
The more people using Python effectively,
00:41:03.040 --> 00:41:05.800
the more people might end up checking out FastAPI
00:41:05.820 --> 00:41:07.800
and the more people might end up checking out the product.
00:41:08.240 --> 00:41:10.980
So if FastAPI does well, if the open source does well,
00:41:11.060 --> 00:41:13.140
if Python does well, that's better for the company.
00:41:13.340 --> 00:41:17.420
So it doesn't really depend on my personal principles
00:41:17.580 --> 00:41:19.020
and values or something like that.
00:41:19.340 --> 00:41:23.680
It's aligned with, it's financially aligned with the company.
00:41:24.040 --> 00:41:27.620
So it's just going to be beneficial in the end
00:41:27.640 --> 00:41:29.680
It doesn't depend on good intentions.
00:41:30.519 --> 00:41:31.760
And FastAPI is open source.
00:41:31.980 --> 00:41:33.800
It has like 7,000 forks or something.
00:41:34.020 --> 00:41:36.320
So if a boost runs over me,
00:41:37.020 --> 00:41:38.100
there are 7,000 forks.
00:41:38.220 --> 00:41:39.000
It's not going away.
00:41:39.160 --> 00:41:40.420
I definitely agree with you on that.
00:41:40.470 --> 00:41:43.300
I feel like I should maybe give a little bit of a,
00:41:43.860 --> 00:41:44.880
I'll tell a little bit of the story
00:41:45.130 --> 00:41:46.120
of what's going on with,
00:41:46.910 --> 00:41:47.600
where did I put it?
00:41:47.840 --> 00:41:48.780
I don't think I pasted it over here,
00:41:49.200 --> 00:41:51.160
is what's going on with Tailwind right now.
00:41:51.550 --> 00:41:54.180
And I think Tailwind is having a tough time,
00:41:54.280 --> 00:41:54.700
Tailwind CSS.
00:41:55.480 --> 00:42:01.500
Traffic to Tailwind is up six times year over year on npm downloads.
00:42:02.280 --> 00:42:07.060
But the revenue of Tailwind is down five times.
00:42:07.540 --> 00:42:11.580
You know, I mean, these are completely out of whack things because instead of people going
00:42:11.580 --> 00:42:15.560
to docs to learn about it, it's just like, well, when you go to the docs, you learn they
00:42:15.640 --> 00:42:16.960
also have premium offerings, right?
00:42:17.440 --> 00:42:22.240
And I think you guys are different because it's not just, oh, here's a little bit nicer
00:42:22.420 --> 00:42:23.520
of a thing, right?
00:42:23.680 --> 00:42:34.040
I feel like it would be a little bit as if you were selling cookie cutter templates for FastAPI apps, you know, it's like, well, the AI can make the shape of the thing that comes out of the cookie cutter, to be honest.
00:42:34.260 --> 00:42:41.380
But you're offering something that has ongoing value that it costs more and is more complex in other places.
00:42:42.020 --> 00:42:50.720
And so I think maybe just thinking about the how this just keeps the team going for FastAPI is really awesome.
00:42:50.880 --> 00:42:53.260
And I think it's got a nice flywheel effect there.
00:42:53.340 --> 00:42:56.540
is I'll link to this, I guess, audio track.
00:42:56.730 --> 00:42:57.540
I don't know what I call it.
00:42:57.580 --> 00:42:59.000
It's a blog post that has one sentence,
00:42:59.260 --> 00:43:00.960
but a 30-minute audio you can check out
00:43:01.120 --> 00:43:02.960
from the guy, Adam,
00:43:03.420 --> 00:43:04.600
who's one of the founders of Tailwind,
00:43:04.780 --> 00:43:06.060
talking about going into this.
00:43:06.740 --> 00:43:07.360
It's kind of rough.
00:43:07.450 --> 00:43:09.900
I think I don't necessarily want to go into a deep AI,
00:43:10.080 --> 00:43:11.000
what it means for the industry.
00:43:11.180 --> 00:43:13.120
Like, let's stay focused on what you guys are doing.
00:43:13.150 --> 00:43:16.940
But I think it's going to be its own series.
00:43:17.280 --> 00:43:21.240
I mean, Stack Overflow had as many questions asked
00:43:21.260 --> 00:43:25.240
this month as they did in the first month of their existence, right?
00:43:25.530 --> 00:43:29.480
Three or 4,000, whereas at their peak, they were 200,000 questions a month.
00:43:29.900 --> 00:43:34.920
There's like real turmoil that's coming from some of these things, which is tricky.
00:43:35.560 --> 00:43:40.000
But I'm really excited to see you all doing this because I'm a big fan of FastAPI.
00:43:40.500 --> 00:43:45.840
And I think this is just sustaining and more for FastAPI, right?
00:43:45.920 --> 00:43:46.520
Like, what do you all think?
00:43:46.640 --> 00:43:48.260
That's what we hope that is going on.
00:43:49.920 --> 00:43:51.840
I thought about Tailwind for a second, right?
00:43:52.060 --> 00:43:54.280
It's not like we're immune to what happened to them.
00:43:54.420 --> 00:43:56.500
Like we also have a lot of documentation online.
00:43:56.880 --> 00:43:58.040
AI could train on that.
00:43:58.240 --> 00:43:59.400
And if it's good enough,
00:43:59.420 --> 00:44:01.300
it could maintain your infrastructure and stuff.
00:44:01.380 --> 00:44:02.960
It's just too hard at the moment.
00:44:03.080 --> 00:44:05.460
And there's an additional thing we're kind of selling,
00:44:05.760 --> 00:44:07.620
which is like, I guess, responsibility.
00:44:08.180 --> 00:44:11.480
Like you're shifting the risk from like letting your AI
00:44:11.800 --> 00:44:15.540
or your infantry team maintain your infrastructure to us.
00:44:15.920 --> 00:44:18.660
So we're staying up at night and worry about it.
00:44:18.980 --> 00:44:20.400
that has a lot of value as well.
00:44:20.780 --> 00:44:24.300
And that's probably not going to get removed by AI.
00:44:24.980 --> 00:44:27.040
Here's a very common Claude Code,
00:44:27.540 --> 00:44:28.760
cursor, whatever conversation.
00:44:29.520 --> 00:44:33.140
Hey, build me something with Python and needs an API.
00:44:33.240 --> 00:44:34.600
Okay, we built it with FastAPI.
00:44:34.900 --> 00:44:35.920
How do I host it?
00:44:36.230 --> 00:44:37.160
Right, that doesn't just,
00:44:37.380 --> 00:44:39.060
it will build a cloud for you, right?
00:44:39.140 --> 00:44:41.400
It's going to recommend something out there.
00:44:41.840 --> 00:44:45.120
And a real natural way to how do I host FastAPI
00:44:45.280 --> 00:44:46.740
is FastAPI cloud, right?
00:44:46.880 --> 00:44:48.060
Like if it suggests,
00:44:48.200 --> 00:44:50.940
oh, you're just going to like spread it across Lambda by breaking.
00:44:51.080 --> 00:44:52.460
Like, whoa, no, I want something simple.
00:44:52.640 --> 00:44:54.180
Okay, give me FastAPI cloud, right?
00:44:54.320 --> 00:44:55.860
I think that that's a really good thing.
00:44:55.860 --> 00:44:57.800
And then on the enterprise side,
00:44:58.340 --> 00:45:03.220
enterprise folks are notoriously not good at supporting open source
00:45:03.440 --> 00:45:05.720
in that they're not like paying for it.
00:45:05.720 --> 00:45:11.000
I know some companies are big supporters of the PSF and Python and open source.
00:45:11.440 --> 00:45:15.240
But in general, it's like, yeah, we have this project with 5,000 people working on it.
00:45:15.240 --> 00:45:15.680
It's all Python.
00:45:16.340 --> 00:45:19.240
And are we sponsoring this?
00:45:19.640 --> 00:45:19.780
Nope.
00:45:20.140 --> 00:45:22.060
We're just enjoying the money, right?
00:45:22.180 --> 00:45:22.740
And we're a bank.
00:45:23.360 --> 00:45:24.140
So we got the money.
00:45:24.260 --> 00:45:24.860
We got all the money.
00:45:25.780 --> 00:45:29.520
So they're just not good at paying for like a really great framework that they use a lot.
00:45:29.860 --> 00:45:34.460
But they got plenty of hosting, plenty of internal apps that they just need to make run and stuff.
00:45:34.680 --> 00:45:40.220
So I think both on like the low end and the high end, there's a lot of synergy between these things.
00:45:40.340 --> 00:45:52.540
That is not just, you know, slightly advanced, not to diminish it, but slightly advanced UI widgets that you could ask your AI to build or something or like cookie cutter templates for project starters.
00:45:52.840 --> 00:45:59.120
I think we are in a somewhat fortunate position of like, you know, like FastAPI. FastAPI has grown so much.
00:45:59.560 --> 00:46:06.100
Like, you know, like when you check the statistics about downloads or GitHub stars or entries in developer surveys,
00:46:06.220 --> 00:46:08.680
like it's at the top in like in each category.
00:46:08.860 --> 00:46:13.560
It's like, you know, like the backend framework with the most GitHub stars across languages,
00:46:14.040 --> 00:46:17.180
even like, you know, like Java, Go, Ruby, JS, like whatever.
00:46:17.280 --> 00:46:19.840
It's like the top one, at least in GitHub stars.
00:46:20.260 --> 00:46:24.620
So like, you know, like FastAPI is like people are liking it, fortunately.
00:46:25.480 --> 00:46:29.080
And there's probably going to be people deploying things to FastAPI Cloud.
00:46:29.100 --> 00:46:32.600
So that's probably going to be like, we are probably going to be fine.
00:46:33.180 --> 00:46:38.760
I think, you know, like the, I guess it will be like a good point to ask people to go and
00:46:38.880 --> 00:46:42.580
check where the open source project is that they are using and check where is the bus ticket
00:46:42.800 --> 00:46:44.920
factor for those open source projects.
00:46:45.040 --> 00:46:55.800
You know, like if you are using Tailwind CSS, it would have been very cool if at some point you check if the premium things were useful for you and for your company or your project or something like that, you know?
00:46:56.100 --> 00:46:59.400
Yeah, because what is the thing that keeps that project going?
00:46:59.560 --> 00:46:59.880
Exactly.
00:47:00.260 --> 00:47:12.820
And I really personally admire if a project or something offers like more value, not just, hey, buy me a coffee, but here's a thing that you get way more of, you know?
00:47:12.820 --> 00:47:14.840
And in that regard, I think Tailwind was doing that, right?
00:47:14.960 --> 00:47:17.240
They were offering this suite of pre-built things.
00:47:17.570 --> 00:47:18.940
And I think that that's great.
00:47:19.280 --> 00:47:24.440
But yeah, I do think you've got more of these crazy AI things
00:47:24.470 --> 00:47:26.680
are going to maybe recommend FastAPI Cloud more
00:47:26.960 --> 00:47:28.340
than they're just going to undercut it.
00:47:28.350 --> 00:47:29.200
So I think that's really great.
00:47:29.460 --> 00:47:33.180
And by the way, I was just looking for the GitHub Stars graph.
00:47:33.530 --> 00:47:36.200
Like there's a whole, I can't remember what the domain of that site is.
00:47:36.840 --> 00:47:38.980
And I ran across, by the way, I just want to give a quick shout out.
00:47:39.130 --> 00:47:43.420
Like your cult repo documentary on FastAPI was awesome.
00:47:44.000 --> 00:47:44.080
Right?
00:47:44.420 --> 00:47:45.080
That was so fun.
00:47:45.440 --> 00:47:46.280
They made me look good.
00:47:46.280 --> 00:47:47.040
I didn't see that coming.
00:47:47.660 --> 00:47:50.060
Yeah, it came right on the heels of the Python official
00:47:50.700 --> 00:47:51.800
documentary, the one hour one.
00:47:51.900 --> 00:47:54.200
This is the same group, and the production quality
00:47:54.260 --> 00:47:54.660
is really nice.
00:47:54.750 --> 00:47:55.320
So like--
00:47:55.440 --> 00:47:58.580
When they released the trailer for the Python documentary,
00:47:58.800 --> 00:48:00.940
before releasing the documentary, when they released the trailer,
00:48:01.180 --> 00:48:02.980
they contacted me and said, hey, we're
00:48:03.670 --> 00:48:06.080
doing these mini documentaries about different frameworks,
00:48:06.230 --> 00:48:08.360
different tools, and we want to include FastAPI there.
00:48:08.410 --> 00:48:09.260
I was like, oh, nice.
00:48:10.040 --> 00:48:12.220
But then I was just trying to stay excited,
00:48:12.440 --> 00:48:13.200
but super excited.
00:48:13.760 --> 00:48:17.740
Oh, that's so cool. Yeah, I watched it as soon as it came out. So I'll link to that. People should
00:48:17.880 --> 00:48:22.500
definitely, it's only like 10 minutes or something, but it's worth it. We're checking out. So it's not
00:48:22.500 --> 00:48:26.900
a huge investment time. People can watch it, I suppose. It's not TikTok. I mean, it's not like,
00:48:27.440 --> 00:48:34.900
oh, I saw the documentary, but it doesn't take you on huge about it.
00:48:34.960 --> 00:48:37.840
You have to listen for 10 minutes, overly excited Colombian.
00:48:37.940 --> 00:48:41.320
I don't understand what's happened to the attention span of society. I'm really,
00:48:41.560 --> 00:48:45.600
honestly a little concerned. I used to, when I would create my courses, people would say,
00:48:45.760 --> 00:48:49.460
you know, like a four hour course and there'd be like a 10, 15 minute sort of, Hey, here's how you
00:48:49.580 --> 00:48:52.280
set up your computer. And here's all the introduction and people, Oh, that's so awesome.
00:48:52.400 --> 00:48:55.200
I loved how you kind of set the stage. I'm really motivated to take the course.
00:48:55.840 --> 00:48:59.800
Nowadays, I just get messages like, why are you still talking? This is five minutes long. Do you
00:48:59.960 --> 00:49:06.500
understand? I'm like, this is your job. You can't spend five minutes. Oh my gosh. Anyway, that's,
00:49:06.620 --> 00:49:11.520
that's sort of the origin of my comment there. It's all right. So we're kind of getting so much
00:49:11.540 --> 00:49:17.380
time, I think I want to talk about a couple of things. Let's talk a little bit about internals.
00:49:17.460 --> 00:49:22.820
Like what, I don't know who wants to take this one, but let's talk about just how, when I say
00:49:23.080 --> 00:49:30.140
FastAPI deploy, then what? It's just a uv pip install and it just goes and it's magic and it's
00:49:30.240 --> 00:49:34.320
easy, right? We have a nickname for Jonathan. Can we say it or no? I don't know. It's so funny.
00:49:34.380 --> 00:49:38.660
This happened because I told my friends, I'm so concerned about being at the podcast because
00:49:38.680 --> 00:49:42.000
Because everyone here is a visionary, and then I'm the back-end guy.
00:49:42.300 --> 00:49:46.300
I think the things I could contribute to this conversation, I should probably keep to myself.
00:49:47.540 --> 00:49:50.020
But you're just leaking your turnouts, right?
00:49:50.180 --> 00:49:52.940
There are some things that are not really secret.
00:49:53.340 --> 00:50:01.300
Like, as Sebastian said earlier, Kubernetes 1 in the infrastructure and deployment field, to some extent.
00:50:01.500 --> 00:50:03.600
So that's somewhere in there, right?
00:50:03.880 --> 00:50:07.260
But it's all the way deep down, so no one has to worry about it.
00:50:07.420 --> 00:50:08.500
But it's still a foundation.
00:50:08.580 --> 00:50:09.580
which is a good foundation.
00:50:09.950 --> 00:50:11.300
I think one thing that's,
00:50:11.610 --> 00:50:12.500
you might have guessed it,
00:50:12.800 --> 00:50:15.240
but FastAPI Cloud is built on FastAPI,
00:50:15.480 --> 00:50:16.440
which kind of makes sense, right?
00:50:16.760 --> 00:50:17.940
And that also has an effect
00:50:18.200 --> 00:50:20.500
on like recent patches, updates and stuff.
00:50:20.720 --> 00:50:22.560
Because if we find something internally
00:50:23.000 --> 00:50:23.860
which we're not happy with,
00:50:24.040 --> 00:50:25.240
then we just fix it.
00:50:25.440 --> 00:50:27.080
And that's how some releases
00:50:27.600 --> 00:50:29.460
came out faster than months before.
00:50:30.220 --> 00:50:31.420
Power of dogfooding.
00:50:31.820 --> 00:50:32.480
Yeah, that's awesome.
00:50:32.620 --> 00:50:33.080
Dogfooding a lot.
00:50:33.280 --> 00:50:35.100
Also all the related libraries
00:50:35.540 --> 00:50:38.360
like SQL model and, well, others.
00:50:38.840 --> 00:50:39.940
they experience the same thing.
00:50:40.160 --> 00:50:41.500
New library is coming out.
00:50:42.020 --> 00:50:43.680
Patrick will announce at some point soon.
00:50:43.860 --> 00:50:45.680
It's not just FastAPI and friends.
00:50:45.980 --> 00:50:46.980
We're like really open.
00:50:47.260 --> 00:50:49.160
Like recently, Patrick just open-sourced
00:50:49.540 --> 00:50:51.680
everything we use for authentication authorization,
00:50:52.160 --> 00:50:52.520
for example.
00:50:52.840 --> 00:50:53.700
Is it open-source yet?
00:50:53.960 --> 00:50:54.840
Did they just leak something?
00:50:55.000 --> 00:50:56.940
It will be announced soon at some point.
00:50:57.920 --> 00:50:59.720
We build stuff internally in the moment really.
00:51:00.520 --> 00:51:01.820
Like we build it in a way,
00:51:01.960 --> 00:51:02.800
like in a separate package,
00:51:03.260 --> 00:51:04.420
just like an open-source library.
00:51:04.540 --> 00:51:05.740
And if we feel like the time is ripe,
00:51:05.860 --> 00:51:07.260
it's just getting open-sourced
00:51:07.280 --> 00:51:08.860
because a lot of things are reusable.
00:51:09.420 --> 00:51:10.460
And that's in all departments.
00:51:10.900 --> 00:51:11.700
That happens a lot.
00:51:12.320 --> 00:51:14.660
When I started there, I already realized that.
00:51:14.760 --> 00:51:15.880
Everyone was building open source,
00:51:16.030 --> 00:51:17.600
but now I joined in myself as well.
00:51:17.720 --> 00:51:22.020
I open source the library for compressing
00:51:22.120 --> 00:51:24.240
and decompressing archives in Python
00:51:24.860 --> 00:51:27.440
because the internal top high thing is just slow
00:51:27.520 --> 00:51:28.660
and we needed it to be faster
00:51:28.840 --> 00:51:30.620
because we're staring at the deployment process
00:51:30.690 --> 00:51:33.160
and we're like, hey, we could probably shave off a few seconds here.
00:51:33.760 --> 00:51:35.740
Then that's just open source for everyone to use.
00:51:35.800 --> 00:51:38.900
So we're contributing to the old Python ecosystem as well.
00:51:38.900 --> 00:51:39.940
You have to say the name.
00:51:40.140 --> 00:51:40.820
It's so good.
00:51:41.500 --> 00:51:42.080
Is it good?
00:51:42.240 --> 00:51:46.280
No, it's just, it's faster because it's, you know, faster than just tar.
00:51:47.260 --> 00:51:47.880
Fast tar?
00:51:48.160 --> 00:51:48.500
I love it.
00:51:48.510 --> 00:51:49.140
Fast tar, yes.
00:51:49.760 --> 00:51:53.300
And you can say with that very, very German accent, fast tar.
00:51:53.420 --> 00:51:54.140
I'll go star it.
00:51:54.200 --> 00:51:55.820
We'll get you some stars.
00:51:56.520 --> 00:51:57.060
This is going to happen.
00:51:57.200 --> 00:51:58.300
That's the irony about it.
00:51:58.440 --> 00:51:59.960
Like, it literally has no stars.
00:52:00.090 --> 00:52:01.660
But if you scroll down, you see the downloads.
00:52:01.880 --> 00:52:04.100
That's going to prove we're actually using it.
00:52:04.180 --> 00:52:04.740
Yeah, I like it.
00:52:05.060 --> 00:52:06.100
It's a little context manager.
00:52:07.660 --> 00:52:12.700
It's almost working the same as the tarfile in the standard library.
00:52:13.000 --> 00:52:16.060
Like the same, like almost similar API to that.
00:52:16.360 --> 00:52:18.720
It's basically a drop-in replacement, more or less.
00:52:19.440 --> 00:52:21.400
But they know they need everything to happen in Rust.
00:52:21.680 --> 00:52:22.080
Because Rust.
00:52:22.420 --> 00:52:23.340
Because Rust, yeah.
00:52:23.560 --> 00:52:27.180
Well, as soon as it becomes infrastructure and you've got to run it a million times,
00:52:27.740 --> 00:52:29.100
that starts to make sense, right?
00:52:29.220 --> 00:52:29.280
Yeah.
00:52:29.420 --> 00:52:33.180
Python is one of the fastest programming languages in the world.
00:52:33.680 --> 00:52:36.960
when you think about human time to build the things, right?
00:52:37.140 --> 00:52:39.480
Like that's one of its real superpowers is like,
00:52:39.800 --> 00:52:44.060
I mean, there's the whole story of Google Video and YouTube, right?
00:52:44.160 --> 00:52:46.920
And Google Video was written in C++ with 100 engineers
00:52:47.160 --> 00:52:49.220
and YouTube was a small team in Python
00:52:49.460 --> 00:52:51.100
and they just couldn't keep up with the features.
00:52:51.200 --> 00:52:53.000
So they bought this little old thing, YouTube,
00:52:53.560 --> 00:52:55.000
and see if we're going to make something with it.
00:52:55.280 --> 00:52:57.220
And last I checked, it was still in Python.
00:52:57.420 --> 00:53:00.260
I'm sure some of it isn't, but a few years ago it was, which is wild.
00:53:00.760 --> 00:53:02.560
Anyway, there's different ways of fast,
00:53:02.680 --> 00:53:04.520
But when it's down to like little utilities, yeah.
00:53:04.620 --> 00:53:06.660
I know some people that are trying to make Python fast.
00:53:06.710 --> 00:53:07.220
I know a couple.
00:53:07.440 --> 00:53:07.620
Yeah.
00:53:08.200 --> 00:53:11.540
And honestly, massive success in the last five years, right?
00:53:11.740 --> 00:53:17.400
Like since 3.11, since the specializing adaptive interpreter, there's been pretty big improvements.
00:53:17.720 --> 00:53:20.360
3.9 and 3.11 did a lot of like foundational work.
00:53:20.410 --> 00:53:24.020
And then 3.9 onward really just uncorked a lot of innovation there.
00:53:24.340 --> 00:53:25.260
Yeah, that's pretty awesome.
00:53:26.000 --> 00:53:26.260
All right.
00:53:26.560 --> 00:53:29.320
It sounds like, Sebastian, you've talked a lot about Kubernetes.
00:53:29.740 --> 00:53:31.360
So I imagine Kubernetes is happening.
00:53:31.960 --> 00:53:34.820
Do we get to pick what data centers it runs on?
00:53:34.840 --> 00:53:37.720
Do we get to pick what clouds it runs on?
00:53:37.920 --> 00:53:40.560
You're going to get to pick some of these things.
00:53:41.340 --> 00:53:41.800
Not yet.
00:53:42.100 --> 00:53:43.000
It's not released yet.
00:53:43.600 --> 00:53:45.320
But, you know, like it's top, of course.
00:53:45.620 --> 00:53:48.680
Like we have like regular cloud providers on the MIT
00:53:48.720 --> 00:53:49.720
and there's a bunch of Kubernetes.
00:53:49.920 --> 00:53:52.140
Then there's a bunch of additional stuff
00:53:52.360 --> 00:53:53.560
that needs to run on top.
00:53:53.760 --> 00:53:55.599
Then there's like custom Kubernetes controllers
00:53:56.320 --> 00:53:58.560
and things that Jonathan was saying
00:53:58.580 --> 00:54:00.399
that he's having to write in Go
00:54:00.420 --> 00:54:04.180
so that people in Python can be happy to be able to, you know,
00:54:04.200 --> 00:54:07.040
like manage all the Kubernetes shenanigans that need to happen
00:54:07.160 --> 00:54:09.700
because there's so much complexity that needs to be handled.
00:54:10.340 --> 00:54:11.440
There's a lot of that.
00:54:11.760 --> 00:54:14.860
We do a lot of advanced tricks also.
00:54:15.380 --> 00:54:17.440
Jonathan was recently doing a bunch of advanced tricks
00:54:17.580 --> 00:54:20.160
to handle the caches for the builds.
00:54:20.520 --> 00:54:22.120
So the way that we handle caches,
00:54:22.260 --> 00:54:25.220
and we also like tap into uv and how things work
00:54:25.340 --> 00:54:28.399
so that builds can be super, super fast
00:54:28.420 --> 00:54:30.080
because it's like something is,
00:54:30.540 --> 00:54:33.280
we are, you know, like we are very much targeted
00:54:33.560 --> 00:54:35.940
at FastAPI and Python in general.
00:54:36.100 --> 00:54:38.440
So we can take advantage of knowing
00:54:39.060 --> 00:54:40.260
how things run internally,
00:54:40.720 --> 00:54:41.700
how things are installed,
00:54:42.220 --> 00:54:43.280
how to optimize everything.
00:54:43.380 --> 00:54:45.000
So everything is just like super fast,
00:54:45.140 --> 00:54:47.640
super fast to install, to run, to like do everything.
00:54:47.700 --> 00:54:50.400
I imagine you all have base Docker images
00:54:50.960 --> 00:54:53.700
that are like just one layer away
00:54:54.080 --> 00:54:55.880
from whoever's code is running.
00:54:56.440 --> 00:54:58.060
You know, like you've got it all optimized,
00:54:58.120 --> 00:55:02.020
already pre-built with FastAPI and whatever settings of Python you want.
00:55:02.140 --> 00:55:03.460
A bunch of things and tricks.
00:55:04.100 --> 00:55:05.340
But there are also different things,
00:55:05.560 --> 00:55:08.440
like the different ways that we do to actually build the things
00:55:08.540 --> 00:55:13.860
and install things and put them inside of the actual build application.
00:55:14.220 --> 00:55:18.060
There's a lot of sourcing that we do there,
00:55:18.120 --> 00:55:20.840
and Jonathan has been working on a lot of that.
00:55:21.340 --> 00:55:23.380
And there's also all the logic and all the stuff.
00:55:23.500 --> 00:55:26.840
We have a bunch of stuff on top of that to handle out of scaling,
00:55:27.040 --> 00:55:31.160
which is something that is actually not that easy to find in different providers.
00:55:31.820 --> 00:55:37.220
We have auto-scaling based on requests, including scaling down to zero, which saves costs.
00:55:37.840 --> 00:55:40.080
But this is not Lambdas.
00:55:40.280 --> 00:55:41.340
It's not AWS Lambdas.
00:55:42.119 --> 00:55:46.860
It's like the full deployed application, the full container or whatever it is,
00:55:47.300 --> 00:55:49.900
which is the full thing with all the dependencies.
00:55:50.100 --> 00:55:54.060
It's running for whenever it has to run, but we can scale based on requests.
00:55:54.740 --> 00:56:07.280
So I guess it's like the type of thing that you will have if you have this giant cluster for a huge enterprise with a bunch of infra people making sure everything just works perfectly.
00:56:08.000 --> 00:56:10.320
But you just pay us to do that for you.
00:56:10.420 --> 00:56:15.360
This is also a good time for us to probably say lots of stuff is coming and we're in private beta.
00:56:15.540 --> 00:56:22.660
And so you should sign up for the wait list so that you can get admitted and try out these very cool things we've been talking about.
00:56:22.660 --> 00:56:22.840
Absolutely.
00:56:23.240 --> 00:56:29.020
And I think I'll let Tech Insider out in the audience sort of lean into it.
00:56:29.020 --> 00:56:29.520
Public release one.
00:56:30.019 --> 00:56:30.900
Sebastian, when?
00:56:31.180 --> 00:56:32.140
Public release one.
00:56:32.440 --> 00:56:34.960
My final topic, which is just what's the roadmap?
00:56:35.560 --> 00:56:36.320
When is this stuff?
00:56:36.660 --> 00:56:38.540
Like, how do we get into it here?
00:56:38.820 --> 00:56:40.180
Why would they like Litestar?
00:56:40.400 --> 00:56:43.940
We have the, right now we have the waiting list and we are onboarding people.
00:56:44.080 --> 00:56:46.460
We already have like a bunch of people in the private beta.
00:56:46.920 --> 00:56:51.720
We're going to keep onboarding people from the waiting list and like, you know, like ramp that up.
00:56:51.780 --> 00:56:56.060
But it will be like, you know, like through the waiting list is the main place where we are onboarding.
00:56:56.140 --> 00:56:58.440
People will want to make sure that everything is super fine-tuned.
00:56:58.820 --> 00:57:00.300
And we're going to keep it that way for a while.
00:57:00.540 --> 00:57:06.100
So like people that are on the waiting list are going to be like the ones that are going to be able to start using it the soonest.
00:57:06.420 --> 00:57:10.160
At some point, we'll probably have ways for people to invite others and things like that.
00:57:10.500 --> 00:57:17.920
About the things that we are building, we want to, you know, like we are super focused on FastAPI and then Python in general.
00:57:18.060 --> 00:57:20.880
at some point will probably support different tools,
00:57:21.340 --> 00:57:24.060
different ways to run, also like Python code in general,
00:57:24.480 --> 00:57:25.360
probably different frameworks.
00:57:25.900 --> 00:57:30.240
It will also depend a lot on what the users are asking for,
00:57:30.360 --> 00:57:33.300
whether like the tools, the frameworks, the use cases,
00:57:33.460 --> 00:57:34.700
the things that they need to build.
00:57:34.740 --> 00:57:37.860
And like, we're going to evolve the platform and the system
00:57:38.500 --> 00:57:40.780
based on what people need out of it.
00:57:40.800 --> 00:57:42.900
We have like a GitHub repo where we have issues,
00:57:43.060 --> 00:57:45.780
but we also have like a Slack that once people are admitted,
00:57:45.820 --> 00:57:50.760
they can talk directly to us and that feedback is really, really valuable for shaping the roadmap
00:57:50.970 --> 00:57:53.500
and figuring out all the fun things you want us to support.
00:57:53.560 --> 00:57:58.620
Awesome. Of course, you're going to charge money for it. It runs on servers and you guys are not
00:57:59.170 --> 00:58:04.640
a charity, but can you give any sense of what you're thinking about that kind of stuff or
00:58:05.060 --> 00:58:06.080
join the waitlist and see?
00:58:06.240 --> 00:58:11.920
Well, first join the waitlist and see, but we don't have like that predefined yet,
00:58:12.220 --> 00:58:16.080
but they will be on the ballpark of what you could get from different cloud providers.
00:58:16.280 --> 00:58:23.920
So different similar-ish providers will be on the ballpark of what you will get.
00:58:24.300 --> 00:58:26.980
But it's not written in stone yet.
00:58:27.320 --> 00:58:32.060
It's still a little bit different because we can auto-scale based on requests.
00:58:32.340 --> 00:58:36.580
So we can increase the amount of replicas of your application automatically,
00:58:36.960 --> 00:58:40.000
and then we can decrease them automatically, and we can scale down to zero.
00:58:40.060 --> 00:58:49.940
So you can probably handle all the load that you need and in the end spend a lot less because you don't have to have a bunch of instances constantly running or things like that, you know.
00:58:50.420 --> 00:58:55.840
So it will probably work a little bit different than what it will be for other providers.
00:58:56.360 --> 00:58:58.380
But in the end, it should be roughly similar.
00:58:58.560 --> 00:59:18.360
Okay. And given the fact that you all handle so much of it as a platform as a service type of thing, you don't have to have a cloud expert on hand or a DevOps expert necessarily, right? As soon as a company hires somebody to be an AWS cloud architect or something like that, it's no longer just what is your AWS bill.
00:59:18.580 --> 00:59:22.380
It's also a little bit of pain that we are swallowing so you don't have to take it.
00:59:22.740 --> 00:59:24.580
Exactly. It's part of taking one for the team, right?
00:59:24.740 --> 00:59:24.920
Yes.
00:59:25.140 --> 00:59:25.200
Yes.
00:59:27.160 --> 00:59:27.340
Indeed.
00:59:27.960 --> 00:59:30.960
All right, so I had one or two things specifically
00:59:31.610 --> 00:59:32.360
that I was seeking.
00:59:32.550 --> 00:59:33.880
It's like custom domains.
00:59:34.410 --> 00:59:35.580
How far off are custom domains?
00:59:35.700 --> 00:59:38.100
I was like, oh, I could put some cool things on there.
00:59:39.420 --> 00:59:41.140
I could tell Jonathan is psyched about this.
00:59:41.280 --> 00:59:44.320
It'd be really fun to put one of my really small
00:59:44.799 --> 00:59:46.100
FastAPI projects over there,
00:59:46.740 --> 00:59:48.360
something I set up for some of my courses or something,
00:59:48.520 --> 00:59:50.100
and then I can point people to go,
00:59:50.160 --> 00:59:51.400
look, it's running on FastAPI Cloud.
00:59:51.400 --> 00:59:53.620
How neat, you guys can check that out over there.
00:59:54.060 --> 00:59:55.360
And I'm like, but it's on its own domain,
00:59:55.580 --> 01:00:00.380
that domain is baked into the course videos, you know what I mean? And it's written in stone.
01:00:00.580 --> 01:00:01.140
It's marketing.
01:00:01.520 --> 01:00:07.880
Yeah, exactly. So I can't really move it because it has, you know, some subdomain of Talk Python,
01:00:08.060 --> 01:00:08.120
right?
01:00:08.240 --> 01:00:12.120
I was working on it. And then I got the notification by Google Calendar that I should
01:00:12.440 --> 01:00:14.140
join a certain podcast. So...
01:00:14.140 --> 01:00:18.920
Are you telling me we don't have custom domains? Because I'm here asking you about custom domains.
01:00:19.100 --> 01:00:19.700
How meta is that?
01:00:19.720 --> 01:00:23.540
You got it. It could be here already. But no, you have to wait a bit more.
01:00:23.640 --> 01:00:24.400
Okay. But soon?
01:00:24.520 --> 01:00:29.660
Yeah. As soon as broad enough, but I'm actively working on it. Let's put it like that.
01:00:29.740 --> 01:00:34.320
Okay. That sounds great. And then, I mean, just, it's never simple. You know, I just,
01:00:34.780 --> 01:00:39.140
I set up some stuff and it's like, you get the pop-up. Oh, you got to put this, you know,
01:00:39.280 --> 01:00:45.320
this TXT record or this CNAME or whatever record into your DNS and then we're checking it. Oh,
01:00:45.780 --> 01:00:50.239
it might take three days for your DNS to propagate. So hang in there and just, I can imagine like
01:00:50.560 --> 01:00:56.560
you're having fun yeah i guess you're kidding me that's like wow i i thought i'm almost off work
01:00:56.780 --> 01:01:00.260
but no you're bringing it all back but yeah that's a that's a thing i'm sure the company
01:01:00.760 --> 01:01:04.540
could support therapy to like work work through the issues and the trauma that you've suffered
01:01:04.760 --> 01:01:10.340
from the dns it's always dns that's right i mean you got that's an yes it's always dns yes
01:01:10.460 --> 01:01:15.699
i guess one of our goals with custom domains also to make it super simple for you to set up them
01:01:15.940 --> 01:01:23.040
Like, for example, if you're using one of the providers that support OAuth, we can also just do one click and then it's going to be automatically.
01:01:23.160 --> 01:01:24.960
Oh, that's cool. Yeah, that's really nice.
01:01:25.120 --> 01:01:27.300
But unfortunately, it depends on the platform you're using.
01:01:27.460 --> 01:01:29.300
All of them support this.
01:01:29.480 --> 01:01:32.720
This is said by the person in charge of most of the integrations.
01:01:32.860 --> 01:01:37.340
So Patrick has built, we have integrations for a bunch of database providers and things like that.
01:01:38.060 --> 01:01:41.900
I think now Patrick knows by memory, OpenID specification.
01:01:42.260 --> 01:01:42.720
I don't know.
01:01:44.300 --> 01:01:48.600
Yeah, the other thing I wanted to talk a bit about was just integrations, like what kind of stuff you guys have coming in.
01:01:48.600 --> 01:01:51.940
I saw that Hugging Face is going to be integrated soon.
01:01:52.120 --> 01:01:55.320
You've got Supabase, which is kind of Postgres as a service.
01:01:56.040 --> 01:01:59.860
There's a lot of those things out there that theoretically could be added.
01:02:00.100 --> 01:02:01.440
Someone also asked for MongoDB.
01:02:01.660 --> 01:02:03.640
Maybe that's one that we're going to take a look into.
01:02:04.070 --> 01:02:06.320
It really depends on the provider.
01:02:06.370 --> 01:02:11.360
So at the moment, we don't want to ask databases for you because that's also another kind of rabbit hole.
01:02:11.780 --> 01:02:13.200
Jonathan is probably not ready for that.
01:02:14.180 --> 01:02:15.880
But yeah, definitely database.
01:02:16.040 --> 01:02:21.260
But I guess we can say that we're also talking with the people from Pydantic
01:02:21.360 --> 01:02:24.720
so we can integrate maybe Logfire automatically, that kind of stuff.
01:02:25.120 --> 01:02:25.220
Yeah.
01:02:25.440 --> 01:02:28.600
And also things like Redis, which is also another kind of database.
01:02:29.300 --> 01:02:30.200
That's also coming soon.
01:02:30.360 --> 01:02:33.580
Yeah, there's a couple of database as a service type things
01:02:33.740 --> 01:02:37.700
that don't require too much other than just connecting API keys
01:02:37.920 --> 01:02:38.740
and something like that, right?
01:02:38.940 --> 01:02:40.180
Those seem like low-hanging fruit.
01:02:40.300 --> 01:02:43.940
Like the kind of goal with the integration is not just done.
01:02:44.000 --> 01:02:46.620
Like, yeah, right now it's just setting up an environment variable.
01:02:47.080 --> 01:02:51.240
But the idea is also to more, I don't know, like the proper integration, I would say.
01:02:52.320 --> 01:02:56.040
Like, for example, for things like Supabase, if, yeah, I think that's support branching.
01:02:56.080 --> 01:03:00.500
Like, for example, once we support PR Previews for GitHub, like we can also create
01:03:00.500 --> 01:03:03.680
a branch automatically for you if you have the Supabase integration enabled.
01:03:04.180 --> 01:03:05.920
And we can do this kind of stuff as well.
01:03:06.020 --> 01:03:09.620
Or even we could show like some information about database.
01:03:10.000 --> 01:03:12.200
I don't know, like load or like memory usage,
01:03:12.320 --> 01:03:13.920
things are directly from our dashboard.
01:03:14.080 --> 01:03:14.860
So you don't have to go there.
01:03:15.080 --> 01:03:17.920
That's the main reason why we're building this infrastructure
01:03:18.180 --> 01:03:19.160
for the integration.
01:03:19.480 --> 01:03:21.620
Well, people can sign up to the waiting list
01:03:21.820 --> 01:03:24.420
and hopefully get on the private beta.
01:03:24.880 --> 01:03:26.180
We actually check the waiting list.
01:03:26.220 --> 01:03:29.080
We actually check the use cases, team sizes,
01:03:29.440 --> 01:03:31.440
like what are people building with it?
01:03:31.540 --> 01:03:33.400
Like we actually go and check it
01:03:33.480 --> 01:03:36.580
and we bring in people from the waiting list.
01:03:37.020 --> 01:03:39.220
Nice. You know, I didn't join the waiting list directly.
01:03:39.460 --> 01:03:42.820
I was added by some guy I know who was very kind
01:03:42.850 --> 01:03:44.560
to help me get some behind-the-scene look.
01:03:45.200 --> 01:03:46.360
So I don't know what the process is.
01:03:46.460 --> 01:03:48.560
Do you actually say what you want to do with it?
01:03:48.590 --> 01:03:51.360
And you evaluate that a little bit as well based on, like,
01:03:51.360 --> 01:03:53.340
hey, this would be a cool use case for us to support?
01:03:53.430 --> 01:03:54.960
There are many types of applications
01:03:55.150 --> 01:03:57.320
and many types of different team sizes,
01:03:57.600 --> 01:04:00.520
many types of things that people might want to build.
01:04:00.720 --> 01:04:03.020
And we try to see, like, okay, where is a case
01:04:03.160 --> 01:04:06.360
where we could be a good fit and we can provide a great service?
01:04:06.980 --> 01:04:08.880
And where are the things that people are trying to build?
01:04:09.220 --> 01:04:14.860
Also, it also helps us see, like, you know, like, what are people trying to do with Fasted
01:04:14.980 --> 01:04:17.080
Vehicle so that we know what we have to provide?
01:04:17.560 --> 01:04:23.800
But we actually go and check those, you know, like those submissions on, like, sexually thousands
01:04:24.010 --> 01:04:30.480
of people in the waiting list, but we still go and check and approve kind of manually still
01:04:30.780 --> 01:04:34.840
to bring a bunch of people on board in the different ways that we have been bringing people.
01:04:35.240 --> 01:04:39.180
So if people go and join the waiting list and actually tell us what they are, what is their
01:04:39.200 --> 01:04:41.900
use case, their team, what are they planning on doing?
01:04:42.440 --> 01:04:45.160
There's a much higher chance that we are going to go
01:04:45.340 --> 01:04:46.280
on to bring them up.
01:04:46.280 --> 01:04:46.500
MARK MANDEL: Awesome.
01:04:47.100 --> 01:04:49.280
So everyone, go join the waitlist.
01:04:49.360 --> 01:04:52.980
If you're doing FastAPI, I'll link to it in the show notes,
01:04:53.080 --> 01:04:53.420
of course.
01:04:53.860 --> 01:04:57.040
Thank you all for being here and sharing the story.
01:04:57.340 --> 01:05:00.900
And I, for one, am very excited to see FastAPI Cloud exist
01:05:01.000 --> 01:05:04.180
and just one more way to make FastAPI stronger
01:05:04.420 --> 01:05:06.400
and more resilient and so on.
01:05:06.400 --> 01:05:07.340
FRANCESC CAMPOY: Thank you very much.
01:05:07.580 --> 01:05:08.400
Thank you for having us.
01:05:08.580 --> 01:05:09.480
Yeah, it's super fun.
01:05:09.480 --> 01:05:10.260
Thanks for having us.
01:05:10.460 --> 01:05:10.840
Yeah, you bet.
01:05:11.220 --> 01:05:11.500
Bye, everyone.
01:05:11.640 --> 01:05:12.080
Bye, folks.
01:05:12.380 --> 01:05:12.680
Bye-bye.
01:05:12.940 --> 01:05:13.060
Bye.
01:05:14.300 --> 01:05:16.540
This has been another episode of Talk Python To Me.
01:05:16.820 --> 01:05:17.620
Thank you to our sponsors.
01:05:17.860 --> 01:05:19.120
Be sure to check out what they're offering.
01:05:19.340 --> 01:05:20.700
It really helps support the show.
01:05:21.560 --> 01:05:23.720
This episode is brought to you by CommandBook,
01:05:23.980 --> 01:05:26.080
a native macOS app that I built
01:05:26.240 --> 01:05:28.780
that gives long-running terminal commands a permanent home.
01:05:29.180 --> 01:05:31.180
No more juggling six terminal tabs every morning.
01:05:31.620 --> 01:05:33.040
Carefully craft a command once,
01:05:33.300 --> 01:05:34.700
run it forever with auto-restart,
01:05:34.900 --> 01:05:36.420
URL detection, and a full CLI.
01:05:36.880 --> 01:05:39.940
Download it for free at talkpython.fm/command book app.
01:05:41.040 --> 01:05:43.660
And it's brought to you by the Talk Python in Production Book,
01:05:44.190 --> 01:05:48.820
an inside look at 10 years of the real-world DevOps behind the Talk Python sites and apps.
01:05:49.160 --> 01:05:51.860
Check it out at talkpython.fm/DevOps book.
01:05:52.720 --> 01:05:54.580
If you or your team needs to learn Python,
01:05:54.790 --> 01:05:59.620
we have over 270 hours of beginner and advanced courses on topics ranging from
01:05:59.960 --> 01:06:04.860
complete beginners to async code, Flask, Django, HTML, and even LLMs.
01:06:05.140 --> 01:06:07.360
Best of all, there's no subscription in sight.
01:06:08.020 --> 01:06:09.680
Browse the catalog at talkpython.fm.
01:06:10.420 --> 01:06:12.360
And if you're not already subscribed to the show
01:06:12.600 --> 01:06:13.740
on your favorite podcast player,
01:06:14.400 --> 01:06:15.040
what are you waiting for?
01:06:15.720 --> 01:06:17.480
Just search for Python in your podcast player.
01:06:17.640 --> 01:06:18.460
We should be right at the top.
01:06:18.880 --> 01:06:20.420
If you enjoy that geeky rap song,
01:06:20.500 --> 01:06:21.720
you can download the full track.
01:06:21.860 --> 01:06:23.760
The link is actually in your podcast blur show notes.
01:06:24.600 --> 01:06:25.920
This is your host, Michael Kennedy.
01:06:26.320 --> 01:06:27.380
Thank you so much for listening.
01:06:27.600 --> 01:06:28.400
I really appreciate it.
01:06:28.820 --> 01:06:29.540
I'll see you next time.
01:06:41.180 --> 01:06:43.980
I'm out.