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.0b2.tar.gz (1.2 MB 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.0b2-py3-none-any.whl (1.6 MB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: tui_forms-1.0.0b2.tar.gz
  • Upload date:
  • Size: 1.2 MB
  • 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.0b2.tar.gz
Algorithm Hash digest
SHA256 05603a5c528eba9d0b10843175fdc69e0316ff5955bd89d9c7d3b1e72ba17aee
MD5 6bcc7b3c554bd22a53db46d55ffc25e4
BLAKE2b-256 ccf4d322a781d50373ba3ac72a251a1c5bfd75bcac1b8cf532ca9754804df3ee

See more details on using hashes here.

File details

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

File metadata

  • Download URL: tui_forms-1.0.0b2-py3-none-any.whl
  • Upload date:
  • Size: 1.6 MB
  • 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.0b2-py3-none-any.whl
Algorithm Hash digest
SHA256 0ce11ede01bc4c6fc541fe7ab4eb10cdc7e3d722bb6c10af742ed3169854b4de
MD5 22031e7a4a823de4442d99cb264d3eff
BLAKE2b-256 9d6df84e2ab64417ec817da909c708d2ad88115b01fac59006f0cafe6f86d9ab

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