A minimalist, zero-dependency Python web framework.
Project description
Asok is a cohesive, full-stack Python web framework designed for developer speed, elegant architecture, and production-grade security. Built with a "zero-dependency" philosophy, it unifies server-side logic and client-side reactivity into a single, high-performance package, offering a streamlined and secure development experience from the first line of code.
๐ 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 (~360KB, ~20K lines of code)
- โ 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 - ~360KB, ~20K lines of code
- โจ๏ธ 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 600,000 iterations (OWASP 2023 compliant)
- ๐ 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
High-Performance APIs
- ๐ Native API Engine - Build robust REST APIs with minimal code
- ๐ Auto-OpenAPI - Automatic OpenAPI 3.0 (Swagger) generation for every route
- ๐ก๏ธ Bearer Token Auth - Built-in secure authentication for stateless clients
- โก Optimized JSON - High-speed serialization for high-throughput services
- ๐ Live Documentation - Interactive API explorer (Swagger UI) included
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
โ๏ธ Philosophy & Positioning
Asok is built for the modern era of web development, where the boundary between frontend and backend is fluid. While it shares some values with other frameworks, it carves out its own path by providing a unified environment that eliminates the need for a complex "Franken-stack" of multiple tools and dependencies.
| 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
๐ก Note for VS Code Users: For the best developer experience, we highly recommend installing the official Asok VS Code Extension. It provides native autocompletion, reactive snippets, and integrated CLI commands directly in your editor.
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
๐ Production Security Checklist
Asok is built to be secure by default, but production environments require specific configurations to enable all protections.
1. Mandatory Environment Variables
In production (DEBUG=False), Asok enforces strict security checks:
SECRET_KEY: Must be at least 32 characters long. Usesecrets.token_hex(32)to generate one.APP_URL: Required for Magic Links to prevent Host Header Injection. Example:https://myapp.com.
2. Secure Defaults
- DEBUG: Default is
False. You must explicitly setDEBUG=Truein your.envfor development. - Password Hashing: PBKDF2-SHA256 with 600,000 iterations (OWASP 2023 compliant).
- Security Headers: HSTS (1 year), CSP (with nonces), X-Frame-Options (DENY), and X-Content-Type-Options (nosniff) are enabled by default.
3. Recommended .env for Production
ASOK_ENV=production
DEBUG=false
SECRET_KEY=your-64-character-ultra-secure-key-here
APP_URL=https://yourdomain.com
DATABASE_URL=sqlite:///data/prod.db
๐ค 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 VS Code Extension - Official editor toolkit (autocompletion, snippets, CLI)
- ๐ ๏ธ 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
- ๐ฅ 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.6.tar.gz.
File metadata
- Download URL: asok-0.1.6.tar.gz
- Upload date:
- Size: 412.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f248a1ac3443ae388d99a13b764a44b70a66e4030d545b8928d590a2bfd2dc31
|
|
| MD5 |
40ef71a156a1bf47557c253c28963bd6
|
|
| BLAKE2b-256 |
ab4108e9174ff8765a086aa0bbdadf8cddad994bcc48e260674cddb4e5c74a7e
|
Provenance
The following attestation bundles were made for asok-0.1.6.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.6.tar.gz -
Subject digest:
f248a1ac3443ae388d99a13b764a44b70a66e4030d545b8928d590a2bfd2dc31 - Sigstore transparency entry: 1563906400
- Sigstore integration time:
-
Permalink:
asok-framework/asok@f1128598221c668b855403d6883f8aaf3c04de5d -
Branch / Tag:
refs/tags/v0.1.6 - Owner: https://github.com/asok-framework
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@f1128598221c668b855403d6883f8aaf3c04de5d -
Trigger Event:
release
-
Statement type:
File details
Details for the file asok-0.1.6-py3-none-any.whl.
File metadata
- Download URL: asok-0.1.6-py3-none-any.whl
- Upload date:
- Size: 394.5 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 |
e206a59a00e7714590622474eec2fa97429507ae81453d297c150f743900aa3c
|
|
| MD5 |
1253687e589fbf1e2f7e343ac10e7824
|
|
| BLAKE2b-256 |
a4e3ebbc9f7bc3406efd9e17d9643cf17fcea93f67715b3ca43c54e5518bb8d7
|
Provenance
The following attestation bundles were made for asok-0.1.6-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.6-py3-none-any.whl -
Subject digest:
e206a59a00e7714590622474eec2fa97429507ae81453d297c150f743900aa3c - Sigstore transparency entry: 1563906435
- Sigstore integration time:
-
Permalink:
asok-framework/asok@f1128598221c668b855403d6883f8aaf3c04de5d -
Branch / Tag:
refs/tags/v0.1.6 - Owner: https://github.com/asok-framework
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@f1128598221c668b855403d6883f8aaf3c04de5d -
Trigger Event:
release
-
Statement type: