Skip to main content

Downloads PyPI PyPI versions Code style: black Tests

logo PICLE - Python Interactive Command Line Shells

PICLE helps you build interactive CLI shells from Pydantic v2 models. Think of it as: your model tree becomes the command tree.

Built on top of Python's standard library CMD module, prompt_toolkit for interactive input, and Pydantic models to construct shell environments.

What you get out of the box:

  • command discovery + inline help (? / ??)
  • tab completion (works well with nested commands)
  • editable, persistent command history
  • input validation via Pydantic
  • optional pipes (|) to post-process output

Docs: https://dmulyalin.github.io/picle/

Install

pip install picle

Optional extras (Rich output, tables, YAML config support):

pip install "picle[full]"

A tiny shell app

This creates a small interactive shell:

Root
  └─ show
     ├─ version
     └─ clock
import time
from typing import Any

from pydantic import BaseModel, Field
from picle import App


class Show(BaseModel):
    version: Any = Field(
        None,
        description="Show software version",
        json_schema_extra={"function": "show_version"},
    )
    clock: Any = Field(
        None,
        description="Show current clock",
        json_schema_extra={"function": "show_clock"},
    )

    @staticmethod
    def show_version():
        return "0.1.0"

    @staticmethod
    def show_clock():
        return time.ctime()


class Root(BaseModel):
    show: Show = Field(None, description="Show commands")

    class PicleConfig:
        prompt = "picle#"
        intro = "PICLE sample app"


if __name__ == "__main__":
    App(Root).start()

Try it:

picle#show version
0.1.0

picle#show clock
Fri May  2 22:44:01 2025

picle#?
... shows available commands

Comparison With Other Projects

PICLE is not trying to replace every CLI library. It’s mostly for the “network device / DB console / ops shell” style workflow: you stay in a shell, you explore commands, you get completion + help, and your input is validated.

Some nearby tools and where PICLE fits:

One-shot CLI command frameworks

Great when you want mytool subcommand --flags and exit.

  • argparse: batteries-included, stable, not interactive by default.
  • click / typer: excellent UX for subcommands/options, but still “run once and exit”.
  • python-fire: fast to expose a Python object as CLI, but it’s not focused on interactive shells, completion, or validation the way a model-driven shell is.

You can build REPL-like flows with these, but PICLE starts from the REPL/shell side.

Interactive shell / REPL frameworks

  • Python’s built-in cmd: the base that PICLE builds on.
  • cmd2: adds a lot of features on top of cmd (nice project). PICLE’s angle is different: it uses Pydantic models as the command tree, so completion/help/validation all come from the schema.
  • python-nubia (archived): similar “interactive shell” spirit, but the project is not maintained and doesn’t integrate with Pydantic.

TUI / input toolkits

  • prompt-toolkit: PICLE uses it for portable line editing, history, and terminal input. PICLE adds the model-driven command tree, parsing, help, completion rules, validation, and dispatch.
  • textual: awesome for full-screen TUIs (apps, dashboards). Different goal than a command shell.

Output formatting helpers

PICLE can use these (optionally) but doesn’t depend on them:

  • rich: pretty output rendering
  • tabulate: text tables
  • PyYAML: YAML config support (used by ConfigModel)

Download files

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

Source Distribution

picle-0.13.0.tar.gz (35.3 kB view details)

Uploaded Source

Built Distribution

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

picle-0.13.0-py3-none-any.whl (37.0 kB view details)

Uploaded Python 3

File details

Details for the file picle-0.13.0.tar.gz.

File metadata

  • Download URL: picle-0.13.0.tar.gz
  • Upload date:
  • Size: 35.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.2.1 CPython/3.11.9 Windows/10

File hashes

Hashes for picle-0.13.0.tar.gz
Algorithm Hash digest
SHA256 ebefd7efada7119d060575a4b303292e53e3c9ac097f79611f1362503a3f5567
MD5 a09a0e124337433f6c372be94aaf478a
BLAKE2b-256 95f0625ac020facba2419456d10b82511d36c722b3a48cb5d5a7ab4376e1e12a

See more details on using hashes here.

File details

Details for the file picle-0.13.0-py3-none-any.whl.

File metadata

  • Download URL: picle-0.13.0-py3-none-any.whl
  • Upload date:
  • Size: 37.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.2.1 CPython/3.11.9 Windows/10

File hashes

Hashes for picle-0.13.0-py3-none-any.whl
Algorithm Hash digest
SHA256 92d84f8e1ace9976e4a6ca6f493a762a249b662ec961687d212cf01d0c18246d
MD5 c5ee7a5c348f2c66ececd3118ce93d51
BLAKE2b-256 6398fdf261caabfca56374ead9c17d7fcf97d98357e8ba87088b8aecdd592504

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.13.0 This release

2 files

0.12.3

2 files

0.12.2

2 files

0.12.1

2 files

0.12.0

2 files

0.11.2

2 files

0.11.1

2 files

0.11.0

2 files

0.10.1

2 files

0.10.0

2 files

0.9.3

2 files

0.9.2

2 files

0.9.1

2 files

0.9.0

2 files

0.8.8

2 files

0.8.7

2 files

0.8.6

2 files

0.8.5

2 files

0.8.4

2 files

0.8.3

2 files

0.8.2

2 files

0.8.1

2 files

0.8.0

2 files

0.7.3

2 files

0.7.2

2 files

0.7.1

2 files

0.7.0

2 files

0.6.0

2 files

0.5.3

2 files

0.5.2

2 files

0.5.1

2 files

0.5.0

2 files

0.4.0

2 files

0.3.0

2 files

0.2.0

2 files

0.1.0

2 files

Supported by

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