Skip to main content

Pure Python Full-Stack Framework: No JavaScript, no HTML mess, just Zen Mode.

Project description

๐Ÿš€ 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

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

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.

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