Source code: https://github.com/volfpeter/htmui
Live demo: https://htmui.vercel.app
htmui
Python UI components for htmy, wrapping BasecoatUI and Tailwind CSS.
htmui is designed with hypermedia applications, and specifically HTMX, in mind. Components reproduce Basecoat's documented markup so Basecoat's runtime can enhance them.
htmy and holm have built-in Jinja support. If you use another templating engine, converting the components is straightforward, because htmy mimics HTML.
Key features
- Vendored: copy the components you need into your project and adapt them.
htmui initCLI that copies selected components, their dependencies, and shared utilities.- BasecoatUI components as typed
htmyfunctions: buttons, dialogs, sidebars, forms, and more. - Extra helpers such as
codeblockthat are not part of Basecoat. - Works anywhere
htmyworks, including holm.
Prerequisites
You need htmy in your project:
pip install htmy
For the best developer experience, it is recommended to use holm. It brings built-in htmy and HTMX support, and is built around FastAPI.
The copied components also need BasecoatUI and Tailwind CSS on the page. CDN snippets are included (see Assets).
Usage
htmui is designed to be vendored. You do not install it as a runtime dependency. Instead, you copy the components you need into your project and adjust them.
uvx htmui init
This copies the full catalog into ./components. Use -c to copy only the components you need. Dependencies are included automatically:
uvx htmui init -c dialog -c select
Useful options:
uvx htmui init --src # install into src/components/
uvx htmui init -p ui # install into ./ui
uvx htmui init -c dialog --dry-run # print the plan, write nothing
uvx htmui init --force # overwrite existing files
uvx htmui init --skip-existing # keep existing files
uvx htmui version # package and per-component versions
You can also copy files from htmui/basecoat/ by hand.
Example
After htmui init:
from htmy import ComponentType, html
from components.alert import alert
from components.button import button
def saved() -> ComponentType:
return html.div(
alert("Your changes have been saved.", title="Saved"),
button("Continue"),
)
Every component has a live example and its Python source in the sidebar.
Assets
You can add the CDN snippets from cdn to your document head:
from htmy import ComponentType, html
from components import cdn
def head() -> ComponentType:
return html.head(
cdn.css,
cdn.tailwind_css,
cdn.js,
)
Some Basecoat classes may not work with the Tailwind CDN setup, so a local JS/CSS setup is recommended for production. The demo application shows one such setup.
codeblock includes optional Highlight.js helpers for syntax highlighting.
Related projects
- htmy: async Python server-side rendering.
- holm: Next.js-like developer experience on FastAPI,
htmy, and FastHX. - FastHX: HTMX rendering for FastAPI.
- BasecoatUI: the design system these components wrap.
Support
Consider supporting the project through sponsoring, or reach out for consulting so you can get the most out of the library.
Development
Python:
uvfor project and dependency management.poethepoetfor tasks. Runuv run poeto see them.mypyfor static analysis.rufffor formatting and linting.
JavaScript:
npmfor the demo app's Tailwind and Basecoat tooling.
To get started:
uv sync
npm install
honcho start
honcho start runs the demo app and the Tailwind watcher together. You can also run uv run poe dev and uv run poe build-dev-css --watch separately.
The index page of the demo is generated from this README (uv run poe build-content).
License
The package is open-sourced under the conditions of the MIT license.
Credits
This project wouldn't exist without the components and documentation of BasecoatUI.
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 htmui-0.1.0.tar.gz.
File metadata
- Download URL: htmui-0.1.0.tar.gz
- Upload date:
- Size: 25.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1d113a55926c656a25358591f3951809487d5fe70bdb57f9aef6f5c57b950f96
|
|
| MD5 |
39604627b7c6bdab6e1977d85907db6c
|
|
| BLAKE2b-256 |
311477e54616f622d7dbbea3ea18c092b16fcf7c791c5f25285b962b07b9aaa3
|
Provenance
The following attestation bundles were made for htmui-0.1.0.tar.gz:
Publisher:
publish.yml on volfpeter/htmui
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
htmui-0.1.0.tar.gz -
Subject digest:
1d113a55926c656a25358591f3951809487d5fe70bdb57f9aef6f5c57b950f96 - Sigstore transparency entry: 2452419163
- Sigstore integration time:
-
Permalink:
volfpeter/htmui@53b4f2b9a1104732c47db08e88f438c9e105cfdb -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/volfpeter
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@53b4f2b9a1104732c47db08e88f438c9e105cfdb -
Trigger Event:
release
-
Statement type:
File details
Details for the file htmui-0.1.0-py3-none-any.whl.
File metadata
- Download URL: htmui-0.1.0-py3-none-any.whl
- Upload date:
- Size: 42.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
83d4885d940e031c02a751d992b243dd95a5729eddaa2814709c1a24f7f28cfb
|
|
| MD5 |
ac6f8cb87cc31481260d121f86c949c6
|
|
| BLAKE2b-256 |
8ee0bc2d54588f4456e32cfb7a8f1d4f87e9ea2cf11fd384397f799524192cc1
|
Provenance
The following attestation bundles were made for htmui-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on volfpeter/htmui
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
htmui-0.1.0-py3-none-any.whl -
Subject digest:
83d4885d940e031c02a751d992b243dd95a5729eddaa2814709c1a24f7f28cfb - Sigstore transparency entry: 2452419222
- Sigstore integration time:
-
Permalink:
volfpeter/htmui@53b4f2b9a1104732c47db08e88f438c9e105cfdb -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/volfpeter
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@53b4f2b9a1104732c47db08e88f438c9e105cfdb -
Trigger Event:
release
-
Statement type: