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.7.0 — ${VAR} in config.toml, textarea content, Alembic logs).
License
Copyright 2026 Pyweber Technology. Licensed under the Apache License, Version 2.0.
Release files for pyweber 1.7.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.7.0.tar.gz | 578.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pyweber-1.7.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 1.2 MB
Release files / pyweber-1.7.0.tar.gz
| Download URL | pyweber-1.7.0.tar.gz |
|---|---|
| Size | 578.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ff1128492e2a614ec88e2c352cb9fab36e76335c9adfacd42a8fd9f8905f76c0
|
|
BLAKE2b-256 checksum How to use checksums |
323eabab118f3b41d7985c37329e719e9d4437fa28ab41a614b3f45e8a569802
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.7
|
Release files / pyweber-1.7.0-py3-none-any.whl
| Download URL | pyweber-1.7.0-py3-none-any.whl |
|---|---|
| Size | 593.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
34167986b3012bff73b5da35f63da8b2772fc7164fb1551d3eba3e404a9ea9f8
|
|
BLAKE2b-256 checksum How to use checksums |
3b38bdcf3d1ed7cd3fe4ebc6d7e73d1fe7cef5951fee404dd910aa9b2f4742fd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.7
|