Skip to content

A lightweight and modern Python web framework designed for speed, simplicity, and a great developer experience.

License

Notifications You must be signed in to change notification settings

Jsweb-Tech/jsweb

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

JsWeb Logo

The Blazing-Fast ASGI Lightweight Python Web Framework

Build full-stack web apps and APIs with JsWeb. Pure Python, pure speed.

PyPI version License Downloads

Discord Documentation Sponsor GitHub PayPal Sponsor


πŸ† Contributors

Contributors

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


🌟 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="[email protected]")

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


πŸ‘₯ Contributing

We welcome contributions from the community! Whether you want to fix a bug, add a feature, or improve documentation:

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Test thoroughly
  5. Submit a pull request

See Contributing Guide for details.


πŸ“Š Project Status

  • Status: Active Development
  • Python: 3.8+
  • License: MIT
  • Latest Version: Check PyPI

πŸ“„ License

This project is licensed under the MIT License - see LICENSE file for details.


Made and Maintained by the JsWeb team
Join our Discord community β€’ Sponsor us

About

A lightweight and modern Python web framework designed for speed, simplicity, and a great developer experience.

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Sponsor this project

 

Packages

No packages published

Contributors 5