Schema-driven form wizards for the terminal.
Project description
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/thenlogic. - Jinja2 defaults — reference previous answers in default values using
{{ answer_key }}template syntax. - Pluggable renderer backends — use the built-in zero-dependency
stdlibrenderer, the styledrichrenderer, thecookiecutter-style renderer, or implement your own by subclassingBaseRenderer. - 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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8c7cb0ceb5c60a3f83e693088be25de37f27cd930270f6a6a08936b7f302b0c8
|
|
| MD5 |
bd03879a6a94c94d45d56e46d27690dc
|
|
| BLAKE2b-256 |
5d438a95ae4b08d4109702df4cb29d51de6c623625ffb73fdbc93e0bdf693047
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a8274fbfd754fb18ba9d149a2f881447986aa4bc70ab558e7ef131b94ebbe7df
|
|
| MD5 |
2d5bff1070d67c8527a0dafd79a056af
|
|
| BLAKE2b-256 |
40b5c7dc9108d172467d4f1f9590994a627a7b90f36f34485fb9d87e448951aa
|