The Laravel of Python — FastAPI + Pydantic + SQLAlchemy, end-to-end type-safe.
Project description
arvel
The Laravel of Python — built natively on FastAPI + Pydantic + SQLAlchemy, end-to-end type-safe.
Status: Pre-alpha. The public API can still change before
1.0.
Arvel is a batteries-included application framework for async Python. It layers a service container, typed configuration, an Eloquent-style ORM (Arvent), an HTTP stack (routing, form requests, API resources, middleware), cache, sessions, storage, queues, events, broadcasting, mail, notifications, scheduling, and auth on top of the standard async stack — without replacing FastAPI, Pydantic, or SQLAlchemy.
Full documentation lives at arvel.dev.
Install
pip install arvel
# with extras:
pip install 'arvel[postgres,redis,queue]'
Arvel requires Python 3.14+.
Hello, Arvel
The framework boots through an Application. You register configuration and service providers, then
resolve services from the container:
from pathlib import Path
from arvel import Application, ServiceProvider
from arvel.config import ArvelSettings
class AppSettings(ArvelSettings):
name: str = "MyApp"
debug: bool = False
class Greeter:
def __init__(self, settings: AppSettings) -> None:
self.settings = settings
def greet(self, who: str) -> str:
prefix = "DEBUG: " if self.settings.debug else ""
return f"{prefix}Hello from {self.settings.name}, {who}!"
class GreeterProvider(ServiceProvider):
def register(self) -> None:
self.app.container.singleton(Greeter)
async def main() -> None:
app = (
Application.configure(Path("."))
.with_environment("production")
.with_config_files([AppSettings])
.with_providers([GreeterProvider])
.create()
)
await app.boot()
greeter = app.container.make(Greeter)
print(greeter.greet("Arvel"))
await app.shutdown()
In a generated project you don't write this by hand — arvel new scaffolds bootstrap/app.py and
bootstrap/providers.py, and arvel serve runs the ASGI app for you.
What's inside
| Area | Highlights |
|---|---|
| Container & providers | Constructor injection, singletons, contextual bindings, dep() for FastAPI Depends |
| Config | ArvelSettings (pydantic-settings), @register, Config.of(...), the config() helper |
| HTTP | Route decorators, FormRequest validation, JsonResource/ResourceCollection, middleware |
| Arvent ORM | Model, typed relations, soft deletes, scopes, attribute casts, a schema DSL → Alembic |
| Auth | JWT / session / token guards, Gate and policies, password resets, email verification |
| Queues | Job, the Bus facade, retries with backoff, dead-letter queue, graceful workers |
| Events | Typed Event models, inline and ShouldQueue listeners, the Event facade |
| Mail & notifications | Mailables (envelope/content), SMTP/log/array drivers, multi-channel notifications |
| Cache / session / storage | Pluggable drivers behind Cache, Session, and Storage facades |
| Scheduling & broadcasting | Cron-style scheduler, Reverb-compatible WebSocket server |
CLI
Installing the package puts the arvel binary on your PATH. A few common commands:
arvel new my-app # scaffold a project
arvel serve --reload # run the ASGI dev server
arvel make:model Post -m # generate a model + migration
arvel migrate # run pending migrations
arvel queue:work # process queued jobs
arvel schedule:work # run the scheduler
arvel route:list # inspect registered routes
arvel about # show framework + environment info
Run arvel --help for the full list.
License
MIT — see LICENSE.
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 arvel-0.10.0.tar.gz.
File metadata
- Download URL: arvel-0.10.0.tar.gz
- Upload date:
- Size: 859.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e22acb06500c4feef16a014a34f6fa1394c317bd0851d33283830ab13264f287
|
|
| MD5 |
71c3aa7eb6b51be6d849703c375bfb48
|
|
| BLAKE2b-256 |
40a7b657b96347d7a0a17742a80c54ff8284195b2837d3335275007e657b5f82
|
Provenance
The following attestation bundles were made for arvel-0.10.0.tar.gz:
Publisher:
publish.yml on mohamed-rekiba/arvel
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
arvel-0.10.0.tar.gz -
Subject digest:
e22acb06500c4feef16a014a34f6fa1394c317bd0851d33283830ab13264f287 - Sigstore transparency entry: 1704695264
- Sigstore integration time:
-
Permalink:
mohamed-rekiba/arvel@03c70b0154d8607afe5bad28987d0cd2ca0bb627 -
Branch / Tag:
refs/tags/arvel-v0.10.0 - Owner: https://github.com/mohamed-rekiba
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@03c70b0154d8607afe5bad28987d0cd2ca0bb627 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file arvel-0.10.0-py3-none-any.whl.
File metadata
- Download URL: arvel-0.10.0-py3-none-any.whl
- Upload date:
- Size: 630.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
597fa27750658a6921eafc3a198ebf6489e73394190582368853153008cdaa48
|
|
| MD5 |
ca9854ea325f8b1465b67eb77b4ec5fc
|
|
| BLAKE2b-256 |
0be907a545de8b7e53f3952bd06c3be801f3064faceabc89807b4c1a9c9515e5
|
Provenance
The following attestation bundles were made for arvel-0.10.0-py3-none-any.whl:
Publisher:
publish.yml on mohamed-rekiba/arvel
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
arvel-0.10.0-py3-none-any.whl -
Subject digest:
597fa27750658a6921eafc3a198ebf6489e73394190582368853153008cdaa48 - Sigstore transparency entry: 1704695271
- Sigstore integration time:
-
Permalink:
mohamed-rekiba/arvel@03c70b0154d8607afe5bad28987d0cd2ca0bb627 -
Branch / Tag:
refs/tags/arvel-v0.10.0 - Owner: https://github.com/mohamed-rekiba
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@03c70b0154d8607afe5bad28987d0cd2ca0bb627 -
Trigger Event:
workflow_dispatch
-
Statement type: