Jinjalume
Server-rendered Tailwind UI components for Flask, Jinja, and Python web apps.
Jinjalume is an open-source, HTML-first component kit for developers who want reusable UI in Jinja templates without adopting a frontend SPA framework.
Early MVP: the API and visual language will evolve. Feedback and contributions are welcome.
What is included
- A small Flask extension that makes Jinjalume templates available to your app
- Reusable Jinja macros for buttons, badges, alerts, cards, inputs, textareas, avatars, spinners, and dialogs
- Tailwind CSS v4 build setup
- A working Flask demo
- Contributor documentation, issue templates, and continuous integration
Quick start
python -m venv .venv
source .venv/bin/activate
python -m pip install -e ".[dev]"
npm install
npm run build:css
flask --app demo.app run --debug
Open http://127.0.0.1:5000.
Browse the component gallery at https://phcodesage.github.io/jinjalume/.
PyPI release
Releases are published from GitHub Actions when a version tag such as v0.1.0 is pushed. The workflow builds and validates both the source distribution and wheel, then publishes them through PyPI Trusted Publishing.
Before the first release, the project maintainer must add a pending publisher at https://pypi.org/manage/account/publishing/ with:
- PyPI project name:
jinjalume - GitHub owner:
phcodesage - GitHub repository:
jinjalume - Workflow name:
release.yml - GitHub environment:
pypi
After that one-time setup, create a GitHub release or push a tag:
git tag v0.1.0
git push origin v0.1.0
The first successful publish creates the PyPI project at https://pypi.org/project/jinjalume/.
Use in a Flask app
from flask import Flask
from jinjalume import Jinjalume
app = Flask(__name__)
Jinjalume(app)
Then import a component in a Jinja template:
{% from "jinjalume/components/button.html" import button %}
{{ button("Save changes", variant="primary", type="submit") }}
The extension only registers Jinjalume's templates. Your application remains responsible for building and serving its Tailwind CSS file.
Available components
Import the macros you need from jinjalume/components/:
button.html— primary, secondary, and danger actionsbadge.html— compact status labelsalert.html— informational, success, warning, and danger messagescard.html— content containers with a caller blockinput.htmlandtextarea.html— labeled fields with help and error statesavatar.html— image or initials avatarspinner.html— accessible loading indicatormodal.html— native HTML dialog markup for progressive enhancement
All components are plain Jinja macros. They do not require a JavaScript framework, and interactive behavior can be progressively enhanced with native browser APIs, HTMX, or Alpine.js.
Development
make install
make test
make lint
make css
Run the CSS watcher and Flask in separate terminals while developing:
npm run dev:css
flask --app demo.app run --debug
Read CONTRIBUTING.md before opening a pull request.
Roadmap
- WTForms helpers and validation states
- More accessible interactive components using progressive enhancement
- Optional HTMX and Alpine.js integrations
- Theme tokens, dark mode, and RTL examples
- Component documentation site and visual regression tests
License
Jinjalume is available under the MIT License.
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 jinjalume-0.1.0.tar.gz.
File metadata
- Download URL: jinjalume-0.1.0.tar.gz
- Upload date:
- Size: 9.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
353538dd9095d9761587d1ef30199405f6f062003db978b53544c1e1bcbf2528
|
|
| MD5 |
1a77e68ccab3179357beda5e16d63b22
|
|
| BLAKE2b-256 |
cdcab7c67f9173cff57cee64ddd8e172b49fc1cbeb6b484b7f7476b52f7cc074
|
Provenance
The following attestation bundles were made for jinjalume-0.1.0.tar.gz:
Publisher:
release.yml on phcodesage/jinjalume
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
jinjalume-0.1.0.tar.gz -
Subject digest:
353538dd9095d9761587d1ef30199405f6f062003db978b53544c1e1bcbf2528 - Sigstore transparency entry: 2785528443
- Sigstore integration time:
-
Permalink:
phcodesage/jinjalume@ff98050594a0b633421829bfc48a47dea6726529 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/phcodesage
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@ff98050594a0b633421829bfc48a47dea6726529 -
Trigger Event:
push
-
Statement type:
File details
Details for the file jinjalume-0.1.0-py3-none-any.whl.
File metadata
- Download URL: jinjalume-0.1.0-py3-none-any.whl
- Upload date:
- Size: 10.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 |
b770e783e876d257c6eccdae0321c52c34c41e5e73b8c3e14a6a787e5534b250
|
|
| MD5 |
0bc5b7a8a6c92847f12c2421ffbef3c4
|
|
| BLAKE2b-256 |
9dba79cbcc660623ad482c5dc8fd3288fe8d38759c35d9d6a926ae73524d112f
|
Provenance
The following attestation bundles were made for jinjalume-0.1.0-py3-none-any.whl:
Publisher:
release.yml on phcodesage/jinjalume
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
jinjalume-0.1.0-py3-none-any.whl -
Subject digest:
b770e783e876d257c6eccdae0321c52c34c41e5e73b8c3e14a6a787e5534b250 - Sigstore transparency entry: 2785528458
- Sigstore integration time:
-
Permalink:
phcodesage/jinjalume@ff98050594a0b633421829bfc48a47dea6726529 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/phcodesage
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@ff98050594a0b633421829bfc48a47dea6726529 -
Trigger Event:
push
-
Statement type: