Skip to main content

🚀 PyX Framework

"No JavaScript, no HTML mess, just Zen Mode"
The Pure Python Full-Stack Web Framework

PyX adalah framework full-stack yang memungkinkan Anda membangun aplikasi web 100% dengan Python - tanpa JavaScript, tanpa HTML templates, tanpa context switching.


✨ Features

Category Features
🐍 100% Python UI, Backend, Database - semua Python
⚡ High Performance Granian server (Rust-powered)
🧘 Zen Mode Semua via ui.*, db.* namespace
🎨 100+ Components Premium UI components
📡 Real-time WebSocket Rooms & Presence
🗄️ Database ORM Relationships, Migrations, N+1 solution
🔐 Auth Built-in Login, Register, Roles, Security Headers
🤖 AI Ready Built-in OpenAI/Claude/Gemini integration
☁️ Cloud Native Unified Storage (S3/GCS/Local)
🔋 Batteries Email, Jobs, i18n, PWA, SEO, OpenAPI

📦 Installation

# From PyPI
pip install usepyx

# From source
pip install git+https://github.com/sukirman1901/usePyX.git

# For development
git clone https://github.com/sukirman1901/usePyX.git
cd usePyX
pip install -e .

🚀 Quick Start

# Create project
pyx init myapp
cd myapp

# Run
pyx run

Open http://localhost:8000 🎉


🧘 Zen Mode

Satu import untuk semuanya:

from pyx import ui, State, var, redirect, Model, Field

# ⚡ State Management
class CounterState(State):
    count: int = 0
    
    @var  # Computed var - auto-recalculates!
    def double(self) -> int:
        return self.count * 2
    
    def increment(self):
        self.count += 1
    
    def reset(self):
        self.count = 0
        return redirect("/")  # Server-driven navigation!

# 🎨 UI with State binding
def counter_page():
    return ui.div(
        ui.h1(f"Count: {CounterState.count}"),
        ui.p(f"Double: {CounterState.double}"),
        ui.button("Add").on_click(CounterState.increment),
        ui.button("Reset").on_click(CounterState.reset),
    ).p(8)

# 🗄️ Database
class User(Model, table=True):
    id: int = Field(primary_key=True)
    name: str
    email: str = Field(unique=True)

🎨 UI Components

Zen Mode Styling

# Pythonic styling (tidak perlu Tailwind strings)
ui.div("Hello").style(
    bg="blue-500",
    color="white",
    p=4,
    rounded="xl",
    shadow="lg"
)

# Presets
ui.button("Submit").apply(ui.preset("button_primary"))

100+ Components

# Navigation
ui.navbar(brand=..., items=[...])
ui.sidebar(items=[...])
ui.breadcrumb([...])

# Layout
ui.container(...)
ui.hero(title="...", subtitle="...")
ui.section(title="...", children=...)
ui.footer(...)

# Interaction
ui.modal(trigger=..., content=...)
ui.tabs([...])
ui.accordion([...])

# Data
ui.datagrid(data)
ui.chart(data, type="line")

# Forms
ui.input(placeholder="...")
ui.select(options=[...])
ui.file_upload(accept="image/*")

🗄️ Database ORM

Relationships

from pyx import db
from typing import List, Optional

class User(db.Model, table=True):
    id: Optional[int] = db.Column(primary_key=True)
    name: str
    posts: List["Post"] = db.Relationship(back_populates="author")

class Post(db.Model, table=True):
    id: Optional[int] = db.Column(primary_key=True)
    title: str
    author_id: int = db.Column(foreign_key="user.id")
    author: User = db.Relationship(back_populates="posts")

db.init()

Queries

# CRUD
user = User(name="John")
db.save(user)
db.delete(user)

# Find
users = db.find_all(User)
user = db.get(User, 1)
user = db.filter(User, active=True)

# Eager loading (N+1 solution)
users = db.with_relations(User, "posts")

