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.0a4.tar.gz (30.3 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.0a4-py3-none-any.whl (41.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: tui_forms-1.0.0a4.tar.gz
  • Upload date:
  • Size: 30.3 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.0a4.tar.gz
Algorithm Hash digest
SHA256 8c7cb0ceb5c60a3f83e693088be25de37f27cd930270f6a6a08936b7f302b0c8
MD5 bd03879a6a94c94d45d56e46d27690dc
BLAKE2b-256 5d438a95ae4b08d4109702df4cb29d51de6c623625ffb73fdbc93e0bdf693047

See more details on using hashes here.

File details

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

File metadata

  • Download URL: tui_forms-1.0.0a4-py3-none-any.whl
  • Upload date:
  • Size: 41.0 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.0a4-py3-none-any.whl
Algorithm Hash digest
SHA256 a8274fbfd754fb18ba9d149a2f881447986aa4bc70ab558e7ef131b94ebbe7df
MD5 2d5bff1070d67c8527a0dafd79a056af
BLAKE2b-256 40b5c7dc9108d172467d4f1f9590994a627a7b90f36f34485fb9d87e448951aa

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