Pyweber Framework
Pyweber is a lightweight Python web framework designed to create dynamic, reactive web applications with a simple and intuitive API. It combines the simplicity of Python with the reactivity of modern frontend frameworks.
Key Features
- Reactive Templates: Create dynamic UIs that automatically update when data changes
- Component-Based Architecture: Build reusable components for consistent interfaces
- Integrated Hot Reload: See changes instantly during development
- Intuitive DOM Manipulation: Query and modify elements with familiar selectors
- Event-Driven Programming: Handle user interactions with Python event handlers
- WebSocket Integration: Real-time communication between client and server
- Template Handoff (1.3.0+): WebSocket sessions reuse the HTTP-rendered template — handlers are not executed twice on connect
- Identity-preserving sync (1.6.0+):
self/ subclass element refs stay valid after WS connect - Optional ORM & Redis sessions (1.6.0+):
pyweber[db],pyweber[redis] - Auth & RBAC (1.5+): signed login cookie, roles/permissions
- Minimal Configuration: Get started quickly with sensible defaults
Quick Start
Installation
!!! danger "Avoid ≤ 1.3.1" Older lines are not recommended for production. Use a current release:
pip install -U 'pyweber>=1.6'
See Supported versions (docs) for yank / security notes. pyproject.toml cannot warn when someone pins an old wheel — that requires PyPI yanking.
Create a Project
# Create a new project with configuration
pyweber create-new my_app --with-config
cd my_app
Build a Simple Counter
import pyweber as pw
class Main(pw.Element):
def __init__(self):
super().__init__(tag='div', classes=['counter'])
self.childs = [
pw.Element('h1', content='Pyweber Counter'),
pw.Element(
tag='p',
content='Count:',
childs=[
pw.Element('span', id='count', content=0)
]
),
pw.Element(
'button',
id='increment',
content='Increment',
events=pw.TemplateEvents(onclick=self.increment)
)
]
async def increment(self, e: pw.EventHandler):
self.count = e.template.querySelector("#count")
current = int(self.count.content)
self.count.content = str(current + 1)
self.create_element()
e.update()
def create_element(self):
self.count.parent.parent.add_child(
pw.Element(
tag='p',
content=self.count.content
)
)
class Counter(pw.Template):
def __init__(self):
super().__init__(template='', title='Hello pyweber')
self.body.childs = [Main()]
app = pw.Pyweber()
@app.route('/')
def home():
return Counter()
if __name__ == "__main__":
pw.run(route='/')
Run your application:
pyweber run --reload
Core Components
Pyweber
The main application class that handles routing, middleware, and template management:
app = pw.Pyweber()
@app.route('/')
def home():
return HomePage()
@app.route('/users/{user_id}')
def user_profile(user_id: int):
return UserProfile(user_id=user_id)
Template
Templates represent pages or components with HTML structure and Python logic:
class HomePage(pw.Template):
def __init__(self, app: pw.Pyweber):
super().__init__(template="index.html")
self.title = self.querySelector("h1")
self.title.content = "Welcome to PyWeber!"
Element
Elements represent DOM nodes that you can manipulate:
# Create elements
button = pw.Element(tag="button", content="Click me", id="my-button")
# Modify properties
button.content = "Clicked!"
button.attrs["disabled"] = "true"
button.style["color"] = "red"
button.add_class("active")
Events
Handle user interactions with Python functions:
# Define event handlers
async def handle_click(e: pw.EventHandler):
e.element.content = "Processing..."
e.update()
await process_data()
e.element.content = "Done!"
e.update()
# Attach events
button.events.onclick = handle_click
Window
Interact with the browser window:
# Access window properties
width = template.window.inner_width
scroll_pos = template.window.scroll_y
# Register window events
template.window.events.onresize = handle_resize
template.window.events.onscroll = handle_scroll
Comparison with Other Frameworks
| Feature | PyWeber | Flask | Django | React |
|---|---|---|---|---|
| Learning Curve | Low | Low | High | High |
| Reactivity | Built-in | Manual | Manual | Built-in |
| DOM Manipulation | Python API | JavaScript | JavaScript | JSX |
| Hot Reload | Built-in | Add-on | Add-on | Built-in |
| Template Language | Python + HTML | Jinja2 | DTL | JSX |
| Server-Side | Yes | Yes | Yes | No (by default) |
| Configuration | Simple TOML | Environment vars | settings.py | package.json |
| CLI Tools | Comprehensive | Limited | Extensive | Extensive |
Configuration
PyWeber provides a flexible configuration system:
# Access configuration
from pyweber.config.config import config
# Get values
port = config.get("server", "port")
debug = config.get("app", "debug")
# Set values
config.set("server", "port", 9000)
Create or edit configuration files:
# Create config file
pyweber create-config-file
# Edit interactively
pyweber --edit
CLI Tools
PyWeber includes a powerful CLI:
# Create projects
pyweber create-new my_project
# Run applications
pyweber run --reload
# Manage configuration
pyweber add-section --section-name database
# Update framework
pyweber --update
Visit Pyweber Docs for complete documentation. See CHANGELOG.md for release notes (latest: 1.6.0 — optional ORM/Redis, identity-preserving WS sync, reactive event fixes).
License
Copyright 2026 Pyweber Technology. Licensed under the Apache License, Version 2.0.
Release files for pyweber 1.6.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pyweber-1.6.0.tar.gz | 570.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pyweber-1.6.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 1.2 MB
Release files / pyweber-1.6.0.tar.gz
| Download URL | pyweber-1.6.0.tar.gz |
|---|---|
| Size | 570.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
51da868396606931df9736faa2fc5d42f3edc91eb8d3bf262598b49931d0a563
|
|
BLAKE2b-256 checksum How to use checksums |
6880de0d7986b087892ff967064e1a48443653e5f605129c926f53f58dac1e22
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.6
|
Release files / pyweber-1.6.0-py3-none-any.whl
| Download URL | pyweber-1.6.0-py3-none-any.whl |
|---|---|
| Size | 589.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
535d74084179da09806263308229976fe3e6bd125b92159134dd2e5900322e4e
|
|
BLAKE2b-256 checksum How to use checksums |
20cbbf0559ce7422345ae12098141b7176ec843f6d157e78a9de54d31e19060e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.6
|