# Query builder
users = (
    db.query(User)
    .where(active=True)
    .order_by("name")
    .limit(10)
    .all()
)

Migrations

pyx generate migration add_users_table
pyx migrate up
pyx migrate down

🔐 Authentication

from pyx.contrib.auth import User, AuthState

# User model with password hashing
user = User(email="admin@pyx.dev", username="admin")
user.set_password("secret123")

# Verify password
if user.check_password("secret123"):
    print("Login successful!")

# AuthState for login/logout flow
class MyAuth(AuthState):
    def login(self):
        # Built-in validation & redirect
        return super().login()

# UI with auth binding
ui.input(placeholder="Email").on_change(MyAuth.set_email)
ui.input(type="password").on_change(MyAuth.set_password)
ui.button("Login").on_click(MyAuth.login)

🛡️ Enterprise Security

PyX is "Secure by Default" with built-in protection against common vulnerabilities.

Feature Description
🔐 Bcrypt Hashing Auto-salted password hashing
🚦 Rate Limiting IP-based request throttling
🛡️ CSRF & XSS Built-in protection & sanitization
🔒 Security Headers OWASP-recommended headers (HSTS, CSP)
🚫 Brute-force Account lockout mechanism
💉 SQL Injection Prevented via parameterized queries

🛠️ CLI Commands

Project Management

pyx init myapp          # Create new project
pyx run                  # Run development server
pyx build                # Build for production (SSG)
pyx test                 # Run tests

Database Commands (NEW!)

pyx db init              # Initialize Alembic migrations
pyx db makemigrations    # Generate migration from model changes
pyx db migrate           # Apply pending migrations
pyx db rollback          # Rollback last migration
pyx db history           # Show migration history
pyx db current           # Show current revision

Code Generators

# Generate model
pyx g model User name:str email:str

# Generate page
pyx g page dashboard

# Generate component
pyx g component UserCard

# Generate API (with CRUD)
pyx g api users --crud

# Generate test
pyx g test users

# Generate migration
pyx g migration add_posts_table

📡 Real-time

from pyx import event

@event("message")
def on_message(data, client):
    broadcast({
        "type": "new_message",
        "text": data["text"]
    })

🔧 Zen Mode Namespaces

# NEW! State Management
from pyx import State, var, redirect, alert, toast

class AppState(State):
    count: int = 0
    
    @var
    def doubled(self) -> int:
        return self.count * 2
    
    def increment(self):
        self.count += 1
        return toast("Incremented!", "success")

# NEW! Background Tasks
from pyx import background, delayed, periodic

@background
async def send_email(user_id):
    # Runs without blocking UI
    await email.send(...)

@periodic(60)
def check_notifications():
    # Runs every 60 seconds
    ...

# Database (NEW API)
from pyx import Model, Field, session, Query, select

class User(Model, table=True):
    id: int = Field(primary_key=True)
    email: str = Field(unique=True)

with session() as db:
    users = db.exec(select(User)).all()

# Session Management
from pyx import Session
session = Session()
session['user_id'] = 123
session.save()

# Auth Module
from pyx.contrib.auth import User, AuthState

# UI (Frontend)
from pyx import ui
ui.button("Click").on_click(AppState.increment)
ui.input().on_change(AppState.set_count)  # Auto-setter!

# Cloud Storage
from pyx import storage
url = storage.upload(file, folder="uploads")

# WebSocket Rooms
ws.join("chat:1", client)
ws.broadcast("chat:1", {"msg": "Hello"})
users = ws.presence("chat:1")

# AI Integration
response = await ai.chat("Summarize this", system="You are helpful")
embedding = await ai.embed("Search query")

# API Docs
docs.configure(app, title="My API", version="2.0")

🚀 Enterprise Features

1. SPA Navigation (Turbo Drive)

PyX automatically handles navigation like a Single Page Application (SPA), updating only the content that changes without full page reloads.

# Automatic SPA Link
ui.link_button("Go to Dashboard", "/dashboard")

