DEV Community

Cover image for 🎯 Build a Terminal Task Manager in Python with pyfiglet and rich!!!
Nishkarsh Pandey
Nishkarsh Pandey

Posted on

🎯 Build a Terminal Task Manager in Python with pyfiglet and rich!!!

Spice up your command-line apps with beautiful visuals and interactivity!

🚀 What You’ll Build
A fully functional task manager you can run in your terminal — complete with:

✅ Add/delete tasks
✅ Mark tasks as complete
✅ Colorful ASCII headers
✅ Richly styled tables
✅ Interactive CLI menus

All using Python and a couple of lesser-known but super cool libraries!

🧰 What You’ll Need
Install these first:

pip install pyfiglet rich

Enter fullscreen mode Exit fullscreen mode

💡 Why This Is Fun
CLI apps often feel dry — but throw in some ASCII art and beautiful tables, and suddenly you’ll want to open your terminal. I use these techniques to stay motivated during long automation or data scraping runs — it adds a bit of flair!

🧑‍💻 The Code: task_manager.py

import pyfiglet
from rich.console import Console
from rich.table import Table
from rich.prompt import Prompt
import sys

console = Console()
tasks = []

def show_banner():
    ascii_banner = pyfiglet.figlet_format("Task Manager")
    console.print(f"[bold cyan]{ascii_banner}[/bold cyan]")

def show_menu():
    console.print("\n[bold yellow]Options:[/bold yellow]")
    console.print("[1] View Tasks")
    console.print("[2] Add Task")
    console.print("[3] Complete Task")
    console.print("[4] Delete Task")
    console.print("[5] Exit")

def display_tasks():
    if not tasks:
        console.print("[italic]No tasks available.[/italic]")
        return
    table = Table(title="📋 Your Tasks", show_lines=True)
    table.add_column("ID", style="dim")
    table.add_column("Task", style="cyan")
    table.add_column("Status", style="green")

    for idx, task in enumerate(tasks):
        table.add_row(str(idx), task["name"], task["status"])

    console.print(table)

def add_task():
    name = Prompt.ask("Enter task name")
    tasks.append({"name": name, "status": "Pending"})
    console.print("[green]Task added![/green]")

def complete_task():
    display_tasks()
    index = Prompt.ask("Enter task ID to complete")
    try:
        tasks[int(index)]["status"] = "✅ Completed"
        console.print("[green]Task marked as completed![/green]")
    except (IndexError, ValueError):
        console.print("[red]Invalid task ID![/red]")

def delete_task():
    display_tasks()
    index = Prompt.ask("Enter task ID to delete")
    try:
        deleted = tasks.pop(int(index))
        console.print(f"[red]Deleted:[/red] {deleted['name']}")
    except (IndexError, ValueError):
        console.print("[red]Invalid task ID![/red]")

def main():
    show_banner()
    while True:
        show_menu()
        choice = Prompt.ask("Choose an option", choices=["1", "2", "3", "4", "5"])
        if choice == "1":
            display_tasks()
        elif choice == "2":
            add_task()
        elif choice == "3":
            complete_task()
        elif choice == "4":
            delete_task()
        elif choice == "5":
            console.print("[bold cyan]Goodbye! 👋[/bold cyan]")
            sys.exit()

if __name__ == "__main__":
    main()

Enter fullscreen mode Exit fullscreen mode

Output

Terminal1

Terminal2

🎉 Wrap-Up

This is a great base for building more advanced terminal tools — think:

Save/load from JSON or a file.
Add due dates, priorities, tags.
Sort/filter/search tasks.
Keyboard shortcuts.

If you enjoyed this, try exploring more rich features like progress bars, panels, and live dashboards!

💬 Over to You!
Have you built any cool terminal tools using Python? Got tips for making CLIs more interactive and fun? Drop a comment!

Top comments (8)

Collapse
 
dotallio profile image
Dotallio

Love how the banner and table styling instantly make this way more inviting - I always add a dash of color to my own CLI scripts too! Have you tried adding keyboard shortcuts for even faster task management?

Collapse
 
nish2005karsh profile image
Nishkarsh Pandey

Thank you so much! I totally agree—color really livens up the CLI experience.
Adding keyboard shortcuts is a fantastic idea! It would definitely speed up task management and make the tool even more user-friendly. I’m planning to explore that next, maybe with libraries like keyboard or readchar for capturing key inputs.
Would love to hear if you have any favorite shortcuts or tips!

Collapse
 
madhurima_rawat profile image
Madhurima Rawat

This looks so beautiful!

Collapse
 
nish2005karsh profile image
Nishkarsh Pandey

Thank you so much, Madhurima! 😊
I'm really glad you liked it — making the terminal visually fun definitely boosts motivation during long sessions. I’m working on expanding this into a full-featured CLI dashboard next — stay tuned! 💻🌟

Collapse
 
nathan_tarbert profile image
Nathan Tarbert

Pretty cool, I love spicing up boring terminal stuff - the colors just make me wanna use it more honestly.

Collapse
 
nish2005karsh profile image
Nishkarsh Pandey

Thanks!! I totally agree -- colors really make the terminal more fun and engaging!

Collapse
 
aidasaid profile image
Aida Said

Looks amazing

Collapse
 
nadeem_zia_257af7e986ffc6 profile image
nadeem zia

Wow, amazing work