Skip to content

CLI Application Directory

You can get the application directory where you can, for example, save configuration files with typer.get_app_dir():

from pathlib import Path

import typer

APP_NAME = "my-super-cli-app"


def main():
    app_dir = typer.get_app_dir(APP_NAME)
    config_path: Path = Path(app_dir) / "config.json"
    if not config_path.is_file():
        typer.echo("Config file doesn't exist yet")


if __name__ == "__main__":
    typer.run(main)

It will give you a directory for storing configurations appropriate for your CLI program for the current user in each operating system.

Check it:

$ python main.py

Config file doesn't exist yet

About Path

If you hadn't seen something like that:

Path(app_dir) / "config.json"

A Path object can be used with / and it will convert it to the separator for the current system (/ for Unix systems and \ for Windows).

If the first element is a Path object the next ones (after the /) can be str.

And it will create a new Path object from that.

If you want a quick guide on using Path() you can check this post on Real Python or this post by Trey Hunner.

In the code above, we are also explicitly declaring config_path as having type Path to help the editor provide completion and type checks:

config_path: Path = Path(app_dir) / "config.json"

Otherwise it could think it's a sub-type (a PurePath) and stop providing completion for some methods.