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.0a1.tar.gz (22.9 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.0a1-py3-none-any.whl (30.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: tui_forms-1.0.0a1.tar.gz
  • Upload date:
  • Size: 22.9 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.0a1.tar.gz
Algorithm Hash digest
SHA256 bcba5e40c6fc3f1fe0c7349ffae3e5ae3f834086442e0bbfb7ec749fdcbf4942
MD5 f2668e4a05540c979b9bd218bce8205a
BLAKE2b-256 97c41c0e3842b44dc6412d952cc1088278d96fa0acbf37f09d3379701ee7d40a

See more details on using hashes here.

File details

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

File metadata

  • Download URL: tui_forms-1.0.0a1-py3-none-any.whl
  • Upload date:
  • Size: 30.6 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.0a1-py3-none-any.whl
Algorithm Hash digest
SHA256 92e1f22bad2b1011b122e604c8a3979f70e11d6f44be2e1072ed093c7ff4f493
MD5 c51f47197d5aeadfa4035ac116616fd6
BLAKE2b-256 8dfbf4a90567be251118657a70c546d1736d8ae972da7cc1f1d0894cab9cdd21

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