# Typer Comparison

Much of Cyclopts was inspired by the excellent Typer library. Despite its popularity, Typer has some traits that I (and others) find less than ideal. Part of this stems from Typer's age, with its first release in late 2019, soon after Python 3.8's release. Because of this, most of its API was initially designed around assigning proxy default values to function parameters. This made the decorated command functions difficult to use outside of Typer. With the introduction of `Annotated` in python3.9, type-hints were able to be directly annotated, allowing for the removal of these proxy defaults.

Additionally, Typer is built on top of Click. This makes it difficult for newcomers to figure out which elements are Typer-related and which elements are click-related. It's also hard to tell whether the following criticisms stem from Typer, or the underlying Click. For better-or-worse, Cyclopts uses its own internal parsing strategy, gaining complete control over the process.

This section was written about the current version of Typer: `v0.9.0`.

Topics

- Argument vs Option
- Positional or Keyword Arguments
- Choices
- Default Command
- Docstring Parsing
- Decorator Parentheses
- Optional Lists
- Keyword Multiple Values
- Flag Negation
- Help Defaults
- Validation
- Union/Optional Support
- Adding a Version Flag
- Documentation