## Design based on **FastAPI**
**Typer** is the little sibling of FastAPI.
It follows the same design and ideas. If you know FastAPI, you already know **Typer**... more or less.
## Just Modern Python
It's all based on standard **Python 3.6 type** declarations. No new syntax to learn. Just standard modern Python.
If you need a 2 minute refresher of how to use Python types (even if you don't use FastAPI or Typer), check the FastAPI tutorial section: Python types intro.
You will also see a 20 seconds refresher on the section [Tutorial - User Guide: First Steps](tutorial/first-steps.md).
## Editor support
**Typer** was designed to be easy and intuitive to use, to ensure the best development experience. With autocompletion everywhere.
You will rarely need to come back to the docs.
Here's how your editor might help you:
* in Visual Studio Code:
![editor support](img/vscode-completion.png)
* in PyCharm:
![editor support](img/pycharm-completion.png)
You will get completion for everything. That's something no other CLI library provides right now.
No more guessing what type was that variable, if it could be `None`, etc.
### Short
It has sensible **defaults** for everything, with optional configurations everywhere. All the parameters can be fine-tuned to do what you need, customize the help, callbacks per parameter, make them required or not, etc.
But by default, it all **"just works"**.
## User friendly CLI apps
The resulting CLI apps created with **Typer** have the nice features of many "pro" command line programs you probably already love.
* Automatic help commands and options.
* Automatic command and sub-command structure handling (you will see more about sub-commands in the Tutorial - User Guide).
* Automatic autocompletion for the CLI app in all operating systems, in all the shells (Bash, Zsh, Fish, PowerShell), so that the final user of your app can just hit TAB and get the options of sub-commands. *
!!! note * Autocompletion
For the autocompletion to work on all shells you also need to add the dependency `click-completion`.
Just that. And **Typer** does the rest.
If **Typer** detects `click-completion` installed, it will automatically create a command to install completion for the user's shell.
Then you can tell the user to run that command and the rest will just work.
## The power of Click
Click is one of the most popular tools for building CLIs in Python.
**Typer** is based on it, so you get all its benefits, plug-ins, robustness, etc.
But you can write simpler code with the benefits of modern Python.