A batteries-included async Python framework combining Django's DX with FastAPI's performance
Project description
P8s (Prometheus)
Forge AI-native, full-stack applications with the fire of the gods.
Getting Started • Documentation • Features • Quick Start
Why P8s?
| Django | FastAPI | P8s |
|---|---|---|
| Complete but legacy | Fast but fragmented | Best of both |
| Sync-first | Async-first | Async by default |
| Admin included | No admin | Django-style admin |
| No AI support | No AI support | AI is a primitive |
P8s brings order to modern Python development.
Features
Async Backend
- FastAPI under the hood
- SQLModel ORM (SQLAlchemy + Pydantic)
- Automatic CRUD for registered models
- UUID & Soft Deletes by default (
.active(),.deleted(),.all_with_deleted())
Authentication
- JWT Authentication out of the box
- User roles (User, Admin, Superuser)
- Permissions & Groups (Django-style)
- Secure defaults (bcrypt, protected routes)
AI-Native
- AIField: Auto-generate content from prompts
- VectorField: Store embeddings for semantic search
- VectorSearch: Query by similarity
- Supports OpenAI, Anthropic, Google, Ollama, and more
Admin Panel
- Django-style admin interface
- Dynamic CRUD from your models
- Search, filter, paginate, bulk actions
- No frontend code required
Forms & Validation
- Pydantic-based form validation
- ModelForm auto-generated from models
- 11 field types with HTML rendering hints
- CSRF protection middleware
Database & Migrations
- Auto-detected migrations with Alembic
- Fixtures:
dumpdata/loaddata - Database shell:
dbshell
CLI Tools (18+ commands)
p8s new project myapp # Create project
p8s new app blog # Add app
p8s dev # Development server (backend + frontend)
p8s migrate # Run migrations
p8s makemigrations # Auto-detect model changes
p8s createsuperuser # Create admin user
p8s shell # Interactive Python shell
p8s check # Validate configuration
p8s dumpdata # Export fixtures
p8s loaddata # Import fixtures
p8s dbshell # Database shell
p8s sendtestemail # Test email config
p8s collectstatic # Collect static files
Quick Start
Installation
pip install p8s
Create a Project
p8s new project myapp
cd myapp
Run Development Server
p8s dev
P8s (Prometheus)
━━━━━━━━━━━━━━━━━━━
Starting development server...
Backend: http://localhost:8000
Frontend: http://localhost:5173
[backend] INFO: Uvicorn running on http://localhost:8000
[frontend] VITE ready in 456ms
Access Your App
| URL | Description |
|---|---|
http://localhost:8000 |
Backend API |
http://localhost:8000/admin/ |
Admin panel |
http://localhost:8000/docs |
OpenAPI docs |
http://localhost:5173 |
Frontend |
Code Example
from p8s import Model
from p8s.ai import AIField, VectorField
from p8s.admin import register_model
from sqlmodel import Field
@register_model
class Product(Model, table=True):
name: str = Field(index=True)
description: str
# AI-generated SEO description
seo_description: str | None = AIField(
prompt="Generate SEO description for {name}: {description}",
source_fields=["name", "description"],
)
# Vector embedding for similarity search
embedding: list[float] | None = VectorField(
source_field="description"
)
class Admin:
list_display = ["name", "created_at"]
search_fields = ["name"]
Forms Example
from p8s.forms import Form, ModelForm, CharField, EmailField
class ContactForm(Form):
name: str = CharField(max_length=100)
email: str = EmailField()
message: str
form = ContactForm.from_data(request.form)
if form.is_valid():
send_email(form.data)
Project Structure
myapp/
├── backend/
│ ├── main.py # FastAPI entry point
│ ├── models.py # Database models
│ ├── settings.py # Configuration (Pydantic Settings)
│ └── apps/ # Your apps
│ └── products/
│ ├── models.py
│ ├── router.py
│ └── schemas.py
├── frontend/ # React + Vite
│ └── src/
├── migrations/ # Alembic migrations
└── .env # Environment variables
Documentation
| Topic | Description |
|---|---|
| Getting Started | Create your first project |
| CLI Reference | All 18+ commands |
| Models & Database | SQLModel ORM usage |
| Migrations | Auto-detected migrations |
| Authentication | JWT and user management |
| Admin Panel | Django-style admin |
| Forms | Validation & ModelForm |
| Middleware | CSRF, security, timing |
| AI Features | AIField, VectorField, search |
| Testing | Test utilities |
| Configuration | Environment and settings |
| Deployment | Docker, Railway, Fly.io |
Test Coverage
pytest tests/ -v
# 186 passed
Roadmap
Completed
- Django-style settings discovery (
P8S_SETTINGS_MODULE) - Admin panel with login, CRUD, bulk actions
- JWT authentication with permissions/groups
- SQLModel integration with soft deletes
- Alembic migrations with auto-detection
- Forms module with ModelForm
- CSRF middleware
- Fixtures (dumpdata/loaddata)
- Testing utilities
- 186 tests passing
In Progress
- Admin inlines (nested models)
- Frontend auth hooks
- TypeScript type generation
Planned
- WebSocket support
- Background tasks (Celery/ARQ)
- i18n/l10n
- Multi-tenancy
- GraphQL support
- PyPI release
Contributing
Contributions are welcome! Please read the contributing guidelines before submitting a PR.
# Run tests
pytest tests/
# Lint
ruff check src/
# Format
ruff format src/
License
MIT — steal the fire, responsibly
Built with ❤️ by Peppe37
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 p8s-1.3.0.tar.gz.
File metadata
- Download URL: p8s-1.3.0.tar.gz
- Upload date:
- Size: 247.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9a27bb873a0327ae162d42d5b8e47470c3ee992b1cb18e8c31b86a3d5f1c0f16
|
|
| MD5 |
053ebe70e8fd9c5c6fcff0b803196557
|
|
| BLAKE2b-256 |
012d53b58a29e38805dabf3cdd7b7e607a782bacbf760388c585b45662f97992
|
Provenance
The following attestation bundles were made for p8s-1.3.0.tar.gz:
Publisher:
release.yml on Peppe37/p8s
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
p8s-1.3.0.tar.gz -
Subject digest:
9a27bb873a0327ae162d42d5b8e47470c3ee992b1cb18e8c31b86a3d5f1c0f16 - Sigstore transparency entry: 832796580
- Sigstore integration time:
-
Permalink:
Peppe37/p8s@5c5baecbafc0268767ca3ae23e78ebc5910319ca -
Branch / Tag:
refs/heads/main - Owner: https://github.com/Peppe37
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@5c5baecbafc0268767ca3ae23e78ebc5910319ca -
Trigger Event:
push
-
Statement type:
File details
Details for the file p8s-1.3.0-py3-none-any.whl.
File metadata
- Download URL: p8s-1.3.0-py3-none-any.whl
- Upload date:
- Size: 293.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a68337b9339c9a800b3a60c9c49e386b3925bb95c318722b56da2da5efd571f6
|
|
| MD5 |
8bfddbccea2c37e61cb32e1b569ca2fd
|
|
| BLAKE2b-256 |
eb7289cf57610c3a991fe75908535045bb751fe5750d5ae897e5426e5ac757f1
|
Provenance
The following attestation bundles were made for p8s-1.3.0-py3-none-any.whl:
Publisher:
release.yml on Peppe37/p8s
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
p8s-1.3.0-py3-none-any.whl -
Subject digest:
a68337b9339c9a800b3a60c9c49e386b3925bb95c318722b56da2da5efd571f6 - Sigstore transparency entry: 832796581
- Sigstore integration time:
-
Permalink:
Peppe37/p8s@5c5baecbafc0268767ca3ae23e78ebc5910319ca -
Branch / Tag:
refs/heads/main - Owner: https://github.com/Peppe37
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@5c5baecbafc0268767ca3ae23e78ebc5910319ca -
Trigger Event:
push
-
Statement type: