Skip to main content

Schema-driven form wizards for the terminal.

Project description

TUI Forms: Schema-driven form wizards for the terminal

PyPI PyPI - Python Version PyPI - Wheel PyPI - License PyPI - Status

CI

GitHub contributors GitHub Repo stars

Schema-driven form wizards for the terminal.

TUI Forms is a Python library for building interactive, schema-driven form wizards in terminal user interfaces. Define your form once using JSONSchema — field types, validation rules, and defaults — and tui-forms renders a guided, step-by-step wizard in the terminal.

Inspired by react-jsonschema-form, it brings the same declarative, schema-first philosophy to the terminal. Whether you are building a CLI tool, a developer scaffold, or a TUI application, TUI Forms gives you a consistent, extensible form layer without reinventing the wheel.

Full documentation: https://collective.github.io/tui-forms

✨ Features

  • Schema-driven forms — define your form once using JSONSchema; field types, defaults, and validation rules live in the schema.
  • Multiple question types — text, boolean (yes/no), single-choice, and multiple-choice questions, plus hidden constant and computed values.
  • Conditional questions — show or hide questions based on previous answers using JSONSchema if/then logic.
  • Jinja2 defaults — reference previous answers in default values using {{ answer_key }} template syntax.
  • Pluggable renderer backends — use the built-in zero-dependency stdlib renderer, the styled rich renderer, the cookiecutter-style renderer, or implement your own by subclassing BaseRenderer.
  • Progress indicator — automatically shows [current/total] progress as the user works through the form.

🚀 Quick start

from tui_forms import create_renderer

schema = {
    "title": "New project",
    "properties": {
        "name": {
            "type": "string",
            "title": "Project name",
            "default": "my-project",
        },
        "use_tests": {
            "type": "boolean",
            "title": "Include tests?",
            "default": True,
        },
        "language": {
            "type": "string",
            "title": "Primary language",
            "oneOf": [
                {"const": "python", "title": "Python"},
                {"const": "rust", "title": "Rust"},
            ],
        },
    },
}

renderer = create_renderer("stdlib", schema)
answers = renderer.render()
# {"name": "my-project", "use_tests": True, "language": "python"}

For more examples and integration guides, see the full documentation.

📦 Installation

Install tui-forms using your preferred package manager.

The core package has no dependencies beyond the Python standard library. Optional extras enable additional renderer backends.

pip

pip install tui-forms

With the rich and cookiecutter renderer backends:

pip install "tui-forms[rich]"

uv

uv add tui-forms

poetry

poetry add tui-forms

🛠️ Contributing

Clone the repository and set up the development environment:

git clone https://github.com/collective/tui-forms.git
cd tui-forms
make install

Key commands:

Command Description
make test Run all tests
make test-coverage Run tests with coverage report
make format Format the codebase
make lint Run the linter
make lint-mypy Check type hints
make docs-html Build the HTML documentation
make docs-livehtml Build and serve documentation locally

For a full contributing guide, see Contributing to TUI Forms.

📄 License

TUI Forms is distributed under the MIT License.

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

tui_forms-1.0.0a2.tar.gz (27.8 kB view details)

Uploaded Source

Built Distribution

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

tui_forms-1.0.0a2-py3-none-any.whl (37.2 kB view details)

Uploaded Python 3

File details

Details for the file tui_forms-1.0.0a2.tar.gz.

File metadata

  • Download URL: tui_forms-1.0.0a2.tar.gz
  • Upload date:
  • Size: 27.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.8 {"installer":{"name":"uv","version":"0.10.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for tui_forms-1.0.0a2.tar.gz
Algorithm Hash digest
SHA256 478e4a26ba2da6db97f04e085e337256c175e6880b18f0b514fdf2e704410bb0
MD5 06712d9802494ab54d1f82f9d616c468
BLAKE2b-256 7d16e205eeede7028fadf0d76beb774a7e37563420fcdcdaac18eef043608c58

See more details on using hashes here.

File details

Details for the file tui_forms-1.0.0a2-py3-none-any.whl.

File metadata

  • Download URL: tui_forms-1.0.0a2-py3-none-any.whl
  • Upload date:
  • Size: 37.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.8 {"installer":{"name":"uv","version":"0.10.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for tui_forms-1.0.0a2-py3-none-any.whl
Algorithm Hash digest
SHA256 f0f203a9cc0eaa3f5246f2f1fda1939b246aa9369618a666011cd54e139931c5
MD5 d05275d50b5da26850bf27f4caaa1318
BLAKE2b-256 f06941e050aaf8a58475410c754d783a0640fd375c635a703226709b7a1b8b49

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