A minimalist, zero-dependency Python web framework.
Project description
Asok is a powerful and elegant "zero-dependency" Python web framework that brings modern development patterns to Python. Built with security-first principles, it combines the simplicity of Flask with the batteries-included approach of Django, while introducing Next.js-style file-based routing.
๐ Official Website & Documentation | ๐ Quick Start Guide | ๐ฌ Join Discord | ๐ฅ YouTube Tutorials
๐ฏ Why Asok?
Zero Dependencies, Maximum Power
Unlike other Python frameworks, Asok requires zero external dependencies - just Python 3.10+. No Werkzeug, no Jinja2, no SQLAlchemy. Everything is built from the Python standard library, making it:
- โ Extremely lightweight (~200KB)
- โ Dead simple to audit (security teams love it)
- โ Forever stable (no dependency hell)
- โ Fast to install (< 1 second)
Modern Developer Experience
# File-based routing like Next.js
src/pages/blog/[slug]/page.py โ /blog/hello-world
# Reactive components out of the box
<div asok-state="{ count: 0 }">
<button asok-on:click="count++">{{ count }}</button>
</div>
# Admin interface in 2 lines
admin = Admin(app)
Production-Ready Security
- ๐ OWASP Top 10 protections built-in
- ๐ Automatic CSRF tokens with rotation
- ๐ SQL injection prevention via parameterized queries
- ๐ XSS protection with auto-escaping templates
- ๐ Secure sessions (HttpOnly, SameSite=Strict, HMAC-signed)
- ๐ 10/10 security score in comprehensive audits
โจ Key Features
Core Framework
- ๐ Zero Dependencies - Pure Python stdlib, no external packages
- ๐ Full Type Hints - Complete PEP 484 support for IDE autocomplete
- ๐ฆ Tiny Footprint - ~200KB, installs in < 1 second
- โจ๏ธ Powerful CLI - Scaffolding, migrations, dev server, production builds
- ๐ฃ๏ธ File-based Routing - Next.js-style routing (
src/pages/โ URLs) - โ๏ธ Dynamic Routes - Parameters via
[id],[slug:slug]patterns
Database & ORM
- ๐๏ธ Built-in ORM - SQLite with relations, migrations, soft deletes
- ๐ Full-Text Search - FTS5 integration for lightning-fast search
- ๐ Auto Password Hashing - PBKDF2-SHA256 with 100k iterations
- ๐ Query Builder - Fluent API with eager loading
Templates & Frontend
- ๐จ Template Engine - Jinja-compatible with inheritance and macros
- โก Reactive Components - Client-side reactivity (< 3KB, no build step)
- ๐ Live Components - Server-driven real-time updates via WebSockets
- ๐จ HTML Streaming - Chunked responses for instant TTFB
- ๐ญ Transitions - Built-in fade/slide/scale animations
Security (10/10 Score)
- ๐ CSRF Protection - Auto-rotation, HMAC validation, SameSite=Strict
- ๐ XSS Prevention - Auto-escaping templates, CSP nonces
- ๐ SQL Injection - Parameterized queries, column validation
- ๐ Secure Sessions - HttpOnly, Secure flags, HMAC-signed
- ๐ Path Traversal - Absolute path validation
Admin & Developer Tools
- ๐จโ๐ผ Auto Admin - Django-style admin in 2 lines of code
- ๐ i18n Ready - Multi-language support with JSON translations
- ๐ง Email Service - SMTP integration with templates
- ๐ฆ Production Build - Bytecode compilation, minification, WebP conversion
- ๐งช Testing Tools - Built-in test client, fixtures support
โ๏ธ Asok vs Django vs Flask
Asok was designed to bring the best of both worlds (the lightweight nature of Flask and the batteries-included approach of Django), while adding modern file-based routing (inspired by Next.js/SvelteKit).
| Feature | Asok | Flask | Django |
|---|---|---|---|
| External Dependencies | 0 (Zero) | ~6 (Werkzeug, Jinja...) | ~3 (asgiref, sqlparse...) |
| Philosophy | Batteries Included + Modern | Micro-framework | Megalo-framework |
| Routing System | File-based (src/pages/) |
Decorators (@app.route) |
Centralized (urls.py) |
| Built-in ORM | Yes (AsokDB - optimized SQLite) | No (SQLAlchemy required) | Yes (Full-featured, multi-DB) |
| Generated Admin | Yes, 100% automatic and reactive | No (Flask-Admin required) | Yes, historical and heavy |
| Real-time (WebSockets) | Native (Alive Engine) | No (Flask-SocketIO required) | Complex (Django Channels) |
| Reactive Components | Native (Live Components) | No | No |
| Ideal for | Fast projects, Modern SaaS, Zero devops | Simple APIs, Microservices | Large legacy architectures |
๐ ๏ธ Installation & Setup
1. Installation
You can install Asok via pip:
pip install asok
or clone the repo and use the asok/ folder.
2. Create a project
asok create my-project
cd my-project
3. Start the server
asok dev
๐๏ธ Project Structure
โโโ src
โย ย โโโ components # Reactive components
โย ย โโโ locales # JSON translations (en.json, fr.json, ...)
โย ย โย ย โโโ en.json
โย ย โย ย โโโ fr.json
โย ย โโโ middlewares # Request interceptors
โย ย โโโ models # ORM models (Post.py, User.py)
โย ย โโโ pages # YOUR ROUTES (page.py, page.html)
โย ย โย ย โโโ page.html
โย ย โย ย โโโ page.py
โย ย โโโ partials # css, js, images, html, uploads
โย ย โโโ css
โย ย โย ย โโโ base.css
โย ย โโโ html
โย ย โย ย โโโ base.html
โย ย โโโ images
โย ย โย ย โโโ logo.svg
โย ย โโโ js
โย ย โย ย โโโ base.js
โย ย โโโ uploads
โโโ wsgi.py # Application entry point
๐ฃ๏ธ Routing
Routing is dictated by the structure of the src/pages/ folder. Each folder represents a URL segment, and contains a page.py or page.html file.
src/pages/page.htmlโ/src/pages/about/page.htmlโ/aboutsrc/pages/user/[id]/page.pyโ/user/123(idparameter)src/pages/blog/[slug:slug]/page.pyโ/blog/my-post-slug
Dynamic Page Example (src/pages/shop/[cat]/page.py)
from asok import Request
def render(request: Request):
category = request.params.get('cat')
return f"Shop : {category}"
๐จ Templates & Inheritance
Templates in src/pages/ can inherit from layouts in src/partials/html/.
Layout (src/partials/html/base.html) :
<!DOCTYPE html>
<html lang="{{ request.lang }}">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" href="{{ static('images/logo.svg') }}" type="image/svg+xml">
<title>{% block title %}{% endblock %} — my-project</title>
<link rel="stylesheet" href="{{ static('css/base.css') }}">
<script defer src="{{ static('js/base.js') }}"></script>
</head>
<body>
<main>{% block main %}{% endblock %}</main>
</body>
</html>
Page (src/pages/page.html) :
{% extends "html/base.html" %}
{% block title %}Welcome{% endblock %}
{% block main %}
<div class="container">
<img src="{{ static('images/logo.svg') }}" alt="Logo Asok">
<h1>Welcome to Asok</h1>
<p>No dependenciesโjust Pythonโs standard library</p>
<p>Edit <code>src/pages/page.html</code> to get started.</p>
</div>
{% endblock %}
๐๏ธ AsokDB (The ORM)
Define your models in src/models/.
from asok import Field, Model
class User(Model):
email = Field.String(unique=True, nullable=False)
password = Field.Password()
name = Field.String()
is_admin = Field.Boolean(default=False)
created_at = Field.CreatedAt()
๐ i18n & Validation
- Translation:
{{ __('welcome') }}(looks insrc/locales/). - Validation:
Validator(data).rule('email', 'required|email'). - CSRF:
{{ request.csrf_input() }}automatic in forms.
๐จ Admin Customization
The administration interface is highly customizable:
admin = Admin(app, site_name="My Platform", favicon="images/logo.svg")
Asset Resolution (Smart Resolution)
The admin automatically detects the source of resources:
- Internal Assets: Files like
admin.cssor the defaultlogo.svgare served from the package. - Project Assets: If you specify a path (e.g.
images/logo.svgoruploads/icon.png), the admin will serve them from your resources folder (src/partials/).
๐ Towards Production
Asok is WSGI compatible. You can use Gunicorn or any other WSGI server:
gunicorn wsgi:app
๐ค Contributing
We โค๏ธ contributions! Asok is built to be simple, transparent, and fun to hack on. Whether you're a Python beginner or expert, there's a place for you here.
๐ Ways to Contribute
- ๐ Report bugs - Found an issue? Open a bug report
- ๐ก Suggest features - Have an idea? Start a discussion
- ๐ Improve docs - Spot a typo? Docs are in asok-docs
- ๐ง Submit PRs - Fixed something? Send a pull request
- โญ Star the repo - Show your support!
- ๐ฌ Help others - Answer questions in Discussions
๐ Quick Start for Contributors
# 1. Fork and clone the repo
git clone https://github.com/YOUR_USERNAME/asok.git
cd asok
# 2. Create a virtual environment
python -m venv venv
source venv/bin/activate # or `venv\Scripts\activate` on Windows
# 3. Install dependencies (dev mode)
pip install -e .
# 4. Run the test suite (353 tests should pass!)
python -m pytest
# 5. Create a branch for your feature
git checkout -b feature/amazing-feature
# 6. Make your changes and test
python -m pytest -v
# 7. Commit and push
git commit -m "feat: add amazing feature"
git push origin feature/amazing-feature
๐ Read our full Contributing Guide for code style, commit conventions, and more.
๐ Contributors
Thanks to all our amazing contributors! ๐
๐ Ecosystem
Explore the Asok ecosystem:
- ๐ ๏ธ Asok Examples - Ready-to-use projects and templates
- ๐งช Asok Lab - Experimental features, benchmarks, playground
- ๐ Asok Docs - Documentation and website source
- ๐ Asok Tutorials - Step-by-step learning paths
๐ฌ Community & Support
Join our growing community:
- ๐ฌ Discord Server - Real-time chat, help, and discussions
- ๐ฆ Twitter/X - News and updates
- ๐ GitHub Discussions - Q&A, feature requests, show & tell
- ๐ง Newsletter - Monthly updates and tips
- ๐ฅ YouTube Channel - Tutorials and demos
Need help?
- ๐ Check the documentation
- ๐ Search existing issues
- ๐ฌ Ask in Discord or Discussions
๐บ๏ธ Roadmap
Asok is actively developed with exciting features planned:
v0.2.0 (Q2 2026) - Enterprise Features
- PostgreSQL & MySQL support, advanced ORM relationships
- WebSocket rooms for real-time collaboration
- Background job queue system
- Plugin ecosystem & CLI enhancements
v0.3.0 (Q3 2026) - Modern Stack
- GraphQL API support with auto-generated schemas
- Server-side rendering (SSR) & static site generation
- Built-in monitoring & observability tools
- Full async/await support (ASGI)
See the detailed roadmap for complete feature lists, timelines, and how to contribute to planning.
โญ Star History
๐ License
This project is licensed under the MIT License - see the LICENSE file for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file asok-0.1.3.tar.gz.
File metadata
- Download URL: asok-0.1.3.tar.gz
- Upload date:
- Size: 339.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7930e4b43c257cd61e835dbbaf66ff0916dd3174399c13929370c326d91c3bf9
|
|
| MD5 |
3ef10eb6c7d4ced6e017f7c7c12a24f0
|
|
| BLAKE2b-256 |
4cea98b7ddffd8f40c82f60d2f6a2287362e662a3fef9980693766c27d1dc89e
|
Provenance
The following attestation bundles were made for asok-0.1.3.tar.gz:
Publisher:
release.yml on asok-framework/asok
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
asok-0.1.3.tar.gz -
Subject digest:
7930e4b43c257cd61e835dbbaf66ff0916dd3174399c13929370c326d91c3bf9 - Sigstore transparency entry: 1436158390
- Sigstore integration time:
-
Permalink:
asok-framework/asok@3a512158bc3cc639242cc011800fadd8b537cf1b -
Branch / Tag:
refs/tags/v.0.1.3 - Owner: https://github.com/asok-framework
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@3a512158bc3cc639242cc011800fadd8b537cf1b -
Trigger Event:
release
-
Statement type:
File details
Details for the file asok-0.1.3-py3-none-any.whl.
File metadata
- Download URL: asok-0.1.3-py3-none-any.whl
- Upload date:
- Size: 321.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
74e620c72c64e4cd256d54ba4447edb1fb2bd4964ca7ee1cd4b0105b9d42a0f1
|
|
| MD5 |
b5634e79386ea82640fd19374ade0107
|
|
| BLAKE2b-256 |
88e3bcb0c625b5a3c3cea468b853b482ddbe290917a18f9942f5d1f9cf69ae24
|
Provenance
The following attestation bundles were made for asok-0.1.3-py3-none-any.whl:
Publisher:
release.yml on asok-framework/asok
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
asok-0.1.3-py3-none-any.whl -
Subject digest:
74e620c72c64e4cd256d54ba4447edb1fb2bd4964ca7ee1cd4b0105b9d42a0f1 - Sigstore transparency entry: 1436158392
- Sigstore integration time:
-
Permalink:
asok-framework/asok@3a512158bc3cc639242cc011800fadd8b537cf1b -
Branch / Tag:
refs/tags/v.0.1.3 - Owner: https://github.com/asok-framework
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@3a512158bc3cc639242cc011800fadd8b537cf1b -
Trigger Event:
release
-
Statement type: