Skip to main content

A shell for typer apps with autocompletion and history

Project description

Typer Shell!

Beautiful command-line shell with Typer!

This is just an update to click-shell for typer.

I also added some features like:

  • better help by default
  • support for typer default functions (just name one of your commands 'default' and it will be triggered when nothing else is recognized)
  • easily drop into an ipython terminal with the local context loaded with 'shell'
  • rich sample commands for file operations, tables, progress bars, and more

See it in action!

And checkout the demo script:

To run the demos, you can execute them with uv run:

uv run python demo/demo.py
uv run python demo/simple_demo.py

Or use the convenient just commands:

just demo
just simple-demo

There are also sample helper functions in typer_shell/samples.py that you can use in your own applications. These include:

Sample Commands

  • File Operations: ls, cat, pwd - basic file system navigation
  • Rich UI: table, progress, panel - demonstrate rich formatting capabilities
  • Interactive: ask - prompt for user input with rich styling
  • System: env, date - show environment variables and current time
  • Development: shell - drop into IPython with current context

Add them to your shell with:

from typer_shell.samples import add_sample_commands
add_sample_commands(app)

Using Callbacks

Because typer-shell uses Typer's callback mechanism to launch the interactive shell, you cannot use the standard @app.callback() decorator, as it will conflict and prevent the shell from loading.

If you need to run code before the shell launches (for example, to set up state), you can pass a function to the user_callback parameter in make_typer_shell.

Your function will be called with the Typer.Context object before the shell starts.

import typer
from typer_shell import make_typer_shell

def my_setup_logic(ctx: typer.Context):
    print("This runs before the shell starts!")
    # You can access and modify the context object here
    ctx.obj.my_value = 42

app = make_typer_shell(user_callback=my_setup_logic)

@app.command()
def my_command(ctx: typer.Context):
    print(f"my_value is: {ctx.obj.my_value}")

if __name__ == "__main__":
    app()

Development

This project uses uv for dependency management and ruff for linting/formatting.

# Setup development environment
uv sync

# Run demos
just demo
just simple-demo

# Code quality
just format  # Format code
just lint    # Check for issues
just fix     # Auto-fix issues

# Build and publish
just build
just publish

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

typer_shell-1.0.3.tar.gz (18.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

typer_shell-1.0.3-py3-none-any.whl (18.0 kB view details)

Uploaded Python 3

File details

Details for the file typer_shell-1.0.3.tar.gz.

File metadata

  • Download URL: typer_shell-1.0.3.tar.gz
  • Upload date:
  • Size: 18.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.7.15

File hashes

Hashes for typer_shell-1.0.3.tar.gz
Algorithm Hash digest
SHA256 e842b8e75677bfaea510bf373891b10700e001d32ed958713de7dcafb7871ef6
MD5 38a5504e77acfae12dcb49e06a8d8a7b
BLAKE2b-256 9bc40f75a24961d93d4c2ba0352342beec7993799d19b107ae303469dc04efe0

See more details on using hashes here.

File details

Details for the file typer_shell-1.0.3-py3-none-any.whl.

File metadata

File hashes

Hashes for typer_shell-1.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 d22a6ff4512f097a6547f831b2a1ad08ae3cdbf070e8fdf72fadeacf0244f632
MD5 fc286706153b49aa39e6a3406869b579
BLAKE2b-256 c5df9bf155ac9fb1aaadb2463fd1baa21e2adc1bb899311a5ebd4629bb98285f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page