Skip to main content

A minimalist web front-end framework composed of HTMX and Python.

Project description

Xue

English | Chinese

Xue (show, [ˈʃəʊ]) is a minimalist front-end web framework for quickly building simple web applications. This project is inspired by FastHTML. FastHTML is very useful, but when I was building my blog application, I found that I couldn't solve some bugs related to markdown rendering. Therefore, I decided to write a minimalist web framework myself. I don't like using other people's frameworks because if I encounter problems, I won't know how to solve them. If you, like me, use Python as your development language, I think Xue is suitable for you to quickly develop web applications.

Install

pip install xue

Use

You can use xue to build a simple todo list web application with only 50 lines of code, as follows:

import uuid
from xue import *
from pydantic import BaseModel
from fastapi.responses import HTMLResponse
from fastapi import FastAPI, Form as fastapiForm, HTTPException

app = FastAPI()

# Simulated database
todos = []

class Todo(BaseModel):
    id: str
    content: str

@app.get("/", response_class=HTMLResponse)
async def read_root():
    result = HTML(
        Head(
            Title("HTMX Todo App"),
        ),
        Body(
            H1("HTMX Todo App"),
            Form(
                Input(type="text", name="content", placeholder="Enter a new todo", required="required"),
                Button("Add Todo", type="submit"),
                hx_post="/todos",
                hx_target="#todo-list",
                hx_swap="beforeend"
            ),
            Ul(id="todo-list")
        )
    ).render()

    return result

@app.post("/todos", response_class=HTMLResponse)
async def create_todo(content: str = fastapiForm(...)):
    todo = Todo(id=str(uuid.uuid4()), content=content)
    todos.append(todo)
    return Li(
        todo.content,
        Button("Delete", hx_delete=f"/todos/{todo.id}", hx_target=f"#todo-{todo.id}", hx_swap="outerHTML"),
        id=f"todo-{todo.id}"
    ).render()

@app.delete("/todos/{todo_id}", response_class=HTMLResponse)
async def delete_todo(todo_id: str):
    for todo in todos:
        if todo.id == todo_id:
            todos.remove(todo)
            return ""
    raise HTTPException(status_code=404, detail="Todo not found")

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8000)

Component

Xue provides some simple components that you can use to build your web applications.

The components currently written are: button, checkbox, dropdown, form, input, select. Styling is done using tailwindcss. It mimics the shadcn/ui component library, including smooth dynamic effects, elegant, simple, and aesthetically pleasing interfaces, smooth animations, and responsive interactions.

LLM friendly

Since this is a new framework, if asked, the current LLM will not provide effective suggestions, so I have written a script to automatically generate LLM-friendly documentation. You can use the following command to generate LLM-friendly documentation:

python llm_context.py

The script will automatically save the document in the llm_context.txt file. You can directly copy it to LLM for effective advice.

Tailwind CSS

The JIT (Just-In-Time) mode of Tailwind CSS, here are the implementation steps:

  1. Install necessary dependencies:
npm init -y
npm install tailwindcss@latest postcss@latest autoprefixer@latest
  1. Create Tailwind CSS configuration file:
npx tailwindcss init -p

This will create the tailwind.config.js and postcss.config.js files.

  1. Modify tailwind.config.js:
module.exports = {
  mode: 'jit',
  purge: [
    './templates/**/*.html',
    './static/**/*.js',
    './your_python_file.py',  // File containing your Python code
  ],
  darkMode: false,
  theme: {
    extend: {},
  },
  variants: {
    extend: {},
  },
  plugins: [],
}
  1. Create an input.css file:
@tailwind base;
@tailwind components;
@tailwind utilities;
  1. Add an npm script to package.json:
"scripts": {
  "build-css": "tailwindcss -i ./input.css -o ./static/styles.css --watch"
}
  1. Run build script:
npm run build-css

This will start a monitoring process that regenerates the CSS whenever your Python file changes.

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

xue-0.0.11.tar.gz (36.5 kB view details)

Uploaded Source

Built Distribution

xue-0.0.11-py3-none-any.whl (41.4 kB view details)

Uploaded Python 3

File details

Details for the file xue-0.0.11.tar.gz.

File metadata

  • Download URL: xue-0.0.11.tar.gz
  • Upload date:
  • Size: 36.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for xue-0.0.11.tar.gz
Algorithm Hash digest
SHA256 a8f1801e74b25b10a5a17302797cc9851e16fbb7e5c457dfbd356b251845bb9c
MD5 5874b794053e679d6dc9bbac3982632f
BLAKE2b-256 1b4d3d14d06b6b0e3e5b0c63e38db6252ff1d561fea5e98e00b38d5d6bae2f76

See more details on using hashes here.

File details

Details for the file xue-0.0.11-py3-none-any.whl.

File metadata

  • Download URL: xue-0.0.11-py3-none-any.whl
  • Upload date:
  • Size: 41.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for xue-0.0.11-py3-none-any.whl
Algorithm Hash digest
SHA256 21be4c9133e074f14815fb65769cc7aa97178441fd83aa7887746dcd3f887ba0
MD5 b04445118264c8aeb760a844064f2a1c
BLAKE2b-256 2a67bd9c6e69f4395d55263a5a84c8bc8f3b18875842055ab37c351e2f107ece

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page