Jsweb
A lightweight and modern Python web framework designed for speed, simplicity, and a great developer experience.
Install / Use
/learn @Jsweb-Tech/JswebREADME
🏆 Contributors
<a href="https://github.com/jones-peter/jsweb/graphs/contributors"> <img src="https://contrib.rocks/image?repo=Jsweb-Tech/jsweb" alt="Contributors" /> </a>About JsWeb
JsWeb is a modern, high-performance Python web framework built from the ground up on the ASGI standard. It's designed for developers who want the speed of asynchronous programming with the simplicity of a classic framework. With built-in, zero-configuration AJAX and a focus on developer experience, JsWeb makes it easy to build fast, dynamic web applications without writing a single line of JavaScript.
Why Choose JsWeb?
- ⚡ Lightning Fast - ASGI-based async framework handles thousands of concurrent connections
- 🎯 Developer Experience - Simple, intuitive API inspired by Flask with modern features
- 🚀 Full-Stack Ready - Everything you need: routing, forms, templates, database, admin panel
- 🔄 Zero-Config AJAX - Automatic SPA-like experience without JavaScript
- 🛡️ Security First - CSRF protection, secure sessions, password hashing built-in
- 📦 Production Ready - Auto-generated admin panel, API docs, and more
✨ Core Features
- 🚀 Blazing-Fast ASGI Core - Built for speed and concurrency, compatible with servers like Uvicorn
- 🔄 Zero-Config AJAX - Forms and navigation automatically handled for a smooth SPA feel
- 🛣️ Elegant Routing - Simple decorator-based route definition
- 🎨 Jinja2 Templating - Powerful templating engine with inheritance and macros
- 🛡️ Built-in Security - CSRF protection, password hashing, and secure session management
- 📝 Full-Featured Forms - Form validation, file uploads, and field types
- 🗄️ SQLAlchemy Integration - ORM with Alembic migrations included
- ⚙️ Automatic Admin Panel - Production-ready data management interface generated automatically
- 🧩 Modular Blueprints - Organize code into clean, reusable components
- 🛠️ Powerful CLI - Create projects, run server, and manage database from command line
- 📚 Auto API Documentation - OpenAPI 3.0.3 docs at
/docs,/redoc, and/openapi.json - 🔐 Hybrid DTO System - Uses Pydantic v2 internally with clean JsWeb API
🚀 Quick Start (30 seconds)
1. Install JsWeb
pip install jsweb
2. Create a Project
jsweb new my_project
cd my_project
3. Run the Server
jsweb run --reload
Visit http://127.0.0.1:8000 and your app is live! 🎉
📝 Basic Example
Here's a simple but complete JsWeb application:
views.py - Define your routes
from jsweb import Blueprint, render
views_bp = Blueprint('views')
@views_bp.route("/")
async def home(req):
return render(req, "welcome.html", {"name": "World"})
@views_bp.route("/api/status")
async def status(req):
return {"status": "online", "message": "Hello from JsWeb!"}
app.py - Wire it all together
from jsweb import JsWebApp
from views import views_bp
import config
app = JsWebApp(config=config)
app.register_blueprint(views_bp)
# Run with: jsweb run --reload
That's all you need for a working application!
📖 Installation & Setup
Get up and running in under a minute.
Prerequisites
- Python 3.8+ (Python 3.10+ recommended)
- pip (Python package manager)
- A text editor or IDE
Step 1: Create Virtual Environment
# Create and activate virtual environment
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
Step 2: Install JsWeb
pip install jsweb
Step 3: Create New Project
jsweb new my_awesome_app
cd my_awesome_app
Step 4: Setup Database (Optional)
jsweb db prepare -m "Initial migration"
jsweb db upgrade
Step 5: Run Development Server
jsweb run --reload
Visit http://127.0.0.1:8000 - your app is running! 🎉
🛠️ Command-Line Interface (CLI)
JsWeb includes powerful CLI tools to streamline development:
jsweb run - Start Server
jsweb run --reload # Auto-reload on changes
jsweb run --host 0.0.0.0 # Accessible from network
jsweb run --port 5000 # Custom port
jsweb run --reload --qr # QR code for mobile access
jsweb new - Create Project
jsweb new my_project # Create new project with boilerplate
cd my_project
jsweb db - Database Management
jsweb db prepare -m "Message" # Generate migration
jsweb db upgrade # Apply migrations
jsweb db downgrade # Revert last migration
jsweb create-admin - Admin User
jsweb create-admin # Interactive admin user creation
📚 Documentation
Complete documentation available at https://jsweb-framework.site
Core Guides
- Getting Started - Installation and setup
- Routing - URL mapping and HTTP methods
- Templating - Jinja2 templates and filters
- Database - Models, queries, and migrations
- Forms - Form handling and validation
- Blueprints - Modular application structure
- Admin Panel - Data management interface
- Configuration - App settings
- CLI Reference - Command-line tools
- OpenAPI Guide - API documentation
🌟 Key Concepts
Blueprints - Modular Organization
Organize your application into logical modules:
from jsweb import Blueprint
# Create a blueprint
auth_bp = Blueprint('auth', url_prefix='/auth')
@auth_bp.route('/login', methods=['GET', 'POST'])
async def login(req):
return render(req, 'login.html')
@auth_bp.route('/logout')
async def logout(req):
return redirect('/')
# Register in app.py
app.register_blueprint(auth_bp)
Forms with Validation
Built-in form handling with validation:
from jsweb.forms import Form, StringField
from jsweb.validators import DataRequired, Email
class LoginForm(Form):
email = StringField("Email", validators=[DataRequired(), Email()])
password = StringField("Password", validators=[DataRequired()])
@app.route("/login", methods=["GET", "POST"])
async def login(req):
form = LoginForm(await req.form())
if form.validate():
# Handle login
pass
return render(req, "login.html", {"form": form})
Database Models
Define models with SQLAlchemy:
from jsweb.database import ModelBase, Column, Integer, String
class User(ModelBase):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
username = Column(String(80), unique=True, nullable=False)
email = Column(String(120), unique=True, nullable=False)
# Query the database
user = User.query.get(1)
users = User.query.all()
new_user = User.create(username="john", email="john@example.com")
Admin Panel
Auto-generated admin interface:
from jsweb.admin import Admin
admin = Admin(app)
admin.register(User)
admin.register(Post)
admin.register(Category)
# Access at http://localhost:8000/admin
🤝 Community & Support
- 📖 Documentation - jsweb-framework.site
- 💬 Discord - Join community
- 🐛 Issues - Report bugs
- 💡 Questions & Discussions - Discord Community
- 🔗 GitHub - Jsweb-Tech/jsweb
👥 Contributing
We welcome contributions from the community! Whether you want to fix a bug, add a feature, or improve documentation:
- Fork the repository
- Create a feature branch
- Make your changes
- Test thoroughly
- Submit a pull request
See Contributing Guide for details.
📊 Project Status
Related Skills
gh-issues
349.7kFetch GitHub issues, spawn sub-agents to implement fixes and open PRs, then monitor and address PR review comments. Usage: /gh-issues [owner/repo] [--label bug] [--limit 5] [--milestone v1.0] [--assignee @me] [--fork user/repo] [--watch] [--interval 5] [--reviews-only] [--cron] [--dry-run] [--model glm-5] [--notify-channel -1002381931352]
oracle
349.7kBest practices for using the oracle CLI (prompt + file bundling, engines, sessions, and file attachment patterns).
taskflow-inbox-triage
349.7kname: taskflow-inbox-triage description: Example TaskFlow authoring pattern for inbox triage. Use when messages need different treatment based on intent, with some routes notifying immediately, some w
taskflow
349.7kname: taskflow description: Use when work should span one or more detached tasks but still behave like one job with a single owner context. TaskFlow is the durable flow substrate under authoring layer
