How to build CLIs using Quo

Gerrishon Sirere


Quo is a Python based toolkit for writing Command-Line Interface(CLI) applications. Quo is making headway towards composing speedy and orderly CLI applications while forestalling any disappointments brought about by the failure to execute a CLI API.

Quo is easy to learn, and does not come with needless baggage and contains a number of builtin features you can use to create elegant output in your CLI.


Quo works flawlessly with Linux, OSX, and Windows. Quo requires Python 3.8 or later.


Getting Started


You can install quo via the Python Package Index (PyPI)

pip install -U quo

Run the following to test Quo output on your terminal:

python -m quo


Quo echo

To output formatted text to your terminal you can import the echo method. Try this:

Example 1

from quo import echo echo(f"Hello, World!", fg="red", italic=True, bold=True))
Hello World

Example 2

from quo import echo echo("Quo is ", nl=False) echo("scalable", bg="red", fg="black")

Quo print

Alternatively, you can import print

from quo import print print('<b>This is bold</b>') print('<i>This is italic</i>') print('<u>This is underlined</u>') # Colors from the ANSI palette. print('<red>This is red</red>') print('<style fg="green" bg="red">Green on red background</stlye>')


Quo prompt

from quo import prompt prompt("What is your name?")
from quo.prompt import Prompt session = Prompt() session.prompt("Type something:")

Read more on Prompt.

Launching Applications

Quo supports launching applications through Console.launch. This can be used to open the default application associated with a URL or filetype.

from quo.console import Console console = Console() console.launch("")

Read more on Console.



Press [Tab] to autocomplete

from quo.prompt import Prompt from quo.completion import WordCompleter example = WordCompleter(['USA', 'UK', 'Canada', 'Kenya']) session = Prompt(completer=example) session.prompt('Which country are you from?: ')


Auto suggestion is a way to propose some input completions to the user. Usually, the input is compared to the history and when there is another entry starting with the given text, the completion will be shown as gray text behind the current input. Pressing the right arrow → or ctrl-e will insert this suggestion, alt-f willinsert the first word of the suggestion.

from quo.history import MemoryHistory from quo.prompt import Prompt MemoryHistory.append("import os") MemoryHistory.append('print("hello")') MemoryHistory.append('print("world")') MemoryHistory.append("import path") session = Prompt(history=MemoryHistory, suggest="history") while True: session.prompt('> ')

Read more on Completions.

Documenting Scripts

Quo automatically generates help pages for your command-line tools.

from quo import print from quo.console import command from quo.console import app @command() @app('--count', default=1, help='number of greetings') @app('--name', prompt="What is your name?", help="The person to greet") def hello(count: int, name: str): """This script prints hello NAME COUNT times.""" for x in range(count): print(f"Hello {name}!") if __name__ == "__main__": hello()

And what it looks like after executing:

python --help
Help Text


Creating a new progress bar can be done by calling the class ProgressBar The progress can be displayed for any iterable. This works by wrapping the iterable (like range) with the class ProgressBar

import time from quo.progress import ProgressBar with ProgressBar() as pb: for i in pb(range(800)): time.sleep(.01)

Read more on Progress.

Key Binding

A key binding is an association between a physical key on a keyboard and a parameter.

from quo import echo from quo.keys import bind from quo.prompt import Prompt session = Prompt() # Print "Hello world" when ctrl-h is pressed @bind.add("ctrl-h") def _(event): echo("Hello, World!") session.prompt(">> ")

Read more on Key bindings.


This is a high level API for displaying dialog boxes to the user for informational purposes, or get input from the user.

  1. Example of a message box dialog.
from quo.dialog import MessageBox MessageBox( title="Message pop up window", text="Do you want to continue?\nPress ENTER to quit.")

The above code produces the following output Message Box

  1. Example of a prompt box dialog
from quo.dialog import InputBox InputBox( title="InputBox shenanigans", text="What Country are you from?:")
Prompt Box

Read more on Dialogs.


Function Table offers a number of configuration options to set the look and feel of the table, including how borders are rendered and the style and alignment of the columns.


from quo.table import Table data = [ ["Name", "Gender", "Age"], ["Alice", "F", 24], ["Bob", "M", 19], ["Dave", "M", 24] ] Table(data)


A collection of reusable components for building full screen applications.


Widget that displays the given text. It is not editable or focusable.

from quo import container from quo.widget import Label content = Label("Hello, World", style="fg:black bg:red") # Press `ctrl-c` to exit container(content, bind=True, full_screen=True)

Read more on Widgets.

Quo is simple. If you know Python you can easily use quo and it can integrate with just about anything.

FREE VS Code / PyCharm Extensions I Use

✅ Write cleaner code with Sourcery, instant refactoring suggestions: Link *

* This is an affiliate link. By clicking on it you will not have any additional costs, instead you will support me and my project. Thank you! 🙏

Check out my Courses