One thing to note about it is tiangolo is pretty content to maintain singular control over his projects which means the project only really advances when he has the time or interest to work on that specific project.
Yes, he recently responded to some criticism of this basically saying that he has no real intention to increase the bus factor or permit more community control to his projects, which is obviously his right, but is also something that people should consider when deciding whether or not to go with them.
Type hints are great when combined with a good IDE such as Pycharm, but are otherwise useless for Python. Sometimes, they are even missleading. Often they don't cover all the call options.
Complicated function calls should be made with keywords anyway. Leave positional only parameters to obvious functions such as pow() or sqrt().
The speed hit should be minimal. You are using Python, where dot access is a much more bigger performance eater than keyword arg functions.
Python does not have the scale to make typing worthwhile, but people are already making it a required Python skill.
I this feature is optional, then I should not be required to know it, right?
If you want static typing, please use another language that makes use of them to actually speed up the code. Let's keep the docstrings for documentation.
When I mentioned scaling I had in mind other issues with a large codebase - not actual performance at runtime.
For example, before type hints I found it difficult (even with PyCharm and other IDEs) to safely refactor code. I would end up missing specific usages of an old member name and discover it at runtime when the code raised an exception. In the best case scenario I would find it when running tests. In the worst case, in production.
Type hints make this a moot point, at least in real world usage. With type hints the IDE is smart enough to find all references when refactoring.
I am currently finishing up a moderately sized project in FastAPI, and for my next project I will strongly be recommending using Starlette alone.
https://pydantic-docs.helpmanual.io/
https://fastapi.tiangolo.com/
https://github.com/tiangolo/typer
We're using Pydantic for Robusta (https://github.com/robusta-dev/robusta) and absolutely love it. You get the best of traditional Python (rapid prototyping and no boilerplate) while still being able to scale your codebase and keep it maintainable. Robusta is the first large project I've written in Python where I'm not encountering type errors at runtime left and right.