# Manual Client-Side Navigation
ui.button("Home").on_click(JS.navigate("/"))

2. Client-Side Interactions (Zero Latency)

Use JS helpers for instant UI updates without server roundtrips.

from pyx.client import JS

# Toggle Class
ui.button("Menu").on_click(JS.toggle_class("#sidebar", "hidden"))

# Copy to Clipboard
ui.button("Share").on_click(
    JS.copy_to_clipboard("https://myapp.com").then_toast("Link copied!")
)

3. SEO Suite

Strictly typed SEO metadata generator.

from pyx.seo import Metadata, JSONLD

def product_meta(params):
    return Metadata(
        title=f"Product {params.get('id')}",
        json_ld=JSONLD.product(name="iPhone", price="999")
    )

app.add_page("/product/{id}", render_page, metadata=product_meta)

📁 Project Structure

myapp/
├── main.py              # Entry point
├── pages/               # File-based routing
│   ├── index.py         # → /
│   ├── about.py         # → /about
│   └── blog/
│       └── [slug].py    # → /blog/:slug
├── models/              # Database models
├── components/          # Reusable UI
├── api/                 # API endpoints
├── tests/               # Tests
└── migrations/          # Database migrations

🆚 Comparison

Feature Flask/Django Next.js PyX
Backend Python
Frontend Python
UI Components
Database ORM
Auth Built-in
Real-time ⚠️
Single Language

📚 Documentation

File Description
SYNTAX_GUIDE.md UI syntax reference
SYNTAX_GUIDE.md UI syntax reference

🔮 Roadmap

  • Core UI Engine (Zen Mode)
  • 100+ UI Components
  • Pythonic Styling
  • Database ORM with Relationships
  • Migrations CLI (pyx db *)
  • Authentication Module
  • CLI Generators
  • Testing Framework
  • Logging
  • Caching
  • i18n / PWA / SEO
  • Cloud Storage (S3/GCS)
  • WebSocket Rooms & Presence
  • AI/LLM Integration
  • OpenAPI/Swagger Docs
  • State Management ✨ NEW
  • Computed Vars (@var decorator) ✨ NEW
  • Session Persistence ✨ NEW
  • Background Tasks ✨ NEW
  • Docker Deployment
  • Cloud Templates (Vercel, Railway)

💡 Philosophy

"Write less, do more. Python only."

PyX mengikuti filosofi bahwa developer productivity lebih penting dari ceremonial code. Semua bisa diakses via namespace sederhana - tidak perlu banyak import, tidak perlu context switching.


🤝 Contributing

git clone https://github.com/sukirman1901/usePyX.git
cd usePyX
pip install -e .
pyx test

Built with ❤️ by PyX Team

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

usepyx-0.1.2.tar.gz (198.9 kB view details)

Uploaded Source

Built Distribution

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

usepyx-0.1.2-py3-none-any.whl (219.6 kB view details)

Uploaded Python 3

File details

Details for the file usepyx-0.1.2.tar.gz.

File metadata

  • Download URL: usepyx-0.1.2.tar.gz
  • Upload date:
  • Size: 198.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.6

File hashes

Hashes for usepyx-0.1.2.tar.gz
Algorithm Hash digest
SHA256 6301abc64d003ff4e8060a523be11c7c82b86ec5e6f047b7316418812980c9bf
MD5 4e0e8974fafe288dec472ddf6a45ac43
BLAKE2b-256 057fece23049e5183ca8b893d30471a0a4123dc94c9a2787187c1366e42e2af8

See more details on using hashes here.

File details

Details for the file usepyx-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: usepyx-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 219.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.6

File hashes

Hashes for usepyx-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 1e35fa2a6600b89556c32595e49fb8ba84eee5fb39a224cc287762b5f5d12e42
MD5 77c617445aa756ce7abc8816199693be
BLAKE2b-256 b87b0bb4fdf63c987cc763435ebf5c93c580fab1d54441fd27cd60d4cfd8a007

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.1.2 This release

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page