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.1.tar.gz (493.6 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.1-py3-none-any.whl (145.9 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: mastodon_ui-1.0.1.tar.gz
  • Upload date:
  • Size: 493.6 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.1.tar.gz
Algorithm Hash digest
SHA256 bd955f1711f66fb6d7cabbd52a3a55558e758aae19c3b784a0a94694bc6da4a5
MD5 bfc02f82e84bc749ff011986d91f409f
BLAKE2b-256 10acfdab90894e972cf6eb8d2d021b32352cca05135b3797b258fc2ecf2f1be5

See more details on using hashes here.

File details

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

File metadata

  • Download URL: mastodon_ui-1.0.1-py3-none-any.whl
  • Upload date:
  • Size: 145.9 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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 349a2b3fec99b18f3814876388377ede28a409bfeea3dbf868b2396fb59b51b8
MD5 c99b05cb4b14be57125a4a9f162225e0
BLAKE2b-256 96a3b24e40a91b627c25a26920eab8d66f5227758faa3605cf26a0938cbc5dd9

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