Skip to main content

A declarative, type-safe ,Python-Native template Rendering Framework and Meta-framework for Django.

Project description

Buy Me a Coffee at ko-fi.com

MUI Logo

🐘 Mastodon UI (mui)

A Python-Native Template Rendering Framework and Meta-framework for Django. Write Type-Safe HTML, CSS, and Logic in pure Python. No context switching. No template spaghetti.

📣 Version 1.0.0 is Live!

MUI has officially reached stable v1 status. It is a backend-first framework that transforms Python objects into performant HTML/CSS, creating a seamless bridge between Django's backend logic and the frontend interface.

📚 Read the Full Sample Documentation (v1.0)

Click the link above for deep dives into : view sample documentation

The Component Architecture: Brain (State) / Body (Elements) / Skin (Style).

Shortcuts for building complex UIs.

Mastodon Forms: Automatic Django Form rendering.

JIT Styling: How the CSS engine works.

⚡ Purpose & Philosophy

Traditional Django development often requires context-switching between Python (views.py) and HTML/Jinja (templates/). Logic gets split, and typos in templates cause runtime errors.

MUI solves this by bringing the Frontend into Python:

🧠 Type-Safe UI: Write HTML in Python. If your code compiles, your HTML is valid.

🎨 Just-In-Time (JIT) CSS: Styles live with components. MUI scans your active components and generates a minified CSS bundle on the fly. No unused styles.

🛡️ Logic Gates: Built-in State Management. Components automatically hide themselves if required data (like user.is_authenticated) or permissions are missing.

🔌 Django Native: Deep integration with Django Forms and Requests via the RDT (Request Data Transformer).

📦 Installation

pip install mastodon-ui 

🚀 Quick Example

Here is how you build a reusable, styled component using the Flow API:

def user_card(username):
    # 1. Define Logic (The Brain)
    # "Look for 'name' in dynamic data. If missing, don't render."
    user_id = 'User_789xyz1323'
    user_info = {'practical-info':['python','javascript','docker','django']}
    li_el = ElementState('li', d_state='practical-info',i_state=True, strict_dynamic=True,)
    user_comp_state = ComponentState(
        s_data={},
        d_data=user_info,
        li_el,
    )
    # 2. Build Component (Structure + Style + Data)
    card = Component(
        name="UserCard",
        template=f"<div class='card'>{h1(username,strong(user_id))+ul(li_el.placeholder)}</div>",
        # Inject Data
        state=user_comp_state,
    )

    return card

# Render it
html= user_card("Admin").render()
print(html)
# Output: 
# <div class='card'><h1>Admin<strong>User_789xyz1323</strong></h1><ul><li>python</li><li>javascript</li><li>docker</li><li>django</li></ul></div>

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

mastodon_ui-1.0.3.tar.gz (486.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mastodon_ui-1.0.3-py3-none-any.whl (133.3 kB view details)

Uploaded Python 3

File details

Details for the file mastodon_ui-1.0.3.tar.gz.

File metadata

  • Download URL: mastodon_ui-1.0.3.tar.gz
  • Upload date:
  • Size: 486.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.0

File hashes

Hashes for mastodon_ui-1.0.3.tar.gz
Algorithm Hash digest
SHA256 912983fc213bbce90518d7392062b61838130cb7db93e8dcbce7e3b5ebf817f6
MD5 78a6dfd83485ba6f58e3e38cff5b78dc
BLAKE2b-256 02aaf57bff8a15633763a0b194a8a7e2b35e2f4483b2d294c4c4e2a00d61c0fd

See more details on using hashes here.

File details

Details for the file mastodon_ui-1.0.3-py3-none-any.whl.

File metadata

  • Download URL: mastodon_ui-1.0.3-py3-none-any.whl
  • Upload date:
  • Size: 133.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.0

File hashes

Hashes for mastodon_ui-1.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 749727efd0b22356a970d76deedd39a220ef5296fecc918aefebee05e6a7a262
MD5 393739b8d38ed1057408d637342f73ba
BLAKE2b-256 fb41646dddb9f51110e31789baa53aa64bf1d5fd2957379e71d24dd0881ec1e8

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